web-dev-qa-db-ja.com

Google Mobile Vision Text APIの例

現在、テキストの画像を表示し、画像からテキストを抽出できるコードをAndroidベースのデバイスで作成しています。オンラインで調査したところ、Googleが独自のAPIを提供していることがわかりました「モバイルビジョン」(テキスト認識、顔認識など、多くのアイテムが含まれるパッケージ)と呼ばれます。ただし、デモではライブテキスト認識のみを示しています。静止画像でのテキスト認識の例を誰かに教えてもらえないかと思っていました。 Mobile Vision APIを使用しています。どんな助けでも大歓迎です。ありがとう。

16
Andrew

Google Play開発者サービスのモバイルビジョンAPIドキュメントでは、これを行う方法について説明しています。 TextRecognizer クラスを使用して、 Frames 内のテキストを検出できます。ビットマップ画像を取得したら、それをフレームに変換して処理することができます。例については、以下を参照してください。

// imageBitmap is the Bitmap image you're trying to process for text
if(imageBitmap != null) {

    TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();

    if(!textRecognizer.isOperational()) {
        // Note: The first time that an app using a Vision API is installed on a
        // device, GMS will download a native libraries to the device in order to do detection.
        // Usually this completes before the app is run for the first time.  But if that
        // download has not yet completed, then the above call will not detect any text,
        // barcodes, or faces.
        // isOperational() can be used to check if the required native libraries are currently
        // available.  The detectors will automatically become operational once the library
        // downloads complete on device.
        Log.w(LOG_TAG, "Detector dependencies are not yet available.");

        // Check for low storage.  If there is low storage, the native library will not be
        // downloaded, so detection will not become operational.
        IntentFilter lowstorageFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW);
        boolean hasLowStorage = registerReceiver(null, lowstorageFilter) != null;

        if (hasLowStorage) {
            Toast.makeText(this,"Low Storage", Toast.LENGTH_LONG).show();
            Log.w(LOG_TAG, "Low Storage");
        }
    }


    Frame imageFrame = new Frame.Builder()
            .setBitmap(imageBitmap)
            .build();

    SparseArray<TextBlock> textBlocks = textRecognizer.detect(imageFrame);

    for (int i = 0; i < textBlocks.size(); i++) {
        TextBlock textBlock = textBlocks.get(textBlocks.keyAt(i));

        Log.i(LOG_TAG, textBlock.getValue()); 
        // Do something with value
    }
}

また、モジュールのbuild.gradleにモバイルビジョンの依存関係を確実に含める必要があります。

dependencies {
    compile 'com.google.Android.gms:play-services-vision:9.4.0'
} 

また、アプリのAndroid Manifestに以下を含めます

<meta-data
    Android:name="com.google.Android.gms.vision.DEPENDENCIES"
    Android:value="ocr" />
25
businesscasual