ARKit2에서 라이드 워치의 사용 장면을 재현 해 보았습니다.

9291 단어 ARKit
그레인지 Advent Calendar 2018 8일째 담당의 raitome입니다
글레인지에서 고객 엔지니어를하고 있습니다.
최근 ARKit2
그리고 현재 방송중인 「가면 라이더 지오」의 변신 아이템인 「라이드 워치」를 사용해 극중의 사용 장면을 재현해 보았습니다

이번에 소개하는 기능



・화상 인식(ARReferenceImage)
・물체 인식(ARReferenceObject)

기술·환경



・Swift4
・iOS12
・Xcode10
· iPhoneX

코드 쓰기 전 준비



1. 카메라 사용 권한 설정



카메라 사용 권한을 설정하지 않으면 부팅시 충돌이 발생하므로 info.plist에서 설정합니다.


2.storyboard에 ARSCNView 추가



카메라 영상은 이 View에 표시


이미지 인식(ARReferenceImage)



1. Assets.xcassets에 AR Resource Group을 추가하여 인식할 이미지를 추가합니다.



너무 복잡한 이미지라면 때로는 인식하기 어려울 수 있습니다.


2. override func viewWillAppear 내에서 이미지 인식을 위한 구성을 설정하고 실행



ViewController.swift
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        guard let images = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: Bundle.main) else {
            return
        }
        // Create a session configuration
        let configuration = ARImageTrackingConfiguration()
        configuration.trackingImages = images

        // Run the view's session
        sceneView.session.run(configuration)
    }

3. 인식할 수 있었을 때의 동작



func renderer에 필요한 처리 작성
기본적으로 SpriteKit의 처리를 작성하여 무언가를 표시하는 것이 이해하기 쉽습니다.

ViewController.swift
    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        let node = SCNNode()
        let imageAnchor = anchor as? ARImageAnchor
        let referenceImage = imageAnchor?.referenceImage
        let imageName = referenceImage?.name
        // imageNameがAR Resource Groupに追加した画像名と一致する時に、何か処理をする
        return node
    }

물체 인식(ARReferenceImage)



1. 인식하고 싶은 물체의 데이터(AR Object)를 작성한다



Apple 공식 샘플 앱을 사용하여 물체를 스캔하고 데이터를 만들 수 있습니다.
Scanning and Detecting 3D Objects


↑스쿠쇼대로, 물체를 각 각도로부터 스캔하여, 「.arobject」파일로서 출력한다

2. 이미지 인식과 마찬가지로 Assets.xcassets에 AR Resource Group 추가



AR ResourceGroup에 드래그 앤 드롭으로 ".arobject"파일 추가


3. override func viewWillAppear 내에서 물체 인식을 위한 구성 설정 및 실행



ViewController.swift
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // Create a session configuration
        let configuration = ARWorldTrackingConfiguration()

        // Object Detection
        configuration.detectionObjects = ARReferenceObject.referenceObjects(inGroupNamed: "KivaObject", bundle: Bundle.main)!

        // Run the view's session
        sceneView.session.run(configuration)
    }

4. 인식할 수 있을 때의 동작



func renderer에 필요한 처리 작성
기본적으로 SpriteKit의 처리를 작성하여 무언가를 표시하는 것이 이해하기 쉽습니다.

ViewController.swift
    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        let node = SCNNode()
        if let objectAnchor = anchor as? ARObjectAnchor {
            // 何か処理を書く
        }
        return node
}

라이드 워치 사용 장면 재현



소개한 기술을 사용해, 가면 라이더 지오의 라이드 워치로 극중의 사용 씬을 재현도 해 보았습니다만, 주위의 환경이나 빛의 관계로, 인식이 둔할 때가 상당히 있는 것은 조금의 난점 이었다
흥미있는 분은 동영상

마지막으로



ARKit2는 그 밖에도 기능이 많이 있는 것 같고, 얼굴의 인식이나 ARWorldMap이라고 하는 것도 재미있을 것 같기 때문에, 또 이번 만져 보고 싶습니다

좋은 웹페이지 즐겨찾기