Slide 1

Slide 1 text

作ってわかる!
 LiDARによるカメラの
 暗所オートフォーカス機能
 株式会社ZOZOテクノロジーズ
 計測プラットフォーム本部 フロントエンド部 iOSチーム
 寺田 めぐみ Copyright © ZOZO Technologies, Inc. 2021.9.19 iOSDC JAPAN 2021

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 計測プラットフォーム本部 フロントエンド部 iOSチーム
 寺田 めぐみ ( marica @tama_Ud )
 
 2019年7月〜バリスタからエンジニアに
 2021年4月ZZT中途入社
 画像処理, XRが好き
 
 2

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. 3 このトークの目的
 🎉
 ✔ LiDARスキャナについて楽しく学ぶ!
 ✔ 実装を通してLiDARスキャナの理解を深める
 ✔ オートフォーカスをざっくり理解する


Slide 4

Slide 4 text

© ZOZO Technologies, Inc. 4 このトークのターゲット
 󰢧󰢨
 ✔ LiDARスキャナについて理解を深めたい人
 ✔ LiDARを利用したカメラアプリの実装を知りたい人


Slide 5

Slide 5 text

© ZOZO Technologies, Inc. 5 目次
 
 1. AFの仕組みについて
 2. 暗所AF性能比較 
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips


Slide 6

Slide 6 text

© ZOZO Technologies, Inc. 6 目次
 
 1. AFの仕組みについて 👈あ 
 2. 暗所AF性能比較 
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips


Slide 7

Slide 7 text

© ZOZO Technologies, Inc. 7 AF(Autofocus)とは?
 AFの仕組みについて 

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. 8 Autofocus
 
 カメラの焦点を被写体に
 自動的に合わせるシステムのこと
 AFの仕組みについて 

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. 9 AF方式の種類
 📸
 
 アクティブ方式 
 パッシブ方式 ハイブリッド方式 AFの仕組みについて 

Slide 10

Slide 10 text

© ZOZO Technologies, Inc. 10 アクティブ方式
 AFの仕組みについて  how
 pros
 cons
 ● 超音波や赤外線による 測距
 ● 暗所でのAFに強い
 ● 遠距離のピント合わせに 弱い(風景写真など)
 ● 間にガラスなどがあると 距離の検出を誤ることが ある


Slide 11

Slide 11 text

© ZOZO Technologies, Inc. 11 パッシブ方式
 AFの仕組みについて  how
 pros
 cons
 ● 画像のコントラストや専 用のレンズ/センサーな どを利用
 ● AF動作が高速
 ● コントラストが低い
 被写体、暗所でのAFに 弱い


Slide 12

Slide 12 text

© ZOZO Technologies, Inc. 12 iPhoneにおけるAF
 AFの仕組みについて 

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. 13 Focus Pixels
 AFの仕組みについて  ✔ “Apple 用語” ✔ iPhone 6 から導入された従来のAF ✔ パッシブ方式AFの一つ?

Slide 14

Slide 14 text

© ZOZO Technologies, Inc. 14 LiDARスキャナ
 AFの仕組みについて  ✔ 2020年3月に iPad Pro に初搭載 ✔ AR体験の向上 ✔ より正確かつ素早く測距することが可能に ✔ 暗所AF速度の向上 👈 今回はここを中心に話します

Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 15 LiDARとは?
 AFの仕組みについて 

Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 16 照射した電磁波が
 対象物に当たって跳ね返ってくるまでの時間 差で距離や方向を測る技術
 AFの仕組みについて 

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. 17 ✔ Light Detection And Rangingの略 ✔ 地質学や気象学などさまざまな分野で利用 ✔ 自動運転車用センサーとしても注目 ✔ iPhoneのLiDARスキャナは赤外線を照射して測距 👉 LiDARスキャナを利用したアクティブ方式のAF AFの仕組みについて 

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. 18 目次
 
 1. AFの仕組みについて
 2. 暗所AF性能比較 👈
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips


Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 19 暗所AF性能比較  iPhone 11
 Focus Pixelsのみ


Slide 20

Slide 20 text

© ZOZO Technologies, Inc. 20 iPhone 12 Pro
 LiDARあり
 暗所AF性能比較 

Slide 21

Slide 21 text

© ZOZO Technologies, Inc. 21 目次
 
 1. AFの仕組みについて
 2. 暗所AF性能比較
 3. LiDARによるAF機能の実装 👈
 4. デモ
 5. 実装Tips


Slide 22

Slide 22 text

© ZOZO Technologies, Inc. 22 LiDARによるAF機能の実装  動作確認環境
 ✔ MacBook Pro / macOS Big Sur ✔ iPhone 12 Pro / iOS 14.7.1 ✔ Xcode 12.5

Slide 23

Slide 23 text

© ZOZO Technologies, Inc. 23 制約
 ✔ LiDARスキャナ付き端末 ✔ iOS14 / ARKit 4 以上 ✔ AVCaptureSession と ARSession は同時実行不可 LiDARによるAF機能の実装 

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. 24 AF機能の処理フロー
 LiDARによるAF機能の実装 

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. 25 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession
 LiDAR
 ①
 AVCaptureSession 
 で通常のバックカメラを起動
 (AFなし)


Slide 26

Slide 26 text

© ZOZO Technologies, Inc. 26 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession
 LiDAR
 ②
 ボタンタップで
 AVCaptureSession 停止
 LiDAR 起動


Slide 27

Slide 27 text

© ZOZO Technologies, Inc. 27 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession
 LiDAR
 ③
 深度マップから
 最もカメラに近い点を検出
 マーカーを表示


Slide 28

Slide 28 text

© ZOZO Technologies, Inc. 28 AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession
 LiDAR
 * fPOI … focusPointOfInterest
 fPOI 座標
 LiDARによるAF機能の実装  ④
 再度ボタンタップで
 LiDAR 停止
 AVFoundation 側に
 fPOI* の座標を渡す


Slide 29

Slide 29 text

© ZOZO Technologies, Inc. 29 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession
 LiDAR
 ⑤
 fPOI を設定する
 (焦点を合わせる)


Slide 30

Slide 30 text

© ZOZO Technologies, Inc. 30 いざ、実装
 LiDARによるAF機能の実装 

Slide 31

Slide 31 text

© ZOZO Technologies, Inc. 31 LiDAR 対応かチェック
 LiDARによるAF機能の実装  func checkLidarIsEnable() -> Bool { return ARWorldTrackingConfiguration.supportsFrameSemantics( [.sceneDepth, .smoothedSceneDepth])

Slide 32

Slide 32 text

© ZOZO Technologies, Inc. 32 let arConfiguration = ARWorldTrackingConfiguration() let arSession: ARSession = ARSession() ... func setupLiDAR() { if type(of: arConfiguration).supportsFrameSemantics(.sceneDepth){ arConfiguration.frameSemantics = .sceneDepth arConfiguration.isAutoFocusEnabled = false } arSession.delegate = self } LiDAR セットアップ
 LiDARによるAF機能の実装 

Slide 33

Slide 33 text

© ZOZO Technologies, Inc. 33 ボタンタップの処理 - AVCaptureSession
 LiDARによるAF機能の実装  var handler: ((UIImage) -> Void)? ... func runAvCapture(_ handler: @escaping (UIImage) -> Void) { arSession.pause() // ARSessionを停止 self.handler = handler // handlerを設定 self.setMode(focusMode: .locked, exposureMode: .locked) captureSession.startRunning() if (isfPOIExist) { // fPOI設定 self.setMode(focusMode: .autoFocus, exposureMode: .autoExpose, point: CGPoint(x: x, y: y)) } ... }

Slide 34

Slide 34 text

© ZOZO Technologies, Inc. 34 ボタンタップの処理 - ARSession
 LiDARによるAF機能の実装  var handler: ((UIImage) -> Void)? ... func runAR(_ handler: @escaping (UIImage) -> Void) { captureSession.stopRunning() // AVCaptureSessionを停止 self.handler = handler // handler設定 arSession.run(arConfiguration) }

Slide 35

Slide 35 text

© ZOZO Technologies, Inc. 35 ボタンタップの処理 - UI
 LiDARによるAF機能の実装  VStack (alignment: .center) { ... Button(action: { if (isAvCaptureRunning) { captureWithDepth.runAR { uiImage in DispatchQueue.main.async { self.image = uiImage } } ... } else { captureWithDepth.runAvCapture { uiImage in DispatchQueue.main.async { self.image = uiImage } } ...

Slide 36

Slide 36 text

© ZOZO Technologies, Inc. 36 ARSessionDelegateの処理
 LiDARによるAF機能の実装  extension MyClass: ARSessionDelegate { func session(_ session: ARSession, didUpdate frame: ARFrame) { if let handler = handler { guard let imageBuffer = frame.sceneDepth?.depthMap else ... ... if (isfPOIExist){ if let imageWithfPOI = drawfPOIOnImage(fPOI) { image = imageWithfPOI } } handler(image) DispatchQueue.global(qos: .userInitiated).async { self.computefPOI(imageBuffer: imageBuffer, image: image) } } } }

Slide 37

Slide 37 text

© ZOZO Technologies, Inc. 37 LiDARによるAF機能の実装  LiDAR画面のイメージ
 DepthMapは近い物体をより黒く、
 遠いものを明るい灰色で表示する
 グリーンの四角いマークがfPOI


Slide 38

Slide 38 text

© ZOZO Technologies, Inc. 38 computefPOIの処理 ①
 LiDARによるAF機能の実装  var depthArray: [Float32]? ... func computefPOI(imageBuffer: CVPixelBuffer, image: UIImage) { frameCounter += 1 self.buildDepthInfo(depthMap: imageBuffer) // depthArrayを取得 if (frameCounter >= 60) { ... } else { // 最もカメラに近い点の座標 x, y を計算 if let minDepthVal = depthArray.min(), let fidx = depthArray.firstIndex(of: minDepthVal) { x_sum += (fidx % Int(image.size.width)) y_sum += (fidx / Int(image.size.height)) } } }

Slide 39

Slide 39 text

© ZOZO Technologies, Inc. 39 computefPOIの処理 ②
 LiDARによるAF機能の実装  func computefPOI(imageBuffer: CVPixelBuffer, image: UIImage) { frameCounter += 1 ... if (frameCounter >= 60) { // 平均 centroid_x = x_sum / frameCounter centroid_y = y_sum / frameCounter x_sum = 0 y_sum = 0 frameCounter = 0 } else { ...

Slide 40

Slide 40 text

© ZOZO Technologies, Inc. 40 サンプルコードはこちらに置いています
 ✏
 
 https://github.com/tamaUdon/iOSDC2021_LiDARAFDemoApp
 LiDARによるAF機能の実装 

Slide 41

Slide 41 text

© ZOZO Technologies, Inc. 41 目次
 
 1. AFの仕組みについて
 2. 暗所AF性能比較
 3. LiDARによるオートフォーカス機能の実装
 4. デモ 👈
 5. 実装Tips


Slide 42

Slide 42 text

© ZOZO Technologies, Inc. 42 デモ 

Slide 43

Slide 43 text

© ZOZO Technologies, Inc. 43 目次
 
 1. AFの仕組みについて
 2. 暗所AF性能比較
 3. LiDARによるオートフォーカス機能の実装
 4. デモ
 5. 実装Tips 👈


Slide 44

Slide 44 text

© ZOZO Technologies, Inc. 44 実装Tips  ✔ ARWorldTrackingConfiguration.isAutoFocusEnabled = true 👉 セッションの切り替えなしにAF利用可能
 ✔ 現状、ARKitからAVCaptureSessionを利用不可 👉 細かなカメラの設定が難しい

Slide 45

Slide 45 text

© ZOZO Technologies, Inc. 45 参考
 ● Autofocus - Wikipedia
 ● オートフォーカスを活用しましょう! | 富士フイルム
 ● iPhone 12 Pro - 技術仕様
 ● LiDARとは? | レーザーダイオードとは? | エレクトロニクス豆知識 | ローム株式会社 - ROHM Semiconductor ● iPhone、iPad、iPod touch で計測 App を使う - Apple サポート (日本) 


Slide 46

Slide 46 text

© ZOZO Technologies, Inc. 46

Slide 47

Slide 47 text

© ZOZO Technologies, Inc. 47 ご清聴
 ありがとうございました
 󰢛


Slide 48

Slide 48 text

No content