V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zictos
V2EX  ›  Python

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

  •  
  •   zictos · 2021-12-06 00:34:34 +08:00 · 8268 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    129 条回复    2021-12-17 14:28:06 +08:00
    1  2  
    ipwx
        1
    ipwx  
       2021-12-06 00:41:40 +08:00
    > 利用程序识别最多只能达到 pytesseract 模块这种程度的效果了吗?

    pytesseract 是上古时代的东西啊,十年前的算法。当然比不上好歹有一坨 DL 工程师的百度。

    你要牛逼,你自己写模型嘛
    zictos
        2
    zictos  
    OP
       2021-12-06 00:44:22 +08:00
    @ipwx #1 没有贬低 python 的意思,只是不知道通过程序自动识别能够达到什么程度,另外就是不知道是否有其他效果更好的模块。
    ClericPy
        3
    ClericPy  
       2021-12-06 00:46:28 +08:00
    没训练的模型和别人又是标注又是训练加深度学习一大堆优化的比, 就别把锅甩 Python 头上了...

    现在图片识别方面国内好使点的貌似也就百度和阿里商用做的挺好的
    deplivesb
        4
    deplivesb  
       2021-12-06 00:47:00 +08:00
    好家伙,一个被神经网络带火的语言现在被说识别图片文字效果好差,楼主这一波讽刺可以的
    zictos
        5
    zictos  
    OP
       2021-12-06 00:55:09 +08:00   ❤️ 2
    @deplivesb #4 哪里是嘲讽了?是不是嘲讽应该没关系吧?是不是关键在于描述里面出现“百度”这两个字?
    我要认为百度牛逼,还会谈论安全问题吗?这也只是举个例子,3 楼也承认就是百度和阿里做得好点,我举例肯定用效果好的举啊!
    我的初衷是想知道到底利用程序识别能达到什么程度的效果。其实网上很多 python 识别文字的文章,然后就说用 pytesseract 模块,却基本都丝毫不提效果问题。
    提这个问题的话,还有一个目的就是想知道是否除了 pytesseract 模块还有更好的方式。python 效果不如百度的人工智能这肯定是都能理解的,没有争议的,这也要跟嘲讽挂钩吗?之所以提一下百度是因为百度能用,然后就是希望有效果跟百度差距小一点的方式,当然想到达人工智能的效果肯定是不可能的。
    tomczhen
        6
    tomczhen  
       2021-12-06 00:57:57 +08:00 via Android   ❤️ 23
    我来开大的。

    中国人写 python 识别图片文字的效果是不是很差?
    lithiumii
        7
    lithiumii  
       2021-12-06 00:58:56 +08:00   ❤️ 2
    既然说了百度,百度的 ocr 有开源部署的,搜 paddle 或者飞桨
    ipwx
        8
    ipwx  
       2021-12-06 00:59:54 +08:00
    @zictos 呃不知如何吐槽。。。

    因为这个世界上大部分 state-of-the-art 的人工智能算法研究者,每年发的一堆论文,都是 python 语言上实现的 prototype 。。。

    人工智能也是程序啊亲。百度的文字识别这一具体 api ,就是人工智能(还不算顶尖)的真实效果啊
    zictos
        9
    zictos  
    OP
       2021-12-06 01:00:35 +08:00   ❤️ 1
    @tomczhen #6 好吧,是我表达不太准确,但我肯定不是这个意思。我的意思是 python 现有的现成的方案识别图片问题的效果是不是很差。
    但是你们实在要抓住这些的话就是都有故意杠的意思了,我要真的愿意自己写模型又何必来提这个问题呢?
    zictos
        10
    zictos  
    OP
       2021-12-06 01:11:16 +08:00
    别说提一下语言问题,比如你到一个地方,你说“怎么一个人都没有”?
    那你自己呢?真要抓语言漏洞一抓一大堆啊!
    ipwx
        11
    ipwx  
       2021-12-06 01:13:33 +08:00
    @zictos 因为神经网络就是这么个东西:任何一个简单的 application 都要用基本模块自己搭。不存在通用的工具箱。。。文字识别就是一个特殊的 application
    Muniesa
        12
    Muniesa  
       2021-12-06 01:14:07 +08:00 via Android
    你猜百度开源的 paddle OCR 是拿什么语言写的
    stimw
        13
    stimw  
       2021-12-06 01:16:32 +08:00
    @zictos #9 “我的意思是 python 现有的现成的方案识别图片问题的效果是不是很差。”

    所以 ai 模型为什么被你排除在“现成的方案”和“程序”之外了?不都是 python 写的么?
    ipwx
        14
    ipwx  
       2021-12-06 01:18:35 +08:00
    @stimw 这个楼主要的是直接开箱即用。


    但是不行。原因我上面说了
    westoy
        15
    westoy  
       2021-12-06 01:23:19 +08:00
    tesseract 又不是开箱即用的方案,默认的几个原型只是针对主流标准字体,整套工具链就是让你标注训练了用的啊
    zictos
        16
    zictos  
    OP
       2021-12-06 01:27:21 +08:00   ❤️ 2
    @ipwx #11 我肯定知道现在很多就是利用 python 的,百度的 ocr 也是用程序写的,不可能凭空就有。这个无论是谁都懂。
    只是我一开始真的就没往这方便想,普通人只是把 python 当成一个快速实现效果的工具,我的目的就是希望找到直接就能用并且效果还过得去的方案,如果实在没有就算了。我自己去测试 pytesseract 模块以及我来提这个问题,都是抱着立刻达到勉强能用的效果的目的,根本没想那么多。
    的确我表达不严谨,但是我真的没有任何贬低 python 的意思,我自己经常用 python ,贬低它对我没任何好处。
    另外就是正是因为 python 有 pytesseract 这样的模块,才让我觉得用 python 识别文字不应该那么复杂,直接引入一个模块就行。不然如果效果不行就干脆不要有模块好了。
    我其他表达方面其实算严谨的,其实并没有抬高百度的意思,用词都是比较注意。一开始我是认为应该不太可能出现有人认为我贬低 python 的,然后出现这种情况后我一开始还以为是因为出现“百度”这两个字。无论如何,我就是抱着一种希望能简单解决问题的初衷,不存在任何其他目的,所以一开始没有想那么多,所以就导致问题的标题用词比较简单。
    dingwen07
        17
    dingwen07  
       2021-12-06 01:28:57 +08:00
    zictos
        18
    zictos  
    OP
       2021-12-06 01:32:10 +08:00
    @ipwx #14 当然无论我怎么用词都可能被人找到漏洞,比如 13 楼
    rpman
        19
    rpman  
       2021-12-06 01:45:20 +08:00
    免费离线的算法和模型能指望给你多好的?
    deplivesb
        20
    deplivesb  
       2021-12-06 01:46:38 +08:00   ❤️ 7
    @zictos 你对现在有关图像识别还存在很严重的误解。“用 python 识别文字不应该那么复杂,直接引入一个模块就行” 一直以来神经网络就是一个复杂的东西,在现在为止,如果有能开箱即用的东西,要不然就是覆盖面不够全,只能针对单一场景进行开箱即用,要不然就是个玩具而已。而且你从标题就说了一个 “Python 识别图片文字” 识别图片文字本身就是一个很大很大的内容,识别什么文字?中文?英文?数字?还是混合都有,文字是标准打印体还是手写体?字体是否都是正的,而不是斜着,倒着的。字体和背景是否有明显区分?这些信息你一个都没有,上来就是一句 “Python 识别图片文字的效果是不是很差”
    不喷你才怪
    zictos
        21
    zictos  
    OP
       2021-12-06 02:01:06 +08:00
    @rpman #19 对,好像有那种离线的文字识别的商业软件,效果感觉还可以。但这种程度的应该不可能免费

    @deplivesb #20 一定说这么清楚吗?市面也有 ocr 类的商业软件,而且是离线的,效果不说多好,肯定比 pytesseract 模块好是肯定的,那别人是怎么做到通用的?我的意思是看类似的东西能不能通过 python 简单实现,有没有人写类似的东西并且直接可以作为 python 模块安装,当然这种免费的一般是不太可能有,实在没有就算了。
    另外如你所说,那 pytesseract 模块到底算一个什么样的东西呢?都说可以文字识别,那它是什么定位。只是一个玩具吗?的确我试用下来感觉只是一个玩具,但效果更好的模块也是理论上可能存在的,在于有没有提供,我一开始不太懂不是很正常吗?万一真的有效果更好的呢?
    imn1
        22
    imn1  
       2021-12-06 02:05:32 +08:00   ❤️ 22
    其实无关什么言辞漏洞,而是你本身缺乏知识,所以说出了标题那样的话
    pytesseract 是 python + tesseract 写出来的,只是 python 调用了 tesseract OCR 实现而已,不是纯 python 的算法
    那么如果用 python + baidu api 写出来的呢?两个都是 python ,那你的标题怎么来的?

    java + tesseract 和 java + baidu api 能不能说 “java 识别图片文字的效果是不是很差?”

    事实上,tesseract OCR 是 C++写出来的 https://github.com/tesseract-ocr/tesseract ,那又该怎么说呢?

    最后,python + opencv 等等很多算法,也能实现文字识别,区别只是训练了多少模型,与语言本身没多大关系
    因为语言参与的工作量可能连 1%都不到,99+%都是训练模型
    只要模型出来了,识别的效果就几乎全部和这个模型相关
    tesseract OCR 只是“个人”项目,训练量(尤其训练样本的数量)是无法和 baidu 比的,区别就在这里
    zictos
        23
    zictos  
    OP
       2021-12-06 02:17:13 +08:00
    @imn1 #22 我怎么就不知道 tesseract ?用 python 那个模块还要安装 tesseract 的。那这些是需要我关心的吗?
    如果你非得认为我不知道百度 api 是用程序写的,非得以为我认为百度 api 是因为百度牛逼,所以百度才能不通过程序直接创造出这样一个东西。那我也没办法。
    你自己说到了“训练量”,那 python 就可能存在比 tesseract OCR 训练量更高的东西啊!也可能没有。那我不知道不是很正常吗?
    像 opencv ,我就感觉非常好用。那文字识别领域万一也真的有非常牛逼并且能直接勉强使用的东西存在呢?所以的确是可能存在的,看了那么多回复,我现在知道了是不存在的,但“未来”也可能会存在。
    zictos
        24
    zictos  
    OP
       2021-12-06 02:25:16 +08:00
    @imn1 #22 opencv 最简单的就是模板匹配,就是在大图片上查找指定图像是否存在,这个可用性非常高。
    而 python 模块使用的 tesseract 却可用性非常低。所以是否有更好的离线 OCR 引擎的确是个问题,也的确是可能存在的。
    imn1
        25
    imn1  
       2021-12-06 02:37:28 +08:00   ❤️ 13
    @zictos #23
    python 是语言,tesseract 是模型,baidu api 是模型集,都不是一类东西,不能比较,不存在谁比谁差的问题
    因为任何语言都可以调用后两者,而这时说那个语言差就很奇怪了

    个人或小团队能搜集的样本,和一个搜索引擎能收集的样本数量,说这两个分不出哪个多,说不过去吧

    算了,感觉我在跟一个主张语文、数学、哲学谁更强的人在讨论,不在一个频道
    f165af34d4830eeb
        26
    f165af34d4830eeb  
       2021-12-06 03:55:57 +08:00   ❤️ 4
    python: 人在家中坐,锅从天上来。
    zictos
        27
    zictos  
    OP
       2021-12-06 04:07:10 +08:00
    @imn1 #25 我标题中不是一个观点,只是一个提问。我主张什么了?并且我很快用 pytesseract 模块举了例子,说明我为什么会提这个问题。
    客观上来说理解内容要根据上下文,所以我已经明确指出了是“pytesseract 模块”识别文字的效果差。问题描述的最后一行也只是想了解到是否有更好的直接可用的方案,并没有完全对 python 持否定态度,打心底里是认为有更好的直接可用的方案的。倘若真的有比 pytesseract 模块效果更好的,那我的标题就直接不成立了,至于其他自己写模型之类的方案也并没有完全否定,归根结底都只是一个疑问,不懂就要问也有错?
    而且明明我就没有任何贬低 python 的意思,我不知道还很多人抓着标题不放干嘛?这样有什么意思吗?前面该解释的都解释了,倘若我真的冥顽不灵,倘若我真的坚持认为 python 识别图片文字的效果很差这个观点,那要喷我也就罢了。难道这些人在现实中就是这么为人处世的吗?本来就是一个误会,就算不是误会,就算我真的一开始就持“python 识别图片文字的效果很差”这个观点,但后面认识到自己这个观点是错的,这样不也应该结束了吗?难道还要继续去喷?
    hello2090
        28
    hello2090  
       2021-12-06 04:40:51 +08:00 via iPhone
    试试 C 语言我,听说性能比较好
    binux
        29
    binux  
       2021-12-06 05:10:56 +08:00   ❤️ 1
    @zictos 你没有理解编程语言,引擎,模型,训练数据之间的区别,无法区分效果的好坏是因为编程语言,引擎,模型还是训练数据的不同。于是你拿着模型和训练数据的区别去比较编程语言,引擎的好坏。
    zictos
        30
    zictos  
    OP
       2021-12-06 05:23:35 +08:00
    @binux #29 事实上我并不是比较编程语言的好坏,我也没认为某个语言比 python 更好或更差之类的。
    假设就拿语言原生支持某些功能来说,比如 php 开发 web 更快,这样能说明 php 就比 python 一定更好吗?实际只是 php 更加针对 web 方向而已。
    如果现在假设有一个语言官方本身就支持文字识别,只要一两行代码就行。那能说这个语言最终在文字识别的功能上一定优于 python 吗?所以就算 python 官方不支持文字识别或者现在 python 的文字识别已有的方案的效果都不好,也不代表 python 就比其他语言差啊。
    也就是说即便我说了“python 文字识别效果差”之类的话,也不代表就是在否定这门语言,更何况我根本没说,我只是在提问,而且这其中完全是一个误会。另外就是不代表每个学习编程语言的都要去深刻理解引擎、模型、训练数据之类的,大部分时候只要按官方提供的语法来就行。
    总之,感觉会一直不停的有人来误会。
    lyoe
        31
    lyoe  
       2021-12-06 06:12:45 +08:00
    只能说 LZ 给自己开了一个地图炮。
    1. 把编程语言和模型混为一谈;就像 #22 说的那样,太不专业;
    2. 想要更好的效果,最好 Google 或者 github 上先多搜索;当伸手党也不是不行,上来就把 pytesseract 说成天花板,也别怪别人吐槽你。
    dayeye2006199
        32
    dayeye2006199  
       2021-12-06 07:10:16 +08:00
    Lz 的需求建议直接买 API 吧。
    自己弄的话也得简单讲一下需求把,文件类型是什么?合同身份证文件还是带文字的图片?识别的内容是什么,文字表格还是啥?对精度需求是咋样的?

    上来调个包就搞定了,这是不让这么多做 ocr 的公司吃饭啊
    xinghen57
        33
    xinghen57  
       2021-12-06 07:42:28 +08:00 via iPhone   ❤️ 1
    感觉 lz 的发帖风格和我刚毕业认识的一女孩子很像
    ozuikai
        34
    ozuikai  
       2021-12-06 07:49:51 +08:00 via iPhone   ❤️ 13
    提问的艺术

    Python 的 OCR 是不是很差 🚫
    Python 有哪些好用的 OCR 模块 /算法 ✅
    greatx
        35
    greatx  
       2021-12-06 08:34:39 +08:00
    paddleOCR 试一下
    ispinfx
        36
    ispinfx  
       2021-12-06 08:36:31 +08:00
    这个标题就是纯属找骂的…
    Latin
        37
    Latin  
       2021-12-06 08:41:31 +08:00   ❤️ 1
    百度 paddleocr 京东 easyocr
    Accessing
        38
    Accessing  
       2021-12-06 08:51:59 +08:00   ❤️ 2
    这个标题实际上就隐含了重大的错误,即 Python 本身有 OCR 功能,实际上这个功能在标准库中根本就没有,这就意味着这个标题本来就是错误的。

    效果好不好主要取决于你调用什么东西,而不是你用什么语言调用,这个真的无所谓。
    linnil
        39
    linnil  
       2021-12-06 08:53:09 +08:00 via iPhone   ❤️ 2
    微信好垃圾啊,我摇一摇竟然不能把所有人的零钱转到我手上。
    微信不止能支付,微信还能看健康码🤔。
    至于你说你为何需要知道 pytesseract 是 python+tesseract 组成的,直接用不就好了?买电脑你可以买成品,也可以自己组装。开源的你嫌不好,商业的你嫌要钱,那就只能自己搞,自己搞你不理解这些谁了解这些?
    我不去赚钱,等着微信出摇一摇把大伙的钱都转我手上它不香么?
    ncepuzs
        40
    ncepuzs  
       2021-12-06 08:57:46 +08:00
    要么买大厂的 API ,要么就自己训练模型咯,这种通用模块换任一门语言效果不都是勉强能用?
    Windn0
        41
    Windn0  
       2021-12-06 08:58:59 +08:00 via iPhone
    楼上说的对,问出这个问题的确是楼主自己知识不足。基本的概念都不清楚。当然,也有可能是语文没学好。
    ErenJaeger
        42
    ErenJaeger  
       2021-12-06 08:59:14 +08:00
    tessract 需要训练才能提高识别度,基础的只能识别最简单的数字字符。稍微加个噪点或者调整倾斜度都会导致识别失败的。
    Windn0
        43
    Windn0  
       2021-12-06 08:59:54 +08:00 via iPhone
    然后,回答楼主问题:随便去 GitHub 上找一个识别的项目自己整合啊,别告诉你只会调函数。
    Jakarta
        44
    Jakarta  
       2021-12-06 09:00:31 +08:00 via Android
    @ozuikai
    提问的艺术
    Python 有哪些好用的 OCR 模块 /算法 ❌
    Python 的 OCR 是不是很差 ✅
    MengQuadra
        45
    MengQuadra  
       2021-12-06 09:05:29 +08:00
    PaddleOCR 了解一下?
    sunshijie
        46
    sunshijie  
       2021-12-06 09:08:59 +08:00
    linnil
        47
    linnil  
       2021-12-06 09:09:40 +08:00 via iPhone
    搜一下 trocr ?我想看看你是不是会说出 python 好牛逼,十行代码就实现了文字识别这样的话。
    binux
        48
    binux  
       2021-12-06 09:21:44 +08:00
    @zictos 你还是没理解。就算某个语言,引擎,模型最终在文字识别 “效果好”,也不一定它的语言,引擎,模型就更好,它有可能训练数据更好,或者更贴近你的场景。如果你不理解 OCR 的技术原理,你都不知道你在找什么东西。

    #14 楼已经告诉你了,如果你想要找一个直接开箱即用模块,对不起,没有。
    AnsonUTF8
        49
    AnsonUTF8  
       2021-12-06 09:28:58 +08:00
    我感觉 OP 是误以为因为他说了 baidu 的挺好用的所以被喷,其实没有人关注你提不提 baidu ,都只是从技术的角度把你提到的 baidu api 当作 api ,没有代入对 baidu 的情绪。
    Juszoe
        50
    Juszoe  
       2021-12-06 09:36:27 +08:00   ❤️ 1
    如何制造热点帖子
    Python 有哪些好用的 OCR 模块 /算法 ❌
    Python 的 OCR 是不是很差 ✅
    abersheeran
        51
    abersheeran  
       2021-12-06 09:39:34 +08:00
    效果好的训练结果,人家都是拿来卖钱的好吧。你用的百度云的 API ,估计在他们服务端也是用 Python 去调用的。有免费的给你用就知足吧,还抱怨什么效果不好。
    lostpg
        52
    lostpg  
       2021-12-06 09:39:54 +08:00 via Android   ❤️ 1
    @Jakarta
    提问的艺术 ❌
    吸引评论的艺术 ✔️
    coolcatha
        53
    coolcatha  
       2021-12-06 09:40:01 +08:00   ❤️ 2
    楼主不要这么激动,你提问的这个问题可能对非程序员来说很正常,如但是对程序员来说都会觉得比较可笑,没办法这个论坛大部分都是程序员,这些知识在这里算常识了。

    如果你标题换成「 pytesseract 识别图片文字的效果是不是很差?」都挑不出任何问题。

    不知道这些东西没关系,去了解就好了,在这里浪费时间不值得。
    dlsflh
        54
    dlsflh  
       2021-12-06 09:40:33 +08:00 via Android
    没有就没有,有就给个链接,非要抬杠显得自己专业楼主业余,长篇大论下来远不如直接回答问题。
    dlsflh
        55
    dlsflh  
       2021-12-06 09:41:31 +08:00 via Android
    另外,这个论坛可真不一定大部分是程序员。
    xingshu1990
        56
    xingshu1990  
       2021-12-06 09:42:38 +08:00
    楼主问的是 牛头不对马嘴,22 楼的老哥已经说清楚。
    把 Python 比作工具箱,pytesseract 或者其他 OCR 库,比作工具箱里的扳手等工具,难道扳手不好用,就说这个工具箱没用?

    关于提高识别率,除了字体尽量统一以外,还要对图片进行裁切,图片去色,切片训练等处理,这中间又涉及到很多的算法,这些算法上面的老哥们都回复了。

    开箱即用的软件的话,ABBYY 收费版+汉字训练 基本上能大量提高识别率。
    zzl22100048
        57
    zzl22100048  
       2021-12-06 09:46:13 +08:00
    @coolcatha 你这样一改这贴没啥人回复了
    jaredyam
        58
    jaredyam  
       2021-12-06 09:51:48 +08:00
    我只说一句,文本检测和识别是当前 AI 领域的一个重要研究方向,不存在绝对的好与坏,你现在看到的大多是经典的、开源的、团队性质的。
    ch2
        59
    ch2  
       2021-12-06 09:54:07 +08:00
    tesseract 是上古算法,肯定比不上这几年才出的模型
    你想效果好得自己用 pillow 预处理一下,不预处理没效果很正常
    BQsummer
        60
    BQsummer  
       2021-12-06 09:59:25 +08:00
    楼主跟真经回答 ppocr 的回答一个都不回复,就跟楼上的对线了,无语了
    HUNYXV
        61
    HUNYXV  
       2021-12-06 10:22:39 +08:00
    dtdtxybc
        62
    dtdtxybc  
       2021-12-06 10:32:31 +08:00
    看上去很不专业的标题才能吸引评论,楼主其实是想用这种方法吸引人来解决问题,现在楼主的目的已经达到了。高,实在是高
    ungrown
        63
    ungrown  
       2021-12-06 10:36:36 +08:00   ❤️ 7
    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
        64
    hlwjia  
       2021-12-06 10:37:36 +08:00
    @dtdtxybc 又或者是缺金币了
    mxT52CRuqR6o5
        65
    mxT52CRuqR6o5  
       2021-12-06 10:45:38 +08:00
    python 就是个调用方,ocr 效果好不好和 Python 有什么关系
    alanse7en
        66
    alanse7en  
       2021-12-06 10:46:20 +08:00
    识别效果和你的算法和模型有关系,和编程语言没关系
    lonelygo
        67
    lonelygo  
       2021-12-06 10:47:00 +08:00
    这个锅和 python 有什么关系?
    ungrown
        68
    ungrown  
       2021-12-06 10:47:37 +08:00
    @ch2 #59
    tesseract 单就字符识别这块其实不算落后,它只是没有对输入的图像进行很强针对性的预处理,这活交给用户了。
    很多现代的 ocr 工具都是杂糅了大量的图像处理、内容分块、排版识别、以及字符处理,运算量极大,多数都是依托于机器学习、深度学习的,不上显卡的话运算速度非常慢。
    然后这类新式工具如果要加几个特别的字符的话,就得重新训练一个模型出来。扩展性这方面 tesseract 反而方便得多。
    tesseract 就是功能比较少、比较基础,很多字符识别之外的事情得用户自己做。
    mxT52CRuqR6o5
        69
    mxT52CRuqR6o5  
       2021-12-06 10:48:43 +08:00
    @zictos
    [如果现在假设有一个语言官方本身就支持文字识别,只要一两行代码就行]
    问题是没有这种东西就,如果并不成立,好与坏本来就是比出来的,你在这边嘴强半天也没举出你心目中 [在 ocr 方面比 python 效果好的语言] 的例子
    RobinHu
        70
    RobinHu  
       2021-12-06 10:52:22 +08:00
    金币能用来干嘛 ?
    yohole
        71
    yohole  
       2021-12-06 12:15:49 +08:00   ❤️ 3
    其实我试过像楼主这样的经历,那时确实是菜,提问也没多大技巧,很多时候遇到问题,然后就很表面和直接的地发出来,不过那时候很庆幸的是,那时的社区人很包容,会跟你点到即止或者直接 get 到你的点就直接回复问题了,不像现在围观的多,批评教育的也多

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

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

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

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

    这点还是得同意的,你实际上运用的是一套全新的语言,而不是 Python 本身。
    VIVVACI
        79
    VIVVACI  
       2021-12-06 14:44:58 +08:00
    不是,识别文字是算法的事啊,和语言有个 P 的关系?
    zictos
        80
    zictos  
    OP
       2021-12-06 14:47:44 +08:00
    @2i2Re2PLMaDnghL #76
    你这个例子太过常识了,而自己写图片文字识别的训练模型的话即便是 v2 的程序员也不见得写过。
    打火机烤肉基本不具有可操作性,而 pytesseract 模块既然存在就说明它有存在的意义,说不定还是有人认为它勉强能用。
    sidkang
        81
    sidkang  
       2021-12-06 14:56:30 +08:00   ❤️ 1
    哈哈,楼主还在努力找场子么,不容易,其实我还以为开始的几楼回复的这些算是常识呢
    gengchun
        82
    gengchun  
       2021-12-06 14:59:26 +08:00
    @zictos 什么叫现成方案,只要你有预算,让乙方给你专门开发一个 fortran 77 的 SDK 都可以。
    zictos
        83
    zictos  
    OP
       2021-12-06 15:05:56 +08:00
    @sidkang #81 常识是指 python 不自己写模型并且快速上手的情况下它的文字识别到底能达到一个什么效果,这个的确一开始不知道除了 pytesseract 模块还有没有更好的方案。
    理解内容要根据上下文,我不止只写了一个标题。你在网上看到有人输了一个错别字,难道也要一直抓住不放,认为他没文化连一个常见字都打错吗?
    zictos
        84
    zictos  
    OP
       2021-12-06 15:11:37 +08:00
    @sidkang #81 是,我连百度 api 是用程序实现的这个基本逻辑都不懂。这世界上真的没有比我更傻的人了,这样你是否满意呢?如果连这个都不懂,那就算有比 pytesseract 好用的模块,我这么傻的人应该也不会用了吧!毕竟百度的 ocr 是用编程语言开发的,基本随便找个人都知道,我居然连这个都不知道,惭愧啊!
    zictos
        85
    zictos  
    OP
       2021-12-06 15:15:56 +08:00
    @gengchun #82 你居然知道百度的 OCR 是用“编程语言”写的,太厉害了,膜拜大神,你说我值得学习的对象。
    zictos
        86
    zictos  
    OP
       2021-12-06 15:16:24 +08:00
    @gengchun #82 85 楼发错了。


    @sidkang #81 你居然知道百度的 OCR 是用“编程语言”写的,太厉害了,膜拜大神,你说我值得学习的对象。
    Windn0
        87
    Windn0  
       2021-12-06 15:18:46 +08:00 via iPhone
    @zictos 你这种人真没意思,我们给你指出你的错误并给你提出解决方案,你不听,反而在这里对线。真不知说你啥好。
    deplivesb
        88
    deplivesb  
       2021-12-06 15:21:21 +08:00   ❤️ 1
    楼主这种心态,自高自大,指出你的错误不肯听,说群友咬文嚼字,抓着你的语言漏洞不放,殊不知你的语言漏洞就是来自你的无知与傲慢无礼
    zictos
        89
    zictos  
    OP
       2021-12-06 15:21:28 +08:00
    @Windn0 #87 我承认自己就是标题不严谨,之前已经说过多次了。如果你要认为我连百度的 OCR 是用“编程语言”写的这个基本逻辑都不懂,那我也没办法。
    life4me
        90
    life4me  
       2021-12-06 15:24:14 +08:00
    C 听说识别很好,大神都用,Java 识别效果就差点意思,Python 估计就是不行
    nikan999
        91
    nikan999  
       2021-12-06 15:25:47 +08:00
    @zictos 楼主看看 63 楼 应该就知道怎么做了, 做完这些活你的程序效果就能接近百度文字识别。
    和语言没关系,Java PHP Golang C++ 也没模块直接识别图片文字
    zictos
        92
    zictos  
    OP
       2021-12-06 15:29:30 +08:00
    @deplivesb #88 我承认了有语言漏洞还不够?我犯了多大错?应该受到什么惩罚呢?按语文来说,你在 88 楼的这句话是不是逗号太多?中间是不是应该有其他标点符号?哦,对了,一逗逗到底的写作风格好像也挺优雅的。
    我承认标题不严谨,但如果有人要认为我连百度的 OCR 是用“编程语言”写的都不知道,我真的不能解释了?
    Windn0
        93
    Windn0  
       2021-12-06 15:50:59 +08:00 via iPhone
    犬吠
    xylxAdai
        94
    xylxAdai  
       2021-12-06 15:52:52 +08:00
    和 python 没关系。和人有关系。
    imyip
        95
    imyip  
       2021-12-06 16:06:59 +08:00
    那我不知道不是很正常吗?
    lakehylia
        96
    lakehylia  
       2021-12-06 16:15:19 +08:00
    为什么别人用一样的酱料,就能做出好吃的卤味。你做不出来,就怪酱料不行?
    shenqi
        97
    shenqi  
       2021-12-06 16:21:27 +08:00
    Python 识别图片文字的效果是不是很差?

    更正为
    shenqi
        98
    shenqi  
       2021-12-06 16:22:10 +08:00
    Python 识别图片文字的效果是不是很差?

    更正为
    pytesseract 识别图片文字的效果是不是很差?

    刚刚那条没打完按错了回复按钮。。。
    huntzhan
        99
    huntzhan  
       2021-12-06 16:32:29 +08:00
    我正在做工业落地级别的文字识别开源方案,OP 可以关注一下:
    huntzhan
        100
    huntzhan  
       2021-12-06 16:32:57 +08:00   ❤️ 1
    我正在做工业落地级别的文字识别开源方案,OP 可以关注一下:
    GitHub: https://github.com/vkit-dev/vkit
    文档网站: https://vkit-dev.github.io/
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2853 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.