【iOS】ARKitを使って人物を検出してみた

以前にサイダーを検出するアプリを作ったことがありますが、このアプリで使っているARKitという技術を使うと、簡単に人物を検出することができます。ということで、検出してみました。

仕上がり

こんな感じでうまく検出できました。

酔っぱらいを検出

作り方

1.XCodeから、プロジェクトの作成で、Augmented Reality Appを選択します。

画像1

2.storyboardを開いて、もともと配置されていたARViewを削除し、Scene Viewを追加します。画面の上下左右に張り付くように設定しましょう。

また、Scene ViewをView Controllerに紐付けます。

画像2

3.コード全文は次のとおりです。説明をいれています。

import UIKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {
   @IBOutlet var sceneView: ARSCNView!
   
   override func viewDidLoad() {
       super.viewDidLoad()
       initARKit()
   }
   
   override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       startARKit()
   }

   fileprivate func initARKit() {
       sceneView.delegate = self // この設定により人物を検出したときにrendererが呼ばれる
   }

   fileprivate func startARKit() {
       let configuration = ARBodyTrackingConfiguration() // 人物の動きをトラッキングする設定
       sceneView.session.run(configuration) // セッションの開始
   }

   // 人物を検出すると呼ばれる
   func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
       if anchor is ARBodyAnchor { // 人物だった場合
           // 以下のコードで人物の位置に水色の円を追加している
           let geometory = SCNSphere(radius: 1)
           geometory.firstMaterial?.diffuse.contents = UIColor.init(red: 175/255, green: 255/255, blue: 255/255, alpha: 200/255)
           let sphere = SCNNode(geometry: geometory)
           
           node.addChildNode(sphere)
       }
   }
}

今回は人物の検出にとどめていますが、「BodyTracking」という名前の通り、人の体の動きを検出できます。

Githubのリポジトリはこちらです。

<参考文献>


この記事が気に入ったらサポートをしてみませんか?