社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python编程时光 • 3 年前 • 459 次点击  

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

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

 第一步,看看已有的轮子

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

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

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

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

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

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

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

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

安装

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

如果安装过程报错了:

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

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

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

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

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

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

使用

找个图片试用一下:

1.jpg

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

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

pip install paddlepaddle

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

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

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


文章的最后,插播一个福利

双十一快到了,阿里云也开始搞活动了,刚好我这边可以带大家白嫖阿里云的服务器。

说白了就是大家 可以一分钱不花,就可以领到服务器,规格是 2c4g(2vcpu 4G内存) 的机器。

有想参加的朋友,可以加我下微信,备注『服务器,我统一拉群,带大家一起薅羊毛。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122518
 
459 次点击