【问题标题】:Google Mobile Vision API not detecting text in portrait modeGoogle Mobile Vision API 未检测到纵向模式下的文本
【发布时间】:2018-02-06 06:52:21
【问题描述】:

我有一个使用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 在横向模式下完美运行,但在纵向模式下几乎无法检测到任何文本。我通过显示图像在纵向模式下未反转图像来验证。它给出了一个垂直的图像。我真的不知道为什么会这样。有什么线索吗?

【问题讨论】:

    标签: android google-vision


    【解决方案1】:

    这是实现 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 清单中

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

    总体而言,您的代码看起来不错,我认为这可能是您的库保存图片方向的方式可能与 Mobile Vision API 冲突,如果您的应用仍然没有,请尝试在辅助项目或其他库中使用本机 android 捕获尝试将静态照片保存在风景中,即使它们是在肖像上拍摄也可能有所帮助

    希望对你有帮助

    【讨论】:

    • 谢谢!是的,你是对的。 FotoApparat 保存与 Mobile Vision API 冲突的图片方向。通过旋转矩阵来修复它。非常感谢!
    • 非常感谢!我拍的照片也有错误的旋转,我终于弄明白了。太好了!
    猜你喜欢
    • 2017-10-21
    • 2017-10-20
    • 2019-04-24
    • 2017-08-30
    • 2017-12-30
    • 2018-01-26
    • 2017-11-28
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多