web-dev-qa-db-ja.com

iOS:ライブカメラフィード上にリアルタイムOCR(iTunesギフトカードと同様)

デバイスのカメラを使用してギフトカードを引き換え、ライブカメラフィード上で短い文字列をリアルタイムで認識したときに、iTunesおよびApp Storeアプリと同じようなことを行う方法はありますか?

iTunes App Redeem Gift Card UI

IOS 7では、AFAIKがバーコードのみを表すAVMetadataMachineReadableCodeObjectクラスが存在することを知っています。短い文字列の内容を検出して読み取ることに、もっと興味があります。これは、公開されているAPIメソッドを使用して可能ですか?

動作中のプロセスのビデオもあります。

https://www.youtube.com/watch?v=c7swRRLlYEo

ベスト、

25
boliva

私は、Apple app store redeem with camera with your memumと同じようなことをするプロジェクトに取り組んでいます。

ライブビデオの処理を開始するのに最適な場所は GitHubで見つけたプロジェクト です。これはAVFoundationフレームワークを使用しており、AVCaptureVideoDataOutputSampleBufferDelegateメソッドを実装します。

画像ストリーム(ビデオ)を取得したら、OpenCVを使用してビデオを処理できます。 Tesseractを実行する前に、OCRしたい画像の領域を決定する必要があります。フィルタリングを試す必要がありますが、OpenCVで実行する大まかな手順は次のとおりです。

  • Cv :: cvtColor(inputMat、outputMat、CV_RGBA2GRAY);を使用して、画像を白黒に変換します。
  • 画像にしきい値を設定して、不要な要素を削除します。除去するしきい値を指定してから、その他すべてを黒(または白)に設定します。
  • ボックスの境界を形成する線(または処理しているもの)を決定します。目的の領域以外をすべて削除した場合は「境界ボックス」を作成するか、HoughLinesアルゴリズム(または確率的バージョン、HoughLinesP)を使用できます。これを使用して、OCRの前にラインの交点を特定してコーナーを見つけ、そのコーナーを使用して目的の領域をワープして適切な長方形に直線化します(この手順がアプリケーションで必要な場合)。
  • Tesseract OCRライブラリで画像の一部を処理して、結果のテキストを取得します。 OpenCVでレターのトレーニングファイルを作成して、Tesseractなしでテキストを読むことができます。これはより高速になる可能性がありますが、さらに多くの作業になる可能性もあります。 App Storeのケースでは、彼らは元の画像の上にオーバーレイされて読み取られたテキストを表示するのと同じようなことをしています。これはクールな要素に追加されるため、必要なものに依存します。

その他のヒント:

  • 「Instant OpenCV」という本を使って、これをすぐに始めました。それはかなり役に立ちました。
  • OpenCV.org/downloads.htmlからOpenCV for iOSをダウンロードします。
  • アダプティブしきい値処理は非常に便利であることがわかりました。「OpenCV AdaptiveThreshold」を検索すると、そのすべてを読むことができます。また、明るい要素と暗い要素の間の画像がほとんどない場合は、 Otsuの2値化 を使用できます。これにより、グレースケール画像のヒストグラムに基づいてしきい値が自動的に決定されます。
16
Donovan

このQ&Aスレッドは、一貫してiOSでのOCRのトピックの上位の検索ヒットの1つであるように見えますが、かなり古くなっているので、私が見つけたときに役立つ可能性があるいくつかの追加リソースを投稿したいと思いましたこの投稿を書いた時間:

ビジョンフレームワーク
https://developer.Apple.com/documentation/vision
iOS 11以降、含まれているCoreMLベースのVisionフレームワークを、長方形やテキストの検出などに使用できるようになりました。 OSにこれらの機能が含まれているOpenCVを使用する必要がなくなったことがわかりました。ただし、テキストdetectionはテキストrecognitionまたはOCRを使用すると、画像の検出された部分を実際のテキストに変換するために、Tesseract(またはおそらく独自のCoreMLモデル)などの別のライブラリが必要になります。

SwiftOCR
https://github.com/garnele007/SwiftOCR
英数字コードの認識にのみ関心がある場合、このOCRライブラリは、Tesseractよりも大幅に速度、メモリ消費量、および精度が向上していると主張しています(私自身は試していません)。

MLキット
https://firebase.google.com/products/ml-kit/
Googleは、Firebase開発者ツールスイートの一部としてML Kitをリリースしました。この投稿の執筆時点でベータ版です。 AppleのCoreMLと同様に、独自のトレーニング済みモデルを使用できる機械学習フレームワークですが、Vision Frameworkなどの一般的な画像処理タスク用の事前トレーニング済みモデルもあります。 とは異なりVision Framework、これまたデバイス上のテキストのモデルが含まれますラテン文字の認識。現在、このライブラリの使用は、デバイス上の機能ではfreeであり、Googleのクラウド/ SAAS APIオファリングの使用には料金がかかります。認識の速度と正確さがかなり良いように思えるので、私はこれを私のプロジェクトで使用することを選択しました。また、同じ機能を備えたAndroidアプリを作成するので、単一のクロスプラットフォームを持っていますソリューションは私にとって理想的です。

ABBYYリアルタイム認識SDK
https://rtrsdk.com/
この商用SDK for iOSおよびAndroidは、評価および限定的な商用利用のために無料でダウンロードできます(この投稿の執筆時点では最大5000ユニット)。さらに商用利用するには、拡張ライセンス不透明な価格設定のため、私はこの製品を評価しませんでした。

8
Francis Li

Githubに似たプロジェクトがあります: https://github.com/Devxhkl/RealtimeOCR

4
zzzel

「リアルタイム」は単なる画像のセットです。デバイスの動き(またはカメラの位置の変化)を大まかに表すのに十分なだけ、それらすべての処理について考える必要さえありません。 iOS SDKには、必要なことを実行するために組み込まれているものはありませんが、サードパーティのOCRライブラリ(Tesseractなど)を使用して、カメラから取得した画像を処理できます。

4
Wain

Tesseract を調べます。これは、画像データを取得して処理するオープンソースのOCRライブラリです。異なる正規表現を追加して、特定の文字のみを検索することもできます。それは完璧ではありませんが、私の経験から、それはかなりうまくいきます。また、そのようなことに興味がある場合は、CocoaPodとしてインストールすることもできます。

リアルタイムでキャプチャしたい場合は、 GPUImage を使用してライブフィードで画像をキャッチし、受信画像を処理して、さまざまなフィルターを使用したり、サイズを小さくしたりして、Tesseractを高速化できます。着信画像の品質。

4