Python自动化办公-编写一个OCR识别程序

OCR 的全称是 Optical Character Recognition,即光学字符识别,通俗点讲就是文字识别。在办公领域,最常用的就是识别图片上的文字,比如识别图片中的发票信息、合同信息、Excel 或者 Word 截图,比如说你对着喜欢的几页书拍了照,想把里面的文字抠出来怎么办?

现在的手机可能都有这个功能,但还不够智能,无法进行训练,再说要是有一堆图片需要处理呢?还是自己动手,丰衣足食,今天来分享一下如何 Python 写一个 OCR 识别程序。授人以渔,本文的思路适用于编写任意一个日常小工具。

第一步,看看已有的轮子

软件开发忌重复造轮子,对普通程序员来讲,也很难造一个好用的轮子,拿来主义真香,万千牛逼的库,虽不是我所有,却为我所用。

浏览器打开 https://github.com,搜索OCR,选择编程语言 Python,可以看到如下结果:

d519b6f28ba5f8a1319e33ff4a9c7823.png

通常情况下,我会选择 star 数量最多的,因为我相信程序员都是在真诚的点赞。

看完轮子的基本介绍,你选择适合自己的就好。

第二步,简单学习下要用的轮子

一般情况下,仓库的 README 上都有安装方法和使用教程,不过大部分都是英文,所以平时多记些英文单词,对于学习技术是很有帮助的。

比如说这个https://github.com/PaddlePaddle/PaddleOCR,很幸运,它是有中文的:

58b4d114979fafe8e1ac31d8da0e63a2.png f888554b8bce2d25058986beb19374a6.png

按照这个教程,自己实践一下:

安装
pip install "paddleocr>=2.0.1"

等待 pip 安装完成。

我在 Python 3.8.5 版本上使用 pip 安装顺利通过,而使用 pyenv 的 Python 就一直报编译失败的错误,因此不推荐 pyenv 来管理你的 Python 版本。我的做法是在本机上安装多个 Python 版本,要用哪个版本时启用对应的版本使用如下的命令创建一个虚拟环境:

python3.8 -m venv py38env
python3.9 -m venv py39env

假如要用 Python3.9 那就 source ~/py39env/bin/activate

如果安装过程报错了:

3eeed72b091a9446a9c5cfd2644af12c.png

遇到报错,不要慌,只要思想不滑坡,办法总比困难多。

报错信息提示 pip 遇到了编译错误,这也是 Python 为人诟病的地方,第三方库源代码安装时经常遇到编译错误,你看人家 Java,一个 jar 包处处都能用。

毕竟没有完美的语言,理解一下,理解一下。

观察报错前的打印信息,pip 正在安装的是 scikit-image 0.17.2,只要我们找到 scikit-image 的二进制包(别人已经按照对应的平台编译好了),也就是 whl 文件,直接安装一下完事,这个 whl 文件,要去 pypi 上找。浏览器打开 pypi.org,搜索 scikit-image,找到 0.17.2 版本,点开看看,结果如下:

2724faebd054931538e418ee64a1590b.png

发现 0.17.2 版本最高支持 Python3.8,如果你的 Python 版本是 3.9,劝你降低版本后安装。

选择对应 Python 版本、操作系统进行下载(要是下载慢,请用迅雷下载),然后,pip install 即可。


使用

找个图片试用一下:

1.jpg

c86f26bb676a785732b34bd1dbb1b9c4.png
paddleocr --image_dir 1.jpg --use_angle_cls true --use_gpu false

结果报了错,提示"ModuleNotFoundError: No module named 'paddle'",在 Issues 里面搜索一下找到了解决方案:

pip install paddlepaddle

然后再次执行识别出结果:

13087b02d1ee7fef39a4b8db0fa336d3.png

第三步,设计自己的程序。

工具虽然可以直接命令行使用,但结果不是很直观,我们可以写一个脚本,调用下它的接口,将图片路径作为参数输入,将识别出的文本内容作为输出,保存在相同路径下的文本文件中,文件名就是图片名+.txt。

参考官方的示例,可以很轻松写出如下代码:

import sys
from paddleocr import PaddleOCR,draw_ocr

def get_text_to_txt(img_path: str) ->None:

    ocr = PaddleOCR(use_angle_cls=True, use_gpu = False, show_log = False, lang='ch') # need to run only once to download and load model into memory
    result = ocr.ocr(img_path, cls=True)

    with open(img_path+".txt", "w") as writer:
        for line in result:
            print(line)
            writer.write(line[-1][0])
            writer.write("\n")

if __name__ == '__main__':
    get_text_to_txt(sys.argv[1])

保存为 ocr_demo.py 然后就可以在命令行调用:

❯ python ocr_demo.py /Users/aaron/Downloads/ppocr_img/imgs/1.jpg >> /dev/null
❯ cat /Users/aaron/Downloads/ppocr_img/imgs/1.jpg.txt
土地整治与土壤修复研究中心
华南农业大学|东图

至此脚本搞定。

最后

本文通过使用开源工具 paddleocr,分享了 Python OCR 程序的制作过程,paddleocr 支持 80 多种语言,支持用户自定义训练,还提供丰富的预测推理部署方案,更多技术细节还请参考官方仓库:https://github.com/PaddlePaddle/PaddleOCR

程序报错不可怕,可怕的是你看到错误就放弃了。

如果有帮助,请点赞、在看、关注支持,感谢路上有你。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值