Upgrade to Pro — share decks privately, control downloads, hide ads and more …

作ってわかる!LiDARによるカメラの暗所オートフォーカス機能

9e68acadfe81c2634fae5b8c891f6814?s=47 tamaUdon
September 19, 2021

 作ってわかる!LiDARによるカメラの暗所オートフォーカス機能

こちらは iOSDC JAPAN 2021 のトーク資料です
*デモ動画はニコ生タイムシフト or 後日公開予定のYoutubeにてご確認ください

iPhone 12 Pro 以降に搭載されたLiDARスキャナにより、
ARだけでなく、カメラのオートフォーカス(以下AF)性能が飛躍的に向上しています。

特に、画像から距離情報を取り出すタイプのAFが苦手とする
暗所での撮影において、非常に高速なAFが実現されています。

この講演では、LiDARスキャナを利用したシンプルなAFと、
対象物の背景にぼかしを作る機能を盛り込んだカメラアプリを作成し、コードを中心に解説します。

AF自体はiOSに標準搭載されていますが、自分で作ってみることでAFとLiDARの理解を深めることができます。

この講演では、以下のトピックを中心にお話しします。
・各AF方式の簡単な説明
・暗所での性能比較 (iPhone12 Pro / iPhone11)
・LiDARによるオートフォーカス機能の実装方法
・動画によるデモ
・実装が困難だったところとその解決方法の提案

9e68acadfe81c2634fae5b8c891f6814?s=128

tamaUdon

September 19, 2021
Tweet

Transcript

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

    © ZOZO Technologies, Inc. 2021.9.19 iOSDC JAPAN 2021
  2. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 計測プラットフォーム本部 フロントエンド部 iOSチーム
 寺田 めぐみ

    ( marica @tama_Ud )
 
 2019年7月〜バリスタからエンジニアに
 2021年4月ZZT中途入社
 画像処理, XRが好き
 
 2
  3. © ZOZO Technologies, Inc. 3 このトークの目的
 🎉
 ✔ LiDARスキャナについて楽しく学ぶ!
 ✔

    実装を通してLiDARスキャナの理解を深める
 ✔ オートフォーカスをざっくり理解する

  4. © ZOZO Technologies, Inc. 4 このトークのターゲット
 󰢧󰢨
 ✔ LiDARスキャナについて理解を深めたい人
 ✔

    LiDARを利用したカメラアプリの実装を知りたい人

  5. © ZOZO Technologies, Inc. 5 目次
 
 1. AFの仕組みについて
 2.

    暗所AF性能比較 
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips

  6. © ZOZO Technologies, Inc. 6 目次
 
 1. AFの仕組みについて 👈あ 


    2. 暗所AF性能比較 
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips

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

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

  9. © ZOZO Technologies, Inc. 9 AF方式の種類
 📸
 
 アクティブ方式 


    パッシブ方式 ハイブリッド方式 AFの仕組みについて 
  10. © ZOZO Technologies, Inc. 10 アクティブ方式
 AFの仕組みについて  how
 pros
 cons


    • 超音波や赤外線による 測距
 • 暗所でのAFに強い
 • 遠距離のピント合わせに 弱い(風景写真など)
 • 間にガラスなどがあると 距離の検出を誤ることが ある

  11. © ZOZO Technologies, Inc. 11 パッシブ方式
 AFの仕組みについて  how
 pros
 cons


    • 画像のコントラストや専 用のレンズ/センサーな どを利用
 • AF動作が高速
 • コントラストが低い
 被写体、暗所でのAFに 弱い

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

  13. © ZOZO Technologies, Inc. 13 Focus Pixels
 AFの仕組みについて  ✔ “Apple

    用語” ✔ iPhone 6 から導入された従来のAF ✔ パッシブ方式AFの一つ?
  14. © ZOZO Technologies, Inc. 14 LiDARスキャナ
 AFの仕組みについて  ✔ 2020年3月に iPad

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

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

  17. © ZOZO Technologies, Inc. 17 ✔ Light Detection And Rangingの略

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

    暗所AF性能比較 👈
 3. LiDARによるAF機能の実装
 4. デモ
 5. 実装Tips

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


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

  21. © ZOZO Technologies, Inc. 21 目次
 
 1. AFの仕組みについて
 2.

    暗所AF性能比較
 3. LiDARによるAF機能の実装 👈
 4. デモ
 5. 実装Tips

  22. © ZOZO Technologies, Inc. 22 LiDARによるAF機能の実装  動作確認環境
 ✔ MacBook Pro

    / macOS Big Sur ✔ iPhone 12 Pro / iOS 14.7.1 ✔ Xcode 12.5
  23. © ZOZO Technologies, Inc. 23 制約
 ✔ LiDARスキャナ付き端末 ✔ iOS14

    / ARKit 4 以上 ✔ AVCaptureSession と ARSession は同時実行不可 LiDARによるAF機能の実装 
  24. © ZOZO Technologies, Inc. 24 AF機能の処理フロー
 LiDARによるAF機能の実装 

  25. © ZOZO Technologies, Inc. 25 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit


    ARSession
 LiDAR
 ①
 AVCaptureSession 
 で通常のバックカメラを起動
 (AFなし)

  26. © ZOZO Technologies, Inc. 26 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit


    ARSession
 LiDAR
 ②
 ボタンタップで
 AVCaptureSession 停止
 LiDAR 起動

  27. © ZOZO Technologies, Inc. 27 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit


    ARSession
 LiDAR
 ③
 深度マップから
 最もカメラに近い点を検出
 マーカーを表示

  28. © ZOZO Technologies, Inc. 28 AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit
 ARSession


    LiDAR
 * fPOI … focusPointOfInterest
 fPOI 座標
 LiDARによるAF機能の実装  ④
 再度ボタンタップで
 LiDAR 停止
 AVFoundation 側に
 fPOI* の座標を渡す

  29. © ZOZO Technologies, Inc. 29 LiDARによるAF機能の実装  AVFoundation
 AVCaptureSession
 通常のカメラ
 ARKit


    ARSession
 LiDAR
 ⑤
 fPOI を設定する
 (焦点を合わせる)

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

  31. © ZOZO Technologies, Inc. 31 LiDAR 対応かチェック
 LiDARによるAF機能の実装  func checkLidarIsEnable()

    -> Bool { return ARWorldTrackingConfiguration.supportsFrameSemantics( [.sceneDepth, .smoothedSceneDepth])
  32. © 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機能の実装 
  33. © 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)) } ... }
  34. © 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) }
  35. © 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 } } ...
  36. © 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) } } } }
  37. © ZOZO Technologies, Inc. 37 LiDARによるAF機能の実装  LiDAR画面のイメージ
 DepthMapは近い物体をより黒く、
 遠いものを明るい灰色で表示する
 グリーンの四角いマークがfPOI


  38. © 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)) } } }
  39. © 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 { ...
  40. © ZOZO Technologies, Inc. 40 サンプルコードはこちらに置いています
 ✏
 
 https://github.com/tamaUdon/iOSDC2021_LiDARAFDemoApp
 LiDARによるAF機能の実装 

  41. © ZOZO Technologies, Inc. 41 目次
 
 1. AFの仕組みについて
 2.

    暗所AF性能比較
 3. LiDARによるオートフォーカス機能の実装
 4. デモ 👈
 5. 実装Tips

  42. © ZOZO Technologies, Inc. 42 デモ 

  43. © ZOZO Technologies, Inc. 43 目次
 
 1. AFの仕組みについて
 2.

    暗所AF性能比較
 3. LiDARによるオートフォーカス機能の実装
 4. デモ
 5. 実装Tips 👈

  44. © ZOZO Technologies, Inc. 44 実装Tips  ✔ ARWorldTrackingConfiguration.isAutoFocusEnabled = true

    👉 セッションの切り替えなしにAF利用可能
 ✔ 現状、ARKitからAVCaptureSessionを利用不可 👉 細かなカメラの設定が難しい
  45. © ZOZO Technologies, Inc. 45 参考
 • Autofocus - Wikipedia


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

  46. © ZOZO Technologies, Inc. 46

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


  48. None