Firebase Machine Learningの文字認識機能を使ってみる
この記事は Firebase Advent Calendar 2020 の22日目の記事です。
Firebase Machine Learning を使ってiOSアプリで日本語文字認識(OCR)を試す機会があったので記事にしました。カメラで撮影した文字を認識する様子はこちらです。
Firebase Machine Learning
Firebase Machine LearningはGoogleが提供している機械学習の機能をiOSやAndroidで使用するためのSDKです。数行のコードを追加するだけで機械学習の機能が利用できます。現時点ではベータ版のようです。
Firebase ML | Machine learning for mobile developers
他の文字認識フレームワークとの比較
モバイルアプリで利用できる文字認識フレームワークについて調査しました。
iOSで利用できる機械学習系のText Recognitionフレームワークの調査
- iOS標準の文字認識機能(Text Recognition)は日本語に対応していなかった、オンデバイス専用であることが理由の一つかと思われる
- Google の ML Kit もオンデバイス版は日本語に対応していなかった
そのようなこともあり日本語対応した文字認識機能を探した結果、Firebase MLに辿り着きました。
利用するための手順
実際にFirebase MLをアプリ(iOS)に組み込む際につまずきやすい
- プロジェクトのセットアップ
- 文字認識を実行する処理
について簡単に解説します。
Firebaseでプロジェクトを作成したらプロジェクトの横にあるSparkボタンを押して従量制のBlazeへの変更します。Firebaseは無料プランでも利用できますがFirebase MLのクラウド版のText Recognitionを使うためにBlazeへの変更が必要です。
Firebase MLのクラウド文字認識が内部的にCloud Vision APIを使用していて、呼び出し回数に応じて料金が発生するためです(無料枠あり)。
Use Firebase ML to train and deploy custom models, or use a more turn-key solution with the Cloud Vision APIs.
切り替えが完了すると以下の画面が表示されます。
iOSアプリを追加します、バンドルIDは実際にアプリで使用するものを入力します。
GoogleService-Info.plist
をダウンロードしておきます。
Firebase SDKの追加手順が表示されるのでiOSのプロジェクトをセットアップします。
Xcodeを起動して新規プロジェクトを立ち上げます、Bundle Identifierは先ほど入力したものと同じになるようにします。
プロジェクトが表示されたらXcodeを一旦終了して、先ほどのSDK追加手順に従ってSDKを追加します。Firebase MLを使うためにFirebase/MLVision
も追加します。
# Pods for firebase-ml-ocr
pod 'Firebase/Analytics'
pod 'Firebase/MLVision'
SDKを追加したら *.xcworkspace
を開きます。ダウンロードしておいたGoogleService-Info.plist
をプロジェクトに追加します。
初期化コードを追加します。
SwiftUIでは以下のようにアプリケーションのメインクラスに追加します。
--- a/firebase-ml-ocr/firebase_ml_ocrApp.swift
+++ b/firebase-ml-ocr/firebase_ml_ocrApp.swift
@@ -6,9 +6,13 @@
//
import SwiftUI
+import Firebase
@main
struct firebase_ml_ocrApp: App {
+ init() {
+ FirebaseApp.configure()
+ }
var body: some Scene {
WindowGroup {
ContentView()
ここまでで一旦ビルドしてみます、問題なければアプリが起動します。
Firebaseの画面に戻ってメニューから Machine Learning
を選択して始める
をクリックします。
Machine Learningの画面が表示されます、右側にあるクラウドベースの API を有効化
をクリックしてAPI有効にします。
以上でFirebaseとCloud Vision APIの設定は完了です。
Swiftから文字認識を行う処理を解説します。
まず、Visionオブジェクトを初期化します
let vision = Vision.vision()
VisionCloudTextRecognizerOptionsを初期化、日本語と英語をセットします。
let options = VisionCloudTextRecognizerOptions()
options.languageHints = ["ja", "en"]
cloudTextRecognizer()メソッドを呼んでVisionTextRecognizerを生成します。
let textRecognizer = vision.cloudTextRecognizer(options: options)
UIImageからVisionImageオブジェクトを作成します。
let visionImage = VisionImage(image: image)
VisionTextRecognizerのprocess()メソッドにVisionImageオブジェクトを渡して文字認識を行います。
textRecognizer.process(visionImage)
UIImageの画像から文字認識を行う最小限のコードはこちらです。
import Firebase
func recognize(image: UIImage) {
let vision = Vision.vision()
let options = VisionCloudTextRecognizerOptions()
options.languageHints = ["ja", "en"]
let textRecognizer = vision.cloudTextRecognizer(options: options)
let visionImage = VisionImage(image: image)
textRecognizer.process(visionImage) { result, error in
guard error == nil, let result = result else {
return
}
print(result.text)
}
}
サンプルコードはこちらに置いておきます。
おわり
Firebaseから機械学習の文字認識機能を利用しました。手順が分かってしまえばとても簡単でしたね。
参考資料
Discussion