如何在Android中从相机读取数字和文本?

11

我正在开发安卓应用程序,它应该允许用户使用相机拍照,并且应用程序可以读取照片中的文本和数字。

我不知道从Android Studio哪里开始。是否有任何在Github上的好建议可以帮助我?

提前致谢。


嗨Khalil,现在我有和你一样的需求。我只想使用你的参考资料,也想知道扫描和获取文本、数字的优缺点。请尽快帮助我。提前致谢... - Naveen
嗨@Naveen,我使用了Tess-Two,它可以工作,但如果你有一张纸,它会读取所有内容...之前我只需要读取其中的一部分... - Khalil Rumman
抱歉回复晚了,我在之前的应用程序中得到了新的需求,所以有了间隔。对我来说它不起作用,Khalil,请帮帮我。提前致谢。 - Naveen
异常:由于java.lang.UnsatisfiedLinkError引起:dalvik.system.PathClassLoader[DexPathList[[zip文件“/data/app/com.wordpress.priyankvex.easyocrscanner-2/base.apk”],nativeLibraryDirectories=[/vendor/lib,/system/lib]]]找不到“libpngt.so”。 - Naveen
4个回答

11

正如其他人所说,OpenCV或OCR是可行的方法。 谷歌维护了一个名为"Tesseract"的OCR库(让我想起复仇者联盟:P)。 为了使工作更容易一些,有一个Tesseract的分支叫做Tess-Two,它结合了一些其他有用的工具,如Leptonica(图像处理库)。构建说明在Readme文件中给出。

要开始使用,您可以查看非常易于使用的OCR库Easy OCR Library Android,它在底层使用Tess-Two。

同样的使用说明也在Readme文件中。它已经构建好了,所以您不需要构建Tess-Two。


2
您可以尝试使用OpenCV库,它的缩写是Open Computer Vision Library。它的声誉类似于OpenGL。一定有关于您问题的文章,其中使用了该库。它可以使用运行时应用程序OpenCV Manager(在Google Play中可用)静态或动态链接。您可以在Java和C++代码中都使用它。希望这能帮到您。
PS:我有一个自己的使用示例。 https://github.com/androidovshchik/ProhibitingSignDetector

1
你对OpenCV的定位非常误导人。OpenCV是一个开源项目,而OpenGL(以及OpenCL等)则是由一个工业联盟定义的API标准。除了名字相似外,它们完全是不同的东西。 - Reto Koradi

1
如果需要的话,我可以提供如何处理这个问题的建议。
首先你需要将图片变成黑白色。
然后检查每行中最小的黑色像素,以此定义一个字母。(你不想让任何阴影被识别为潜在的字母。试着学习进展(任何相机都有不同的分辨率,所以它需要是图片行像素的一定百分比))
之后,每个字母都有不同的形状,所以你需要在不同的角度上做5次循环,直到找到黑色行的第三个间隙。
之后,通过一些大型开关和if语句来获取正确的字母,需要对字母内部间隙比例进行大量的研究。如果你想要多种字体,拥有一个小型数据库可能会有帮助。再次强调,我不确定这是否是正确的方法,但这是我会做的。
祝你好运 :)

1
你可以尝试寻找一些适用于Java的光学字符识别(OCR)库。
请查看 Java OCR tess-two Aprise等。同时,探索stackoverflow以寻找其他OCR解决方案。
实现自己的OCR库可能非常困难,因此请考虑是否真的需要它来完成你的任务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接