Slide 1

Slide 1 text

CameraX × ML Kitで パスポートOCR機能を実装 Doroid Kaigi 2022

Slide 2

Slide 2 text

自己紹介 ● Yuto Akaike (@kaikecchi) ● 株式会社 令和トラベル 所属 ● 海外旅行予約アプリ「NEWT」の開発 ● 個人で競馬予想アプリ「ダビフレ」の開発・運営

Slide 3

Slide 3 text

アジェンダ 1. なぜOCR機能を実装したのか 2. CameraXとML Kitの概要 3. パスポートOCR機能の実装 4. 精度向上への取り組み

Slide 4

Slide 4 text

アジェンダ 1. なぜOCR機能を実装したのか 2. CameraXとML Kitの概要 3. パスポートOCR機能の実装 4. 精度向上への取り組み

Slide 5

Slide 5 text

OCRとは?

Slide 6

Slide 6 text

Optical Character Recognition(Reader) 紙などに書かれている文字を、 カメラなどによって画像データとして取り込み、 画像から文字を認識してテキストデータに変換する技術 CameraX ML Kit

Slide 7

Slide 7 text

面倒な入力作業をかんたんにする機能

Slide 8

Slide 8 text

パスポートOCR機能を実装した「NEWT」

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

海外旅行にはパスポート情報が必要

Slide 12

Slide 12 text

旅行者全員分の情報が必要

Slide 13

Slide 13 text

そこでOCR

Slide 14

Slide 14 text

面倒な入力作業を少しでもかんたんに

Slide 15

Slide 15 text

パスポートOCR機能を搭載するための選択肢 CameraX × ML Kit ライブラリA 精度・パフォーマンス 良 かなり良 工数 標準 比較的小 費用 無料 数十万円 /year UIのカスタマイズ 可 一部可 ギャラリーから選択画像の OCR 対応 非対応 メンテナンス状況 Googleが随時更新 ここ数年更新無し 既存アーキテクチャへの組み込み 易 難

Slide 16

Slide 16 text

パスポートOCR機能を搭載するための選択肢 CameraX × ML Kit ライブラリA 精度・パフォーマンス 良 かなり良 工数 標準 比較的小 費用 無料 数十万円 /year UIのカスタマイズ 可 一部可 ギャラリーから選択画像の OCR 対応 非対応 メンテナンス状況 Googleが随時更新 ここ数年更新無し 既存アーキテクチャへの組み込み 易 難 →精度面での見通しがついたので、拡張性の高さを重視

Slide 17

Slide 17 text

アジェンダ 1. なぜOCR機能を実装したのか 2. CameraXとML Kitの概要 3. パスポートOCR機能の実装 4. 精度向上への取り組み

Slide 18

Slide 18 text

CameraX

Slide 19

Slide 19 text

CameraXの概要 ● カメラアプリの開発を容易にするためのJetpackライブラリ ● Andeoid5.0以上をサポート ● Googleのラボで様々なデバイスが継続的にテストされている ● Androidのライフサイクルに連動させて管理を任せられる ● 4つのユースケースを提供 https://developer.android.com/training/camerax

Slide 20

Slide 20 text

4つのユースケース ● プレビュー ● 画像キャプチャ ● 画像解析 ● 動画キャプチャ

Slide 21

Slide 21 text

4つのユースケース ● プレビュー ● 画像キャプチャ ● 画像解析 ● 動画キャプチャ

Slide 22

Slide 22 text

ML Kit

Slide 23

Slide 23 text

ML Kitの概要 ● モバイルで機械学習の機能を利用できるSDK ● 無料 ● オンデバイスのSDKなのでオフラインでリアルタイムに動作 ● 以前はML Kit for Firebaseとして提供されていたが非推奨になり、 現在はML Kitと、CloudベースのFirebase MLに分割 ● Vision API と Natural Language API を提供 https://developers.google.com/ml-kit/guides

Slide 24

Slide 24 text

Vision API ● バーコードスキャン ● 顔検出 ● テキスト認識 ● 画像ラベリング ● 物体検出 & 追跡 ● デジタルインク認識 ● その他Beta版のAPIがいくつかある

Slide 25

Slide 25 text

Vision API ● バーコードスキャン ● 顔検出 ● テキスト認識 ● 画像ラベリング ● 物体検出 & 追跡 ● デジタルインク認識 ● その他Beta版のAPIがいくつかある

Slide 26

Slide 26 text

テキスト認識 画像内のテキストを認識してくれるAPI ML 言語対応 ML Kit Text Recognition ラテン文字 ML Kit Text Recognition v2 (Beta) ラテン文字 日本語、中国語、韓国語 Firebase ML (Cloud) Text tRecongnition 日本語含む100言語以上

Slide 27

Slide 27 text

アジェンダ 1. なぜOCR機能を実装したのか 2. CameraXとML Kitの概要 3. パスポートOCR機能の実装 4. 精度向上への取り組み

Slide 28

Slide 28 text

依存関係

Slide 29

Slide 29 text

依存関係 UI構築にはJetpack Compose パーミッション取得にはAccompanist

Slide 30

Slide 30 text

カメラパーミッションを 宣言 AndroidManifest

Slide 31

Slide 31 text

AndroidManifest MLのモデルをアプリイ ンストール時にダウン ロードする場合

Slide 32

Slide 32 text

パーミッション Accompanistを利用したパーミッ ション取得の全体像 細かい制御が不要であれば、短 いコードで構築可能

Slide 33

Slide 33 text

パーミッション rememberPermissio nState(CAMERA)で PermissionStateを取 得・保持

Slide 34

Slide 34 text

パーミッション PermissionStateで画 面を出し分け

Slide 35

Slide 35 text

パーミッション パーミッション要求は permissionState.launch PermissionRequest()。 状態に応じてダイアログ が表示される

Slide 36

Slide 36 text

パーミッション ScreenのOnStart時に毎 回パーミッションを要求し たいため、 LifecycleEventObserver を使用

Slide 37

Slide 37 text

起動 戻る

Slide 38

Slide 38 text

PreviewView AndroidViewを使って Composableに PreviewViewを配置

Slide 39

Slide 39 text

PreviewView PreviewView、 LifecycleOwner、 CameraProviderFutur e、読み取り後の処理 のラムダでカメラをセッ トアップ

Slide 40

Slide 40 text

プレビューユースケース プレビューユースケースを作成し、PreviewViewのSurafaceProviderをセット

Slide 41

Slide 41 text

CameraSelector 使用するカメラを指定 し、CameraSelectorを 作成

Slide 42

Slide 42 text

プレビュー表示 CameraProvider.bindT oLifecycleに、 lifecycleOwnerと CameraSelectorと previewユースケースを 渡してスタート

Slide 43

Slide 43 text

画像解析ユースケース 画像解析ユースケースを作成してPassportAnalyzerをセット

Slide 44

Slide 44 text

画像解析ユースケース

Slide 45

Slide 45 text

Analyzer ImageAnalysis.Analyzerを実装し、オーバーライドしたanalyze内で画像解析処理

Slide 46

Slide 46 text

Analyzer ML KitのTextRecognitionを取得しておく

Slide 47

Slide 47 text

Analyzer 画像と回転度から InputImageを作成

Slide 48

Slide 48 text

Analyzer TextRecognizer.proc essにInputImageを渡 してテキスト認識 登録したリスナー内で 結果を受け取る

Slide 49

Slide 49 text

TargetRotation screenOrientationを縦固定 にしている場合

Slide 50

Slide 50 text

TargetRotation 画面が回転し、回転度も再設定さ れ認識する screenOrientationを縦固定 にしている場合

Slide 51

Slide 51 text

TargetRotation 画面が回転し、回転度も再設定さ れ認識する 画面が回転せず認識しない screenOrientationを縦固定 にしている場合

Slide 52

Slide 52 text

TargetRotation OrientationEventListenerなどから取得したデバイスの向きを、 ImageAnalysis.targetRotaionに動的に設定

Slide 53

Slide 53 text

TargetRotation OrientationEventListenerなどから取得したデバイスの向きを、 ImageAnalysis.targetRotaionに動的に設定 画面は縦向きのままだが認識してく れる

Slide 54

Slide 54 text

Analyzer Text全文やTextBlock のListも取り出せる

Slide 55

Slide 55 text

TextBlock Block、Line、Elementのそれぞれが、 矩形、コーナー座標、言語情報、その内部のテキスト を持っている https://codelabs.developers.google.com/codelabs/mlkit-android#4

Slide 56

Slide 56 text

Analyzer 読み取った全文の中で パスポートのMRZを抽 出できた場合のみ読み 取り完了とし、 onRecognizedに渡す

Slide 57

Slide 57 text

パスポートのMRZ ● Machine Readable Zoon ● 機械でパスポート情報を読み取 るために印字されているコード ● パスポートのレイアウトや言語は 発行国によって様々だが、MRZ の仕様は国際標準として定めら れている この部分

Slide 58

Slide 58 text

パスポートMRZの仕様 ● 44桁 x 2行 ● パスポートの場合は必ず 「P<」 から始まる ● 発行国・氏名・パスポート番号・国籍・生年月日・性別・有効期限の 情報が入る ● 各情報の位置は定められている。例えば氏名は6 - 44桁目に入り、 区切りや余白には<が使用される ● 読み取りの整合性確認のためのCheck Digitも組み込まれている https://www.icao.int/publications/pages/publication.aspx?docnum=9303

Slide 59

Slide 59 text

MRZを抽出 正規表現などでMRZの文字列のみを抽出

Slide 60

Slide 60 text

Analyzer 繰り返し解析する場合 はImagePloxyをcolse する

Slide 61

Slide 61 text

OCRスタート CameraProvider.bindToLifecycleに、設定完了したImageAnalysisを追加

Slide 62

Slide 62 text

OCR起動 読み取り

Slide 63

Slide 63 text

アジェンダ 1. なぜOCR機能を実装したのか 2. CameraXとML Kitの概要 3. パスポートOCR機能の実装 4. 精度向上への取り組み

Slide 64

Slide 64 text

社内で精度検証を実施 まずは簡易的な実装をして精度を検証。社内のエンジニア以外のメンバーにも検証に協 力してもらい、読み取りミスのパターンを収集。

Slide 65

Slide 65 text

社内で精度検証を実施 まずは簡易的な実装をして精度を検証。社内のエンジニア以外のメンバーにも検証に協 力してもらい、読み取りミスのパターンを収集。 →端末によっては読み取りミスがちょこちょこ発生

Slide 66

Slide 66 text

変換ロジックやバリデーションを追加 P<

Slide 67

Slide 67 text

リリース後のモニタリング 読み取り精度はデバイスごとのカメラ性能 に大きく依存 ユーザーの多い主要メーカーの代表端末 は実機で動作確認 それ以外のメーカーや、メーカー内の 様々な機種を網羅的するのは困難

Slide 68

Slide 68 text

リリース後のモニタリング 読み取り精度はデバイスごとのカメラ性能 に大きく依存 ユーザーの多い主要メーカーの代表端末 は実機で動作確認 それ以外のメーカーや、メーカー内の 様々な機種を網羅的するのは困難 エラーや再試行イベントなどにログを仕込 み、問題が発生していそうな端末の種類 を特定できるように

Slide 69

Slide 69 text

まとめ

Slide 70

Slide 70 text

まとめ ● 基本的なユースケースであれば少ないコードで実装できる ● 精度やパフォーマンスは状況に応じた取り組みを ● CameraX と ML Kit の組み合わせで色々やってみよう

Slide 71

Slide 71 text

No content