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

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

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によるオートフォーカス機能の実装方法
・動画によるデモ
・実装が困難だったところとその解決方法の提案

tamaUdon

September 19, 2021
Tweet

More Decks by tamaUdon

Other Decks in Programming

Transcript

  1. 作ってわかる!

    LiDARによるカメラの

    暗所オートフォーカス機能

    株式会社ZOZOテクノロジーズ

    計測プラットフォーム本部 フロントエンド部 iOSチーム

    寺田 めぐみ
    Copyright © ZOZO Technologies, Inc.
    2021.9.19 iOSDC JAPAN 2021

    View Slide

  2. © ZOZO Technologies, Inc.
    株式会社ZOZOテクノロジーズ

    計測プラットフォーム本部 フロントエンド部 iOSチーム

    寺田 めぐみ ( marica @tama_Ud )


    2019年7月〜バリスタからエンジニアに

    2021年4月ZZT中途入社

    画像処理, XRが好き


    2

    View Slide

  3. © ZOZO Technologies, Inc.
    3
    このトークの目的

    🎉

    ✔ LiDARスキャナについて楽しく学ぶ!

    ✔ 実装を通してLiDARスキャナの理解を深める

    ✔ オートフォーカスをざっくり理解する


    View Slide

  4. © ZOZO Technologies, Inc.
    4
    このトークのターゲット

    󰢧󰢨

    ✔ LiDARスキャナについて理解を深めたい人

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


    View Slide

  5. © ZOZO Technologies, Inc.
    5
    目次


    1. AFの仕組みについて

    2. 暗所AF性能比較 

    3. LiDARによるAF機能の実装

    4. デモ

    5. 実装Tips


    View Slide

  6. © ZOZO Technologies, Inc.
    6
    目次


    1. AFの仕組みについて 👈あ 

    2. 暗所AF性能比較 

    3. LiDARによるAF機能の実装

    4. デモ

    5. 実装Tips


    View Slide

  7. © ZOZO Technologies, Inc.
    7
    AF(Autofocus)とは?

    AFの仕組みについて 

    View Slide

  8. © ZOZO Technologies, Inc.
    8
    Autofocus


    カメラの焦点を被写体に

    自動的に合わせるシステムのこと

    AFの仕組みについて 

    View Slide

  9. © ZOZO Technologies, Inc.
    9
    AF方式の種類

    📸


    アクティブ方式

    パッシブ方式
    ハイブリッド方式
    AFの仕組みについて 

    View Slide

  10. © ZOZO Technologies, Inc.
    10
    アクティブ方式

    AFの仕組みについて 
    how
 pros
 cons

    ● 超音波や赤外線による
    測距

    ● 暗所でのAFに強い
 ● 遠距離のピント合わせに
    弱い(風景写真など)

    ● 間にガラスなどがあると
    距離の検出を誤ることが
    ある


    View Slide

  11. © ZOZO Technologies, Inc.
    11
    パッシブ方式

    AFの仕組みについて 
    how
 pros
 cons

    ● 画像のコントラストや専
    用のレンズ/センサーな
    どを利用

    ● AF動作が高速
 ● コントラストが低い

    被写体、暗所でのAFに
    弱い


    View Slide

  12. © ZOZO Technologies, Inc.
    12
    iPhoneにおけるAF

    AFの仕組みについて 

    View Slide

  13. © ZOZO Technologies, Inc.
    13
    Focus Pixels

    AFの仕組みについて 
    ✔ “Apple 用語”
    ✔ iPhone 6 から導入された従来のAF
    ✔ パッシブ方式AFの一つ?

    View Slide

  14. © ZOZO Technologies, Inc.
    14
    LiDARスキャナ

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

    View Slide

  15. © ZOZO Technologies, Inc.
    15
    LiDARとは?

    AFの仕組みについて 

    View Slide

  16. © ZOZO Technologies, Inc.
    16
    照射した電磁波が

    対象物に当たって跳ね返ってくるまでの時間
    差で距離や方向を測る技術

    AFの仕組みについて 

    View Slide

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

    View Slide

  18. © ZOZO Technologies, Inc.
    18
    目次


    1. AFの仕組みについて

    2. 暗所AF性能比較 👈

    3. LiDARによるAF機能の実装

    4. デモ

    5. 実装Tips


    View Slide

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

    Focus Pixelsのみ


    View Slide

  20. © ZOZO Technologies, Inc.
    20
    iPhone 12 Pro

    LiDARあり

    暗所AF性能比較 

    View Slide

  21. © ZOZO Technologies, Inc.
    21
    目次


    1. AFの仕組みについて

    2. 暗所AF性能比較

    3. LiDARによるAF機能の実装 👈

    4. デモ

    5. 実装Tips


    View Slide

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

    ✔ MacBook Pro / macOS Big Sur
    ✔ iPhone 12 Pro / iOS 14.7.1
    ✔ Xcode 12.5

    View Slide

  23. © ZOZO Technologies, Inc.
    23
    制約

    ✔ LiDARスキャナ付き端末
    ✔ iOS14 / ARKit 4 以上
    ✔ AVCaptureSession と ARSession は同時実行不可
    LiDARによるAF機能の実装 

    View Slide

  24. © ZOZO Technologies, Inc.
    24
    AF機能の処理フロー

    LiDARによるAF機能の実装 

    View Slide

  25. © ZOZO Technologies, Inc.
    25
    LiDARによるAF機能の実装 
    AVFoundation

    AVCaptureSession

    通常のカメラ

    ARKit

    ARSession

    LiDAR

    ①

    AVCaptureSession 

    で通常のバックカメラを起動

    (AFなし)


    View Slide

  26. © ZOZO Technologies, Inc.
    26
    LiDARによるAF機能の実装 
    AVFoundation

    AVCaptureSession

    通常のカメラ

    ARKit

    ARSession

    LiDAR

    ②

    ボタンタップで

    AVCaptureSession 停止

    LiDAR 起動


    View Slide

  27. © ZOZO Technologies, Inc.
    27
    LiDARによるAF機能の実装 
    AVFoundation

    AVCaptureSession

    通常のカメラ

    ARKit

    ARSession

    LiDAR

    ③

    深度マップから

    最もカメラに近い点を検出

    マーカーを表示


    View Slide

  28. © ZOZO Technologies, Inc.
    28
    AVFoundation

    AVCaptureSession

    通常のカメラ

    ARKit

    ARSession

    LiDAR

    * fPOI …
    focusPointOfInterest

    fPOI 座標

    LiDARによるAF機能の実装 
    ④

    再度ボタンタップで

    LiDAR 停止

    AVFoundation 側に

    fPOI* の座標を渡す


    View Slide

  29. © ZOZO Technologies, Inc.
    29
    LiDARによるAF機能の実装 
    AVFoundation

    AVCaptureSession

    通常のカメラ

    ARKit

    ARSession

    LiDAR

    ⑤

    fPOI を設定する

    (焦点を合わせる)


    View Slide

  30. © ZOZO Technologies, Inc.
    30
    いざ、実装

    LiDARによるAF機能の実装 

    View Slide

  31. © ZOZO Technologies, Inc.
    31
    LiDAR 対応かチェック

    LiDARによるAF機能の実装 
    func checkLidarIsEnable() -> Bool {
    return ARWorldTrackingConfiguration.supportsFrameSemantics(
    [.sceneDepth, .smoothedSceneDepth])

    View Slide

  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機能の実装 

    View Slide

  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))
    }
    ...
    }

    View Slide

  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)
    }

    View Slide

  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
    }
    }
    ...

    View Slide

  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)
    }
    }
    }
    }

    View Slide

  37. © ZOZO Technologies, Inc.
    37
    LiDARによるAF機能の実装 
    LiDAR画面のイメージ

    DepthMapは近い物体をより黒く、

    遠いものを明るい灰色で表示する

    グリーンの四角いマークがfPOI


    View Slide

  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))
    }
    }
    }

    View Slide

  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 {
    ...

    View Slide

  40. © ZOZO Technologies, Inc.
    40
    サンプルコードはこちらに置いています

    ✏


    https://github.com/tamaUdon/iOSDC2021_LiDARAFDemoApp

    LiDARによるAF機能の実装 

    View Slide

  41. © ZOZO Technologies, Inc.
    41
    目次


    1. AFの仕組みについて

    2. 暗所AF性能比較

    3. LiDARによるオートフォーカス機能の実装

    4. デモ 👈

    5. 実装Tips


    View Slide

  42. © ZOZO Technologies, Inc.
    42
    デモ 

    View Slide

  43. © ZOZO Technologies, Inc.
    43
    目次


    1. AFの仕組みについて

    2. 暗所AF性能比較

    3. LiDARによるオートフォーカス機能の実装

    4. デモ

    5. 実装Tips 👈


    View Slide

  44. © ZOZO Technologies, Inc.
    44
    実装Tips 
    ✔ ARWorldTrackingConfiguration.isAutoFocusEnabled = true
    👉 セッションの切り替えなしにAF利用可能

    ✔ 現状、ARKitからAVCaptureSessionを利用不可
    👉 細かなカメラの設定が難しい

    View Slide

  45. © ZOZO Technologies, Inc.
    45
    参考

    ● Autofocus - Wikipedia

    ● オートフォーカスを活用しましょう! | 富士フイルム

    ● iPhone 12 Pro - 技術仕様

    ● LiDARとは? | レーザーダイオードとは? | エレクトロニクス豆知識 | ローム株式会社 - ROHM
    Semiconductor
    ● iPhone、iPad、iPod touch で計測 App を使う - Apple サポート (日本) 


    View Slide

  46. © ZOZO Technologies, Inc.
    46

    View Slide

  47. © ZOZO Technologies, Inc.
    47
    ご清聴

    ありがとうございました

    󰢛


    View Slide

  48. View Slide