Python 识别图片文字的效果是不是很差?

2021-12-06 00:34:34 +08:00
 zictos

试了一下 pytesseract 模块,好像很多文字都识别不了,只有一些纯色背景并且颜色反差比较大的才比较容易识别出来。
用百度的文字识别 api 接口大部分文字都能识别出来,效果挺好的,但有点担心图片内容的安全问题。
利用程序识别最多只能达到 pytesseract 模块这种程度的效果了吗?

12609 次点击
所在节点    Python
129 条回复
HUNYXV
2021-12-06 10:22:39 +08:00
dtdtxybc
2021-12-06 10:32:31 +08:00
看上去很不专业的标题才能吸引评论,楼主其实是想用这种方法吸引人来解决问题,现在楼主的目的已经达到了。高,实在是高
ungrown
2021-12-06 10:36:36 +08:00
OCR 这东西我上半年摸鱼玩了一会儿,也是拿 python 写的代码(基本只会这个语言目前),也是着重尝试了 tesseract 。
我个人觉得 tesseract 还是很不错的,性能也好,扩展性也好。不过就是对输入图像的要求有点高,需要预先处理一下,我当时也趁着这个机会玩了玩 opencv 里面的二值化,平均权重、高斯权重窗口之类的。
只要对图像进行合理的预处理,效果还是很好的。其实现在很多不管是开源还是商用闭源的 OCR 库,也都是在输入图像的预处理、和识别模型这两个方面同时下手,单抓一手的效果是不尽如人意的。
tesseract 的模型其实一直在更新迭代,版本号也一直在动。说它落后是不对的,只能说它是个很基础的工具,要想用 tesseract 实现更好的效果需要自己额外做一些工作。
我不是机器学习、人工智能之类的科班出身,不过能确定的是 tesseract 的引擎也是神经网络,长短期记忆 LSTM 。
我当时玩下来的经验是,喂的图像得够干净,最好是白底黑字的二值图,或者浅色底深色字符,如果深色底色的话识别效果会明显劣化。完事噪声一定要少,不管是噪点、摩尔纹、还是大片的强光。
图像预处理的时候最好分区块,除非是电子文档的截图,否则总会有不同内容的区块互相干扰,哪怕同样是文字区块,亮度颜色如果不同也不能用相同的方法和参数来处理。
但即使得到了黑白分明字符清晰的二值图,依然是不够的。tesseract 并不能很好地识别各种段落结构、表格结构、复杂排版,它只能应付相对简单的(也有不小的出错概率)。所以最好是先识别出小的文字区块单元,把整个“文章”打散,变成单行、单词。这个可以用 tesseract 自带的接口,也可以用其他什么算法工具,反正只要把所有的字符区块和对应的坐标提取出来,后面只要把这些区块批量识别,再重新按照坐标把结果区块拼起来就行。
思路就是这么个思路,其实其他 OCR 库也基本上是这个套路,去噪、归一、化整为零。
至于 easyocr 和 paddleocr 这种,我也试用过,准确率和适应性确实比 tesseract 好上不少。不过这类工具一般都是机器学习 /深度学习的范畴,虽然也是神经网络为内核,但一般对算力要求更高,得上显卡,否则纯靠 CPU 算就很慢,明显比 tesseract 要慢得多。我手头的二手闲鱼本,4 代酷睿 2C4T 的 CPU ,用 opencv+tesseract 处理一帧 640x480 的图像差不多 300ms 左右,用 easyocr 需要 1 、2 秒,用 paddleocr 得要 5 、6 秒。我当时拿我自己写着玩的代码,python+OpenCV+tesseract ,基本可以在这个分辨率下“实时”显示摄像头中的文字了,而且是窗户阳光直射下,文字媒介表面不平整(键盘上的字,饮料瓶身贴纸),虽然有不少错误识别,但至少画面移到哪儿,一眨眼的功夫就能在命令行里看到对应的文字。换用 easyocr 和 paddleocr ,得等“半天”,而且同样有不少错误(当然比 tesseract 少一些)。
OCR 这个东西虽然算是“半成熟”的技术了吧,但还远没有完整。很多开源项目还在发展,还有很多公司已经在用自己改进的半成品在赚钱了,更有大型企业组织在积极推动底层关键技术。这里面的门道很多,水非常深。如果只是自己玩玩或者要求不太严格的应用的话,请善用他人智慧成果和“权宜之计”,真想短时间做个“尽善尽美”的东西出来是做梦。
hlwjia
2021-12-06 10:37:36 +08:00
@dtdtxybc 又或者是缺金币了
mxT52CRuqR6o5
2021-12-06 10:45:38 +08:00
python 就是个调用方,ocr 效果好不好和 Python 有什么关系
alanse7en
2021-12-06 10:46:20 +08:00
识别效果和你的算法和模型有关系,和编程语言没关系
lonelygo
2021-12-06 10:47:00 +08:00
这个锅和 python 有什么关系?
ungrown
2021-12-06 10:47:37 +08:00
@ch2 #59
tesseract 单就字符识别这块其实不算落后,它只是没有对输入的图像进行很强针对性的预处理,这活交给用户了。
很多现代的 ocr 工具都是杂糅了大量的图像处理、内容分块、排版识别、以及字符处理,运算量极大,多数都是依托于机器学习、深度学习的,不上显卡的话运算速度非常慢。
然后这类新式工具如果要加几个特别的字符的话,就得重新训练一个模型出来。扩展性这方面 tesseract 反而方便得多。
tesseract 就是功能比较少、比较基础,很多字符识别之外的事情得用户自己做。
mxT52CRuqR6o5
2021-12-06 10:48:43 +08:00
@zictos
[如果现在假设有一个语言官方本身就支持文字识别,只要一两行代码就行]
问题是没有这种东西就,如果并不成立,好与坏本来就是比出来的,你在这边嘴强半天也没举出你心目中 [在 ocr 方面比 python 效果好的语言] 的例子
RobinHu
2021-12-06 10:52:22 +08:00
金币能用来干嘛 ?
yohole
2021-12-06 12:15:49 +08:00
其实我试过像楼主这样的经历,那时确实是菜,提问也没多大技巧,很多时候遇到问题,然后就很表面和直接的地发出来,不过那时候很庆幸的是,那时的社区人很包容,会跟你点到即止或者直接 get 到你的点就直接回复问题了,不像现在围观的多,批评教育的也多

我能相信楼主心情不好过,因为他只不过是因为提了一个问题,本意应该是真的没有贬低 python 的,但是因为表达问题而被大家说了一通

他一开始的认真回复我还是比较认可的,虽然可能还是没有绕出那个圈子
oopc
2021-12-06 12:28:31 +08:00
《提问的智慧》
JingW
2021-12-06 12:50:53 +08:00
老板还是花点钱请个程序员来解决问题吧
您这逻辑能力真的不太行
ctro15547
2021-12-06 13:41:10 +08:00
没必要对线 ,模型原因, 跟语言没多少关系 ,想准,要么自己训练一个 ,要么花钱用别人的 api ,推荐花钱,这样可以把不准确的锅甩给对面程序员
loryyang
2021-12-06 13:46:35 +08:00
这问题问得真是外行。。。一个算法的能力和语言有个毛关系
而且 Python 已经是 ML 的主力语言了,个人估计超过 80%的算法后端是用 Python 的
2i2Re2PLMaDnghL
2021-12-06 14:12:08 +08:00
《用明火烤肉效果是不是很差?》

试了一下打火机烤肉,好像很多肉都烤不熟,只有一些很小块的肉才能比较容易烤熟。
用微波炉烤肉很多肉都能烤熟,烤出来也很好吃,但有点担心辐射残留问题。
利用烹饪最多只能达到打火机这种程度的效果了吗?
2i2Re2PLMaDnghL
2021-12-06 14:15:44 +08:00
@mxT52CRuqR6o5 有,Wolfram 语言官方支持 classify 函数,传入图片和标记,传出一个分类函数。
2i2Re2PLMaDnghL
2021-12-06 14:33:26 +08:00
顺便,来点王垠

《机器学习与逻辑编程》
> 实际上,你可以把机器学习的各种框架( framework )看成是新的编程语言,它们不同于 Python 或者 C 一类的过程式语言,而更像 Prolog 这样的逻辑式语言。

这点还是得同意的,你实际上运用的是一套全新的语言,而不是 Python 本身。
VIVVACI
2021-12-06 14:44:58 +08:00
不是,识别文字是算法的事啊,和语言有个 P 的关系?
zictos
2021-12-06 14:47:44 +08:00
@2i2Re2PLMaDnghL #76
你这个例子太过常识了,而自己写图片文字识别的训练模型的话即便是 v2 的程序员也不见得写过。
打火机烤肉基本不具有可操作性,而 pytesseract 模块既然存在就说明它有存在的意义,说不定还是有人认为它勉强能用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/820234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX