无法使用 Mobile Vision API 从图像中读取文本

Posted

技术标签:

【中文标题】无法使用 Mobile Vision API 从图像中读取文本【英文标题】:Not able to read text from image using Mobile Vision API 【发布时间】:2017-12-24 05:55:33 【问题描述】:

我正在开发一个移动应用程序,我试图从相机捕获的图像中提取仪表读数。

我做了研究和反复试验,最终决定使用谷歌的 Mobile Vision API 而不是tesseract-ocr 或OpenCV

所以我使用 Mobile Vision API 下提供的 Text Recognition API 开发了一个小应用程序。这是代码。

  if (detector.isOperational() && bitmap != null) 
                imageView.setImageBitmap((Bitmap) data.getExtras().get("data"));
                Frame frame = new Frame.Builder().setBitmap(bitmap).build();
                SparseArray<TextBlock> textBlocks = detector.detect(frame);
                String blocks = "";
                String lines = "";
                String words = "";
                for (int index = 0; index < textBlocks.size(); index++) 
                    //extract scanned text blocks here
                    TextBlock tBlock = textBlocks.valueAt(index);
                    blocks = blocks + tBlock.getValue() + "\n" + "\n";
                    for (Text line : tBlock.getComponents()) 
                        //extract scanned text lines here
                        lines = lines + line.getValue() + "\n";
                        for (Text element : line.getComponents()) 
                            //extract scanned integer here
                            if(element.getValue().matches("\\d+"))
                                words = words + element.getValue();
                            
                        
                    
                
                if (textBlocks.size() == 0) 
                    scanResults.setText("Scan Failed: Found nothing to scan");
                 else 
                    scanResults.setText(scanResults.getText() + "Blocks: " + "\n");
                    scanResults.setText(scanResults.getText() + blocks + "\n");
                    scanResults.setText(scanResults.getText() + "---------" + "\n");
                    scanResults.setText(scanResults.getText() + "Lines: " + "\n");
                    scanResults.setText(scanResults.getText() + lines + "\n");
                    scanResults.setText(scanResults.getText() + "---------" + "\n");
                    scanResults.setText(scanResults.getText() + "Words: " + "\n");
                    scanResults.setText(scanResults.getText() + words + "\n");
                    scanResults.setText(scanResults.getText() + "---------" + "\n");
                
             else 
                scanResults.setText("Could not set up the detector!");
            

一切正常,但无法从下图中的标记区域读取数字。

我尝试将灰度图像传递给检测器,但没有成功。

请建议我如何使文本可读。

【问题讨论】:

其他图片呢?它有效吗?如果您也发布或讲述日志会很有帮助。 是的,它适用于其他图像。但是,如果捕获的对象有深度。然后该区域中的任何文本都无法读取,tesseract 和 opencv 也会发生同样的情况。 @Dhaval Gulhane 你能读懂它吗?您能分享与此相关的任何发现吗? 【参考方案1】:

您可以做的是首先提取其中包含数字的行,然后您需要删除任何不是数字或字母的字符并构建您的字符串,而不是您需要检查该字符串中的每个字符以查看如果它之前或之后包含一个字母 如果有一个字母而不是您分析的字符,则它是无效的,否则它是有效的。它对我有用,但仍然缺乏检测稳定性。

我希望这能解决你的问题

【讨论】:

以上是关于无法使用 Mobile Vision API 从图像中读取文本的主要内容,如果未能解决你的问题,请参考以下文章

Mobile Vision API 检测不到二维码

java Mobile Vision API修复了缺少自动对焦功能的问题

是否需要图像预处理(Google Mobile Vision Text Recognition API)?

android mobile vision api自定义检测器未检测到人脸

如何强制 Android 版 Mobile Vision 读取整行文本

Paper | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications