Google Mobile Vision API无法以纵向模式检测文字

时间:2017-08-28 23:13:41

标签: android google-vision

我有一项活动,使用Fotoapparat Library获取图片并将其保存到文件中。接下来,我使用Google Mobile Vision API创建该文件的位图并检测文本。我使用了为此提供的标准代码。

    TextRecognizer ocrFrame = new TextRecognizer.Builder(context).build();
    Frame frame = new Frame.Builder().setBitmap(BitmapFactory.decodeFile(pathToPhoto)).build();

    SparseArray<TextBlock> sparseTextBlocks = ocrFrame.detect(frame);
    if (sparseTextBlocks.size() <= 0)
        return null;

    ArrayList<TextBlock> textBlocks = new ArrayList<>();
    for (int i = 0; i < sparseTextBlocks.size(); i++) {
        textBlocks.add(sparseTextBlocks.get(sparseTextBlocks.keyAt(i)));
    }

OCR在横向模式下完美运行,但在纵向模式下,它几乎检测不到任何文本。我通过显示图像在纵向模式下未反转来验证。它给出了一个垂直图像。我真的无法弄清楚为什么会这样。任何线索?

1 个答案:

答案 0 :(得分:4)

以下是实施Mobile Vision API的另一种选择

// 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" />

总体而言,您的代码看起来很好,我认为这可能是您的图书馆保存图片的方向可能与Mobile Vision API冲突的方式,尝试在侧面项目或其他图书馆使用本机Android捕获,如果您的应用仍然没有工作尝试保存静止在风景中,即使他们被拍摄的肖像也可以帮助

希望有所帮助