FRMSKI開発ブログ

AWS、iOS、AR/VRなど開発メモ

Swiftでプロパティ監視(willSet/didSet)

Swiftで変数の変更を監視するには「willSet/didSet」を使います。

プロパティ監視はsetterやgetterなどのプロパティ代入とは違い、プロパティの変更時に呼ばれます。

プロパティ変更前に呼ばれるのは「willSet」、変更後に呼ばれるのが「didSet」になります。

var prop:Int = 0 {
    willSet{
         //プロパティ変更前に通知される
         print(prop)
    }
    didSet{
         //プロパティ変更後に通知される
         print(prop)
    }
}

超簡単SwiftのInterfaceBuilderでジェスチャー取得

SwiftのInterfaceBuilderを使えばタップやスワイプなどジェスチャーを簡単に取得できます。

【手順】

①ライブラリからViewのストーリーボード へTapGestureRecognizerオブジェクトをドラッグドロップ

②ViewController.swiftに@IBActionでタップ関数を作成

@IBAction func tap(_ sender:UITapGestureRecognizer)
    {
        print("tap")
    }

③作成したタップ関数を先程配置したTapGestureRecognizerにアタッチ

f:id:frmski:20180923161746p:plain

以上の手順でタップ関数が実行されます。

ARKitでカメラの位置を取得する

ARKitでカメラの位置を取得する方法です。

ARSCNView.sessionのデリゲート(ARSessionDelegate)をViewController自身に設定します。

sceneView.session.delegate = self

セッションのイベントにアクセスしてフレームからカメラを取得出来ます。

func session(_ session: ARSession, didUpdate frame: ARFrame) {
        let currentCamera = session.currentFrame?.camera
        let transform = currentCamera?.transform

SceneKitで3Dシーンを作成「SceneKit Scene File(.scn)」

SceneKitではSceneKit Scene File(scn)を新規作成することでシーンを作成できる。

f:id:frmski:20180920035223p:plain:w200

シーンでは3Dオブジェクトの配置などがエディタ上で可能。 f:id:frmski:20180920035420p:plain:w600 作成したシーンファイルは下記ソースでARSCNViewに配置できます。

let scene = SCNScene(named: "ship.scn")!
sceneView.scene = scene

【ARKit】ARSCNDebugOptionsで特徴点と座標軸を表示する

CoreML開発に特徴点もしくは座標軸を表示する方法を紹介します。

ARSCNDebugOptionsを設定します。

特徴点を表示するにはshowFeaturePoints

座標軸を表示するにはshowWorldOrigins

下記は両方表示するコードです。

self.sceneView.debugOptions = 
 [ARSCNDebugOptions.showFeaturePoints, 
 [f:id:frmski:20180916134530p:plain]ARSCNDebugOptions.showWorldOrigin]

f:id:frmski:20180916134538p:plain:w300←特徴点 f:id:frmski:20180916134530p:plain:w300←座標軸

CoreML + ARKit【調査編】

f:id:frmski:20180915165644p:plain

CoreMLの調査のためApple公式のドキュメントを調査しました。↓

Apple Developer Documentation

 

【調査内容】

機械学習のモデルは.mlmodelを使用

・ドキュメントからプロジェクトのサンプルをダウンロードできます。

・既存の機械学習モデルもmlmodelに変換可能

Converting Trained Models to Core ML | Apple Developer Documentation

・CreateMLで機械学習モデルを生成できる

Training a Create ML Model to Classify Flowers | Apple Developer Documentation

・画像認識はVisionフレームワークと連携

・言語認識はNaturalLanguageフレームワークと連携

 

実際にアプリを作って遊んでみます。