高考考试网
当前位置: 首页 高考资讯

Python 文字识别(用Python写了一个图像文字识别OCR工具)

时间:2023-07-29 作者: 小编 阅读量: 5 栏目名: 高考资讯

人生苦短,快学Python!在之前的文章里,我们多次尝试用python实现文本OCR识别!今天我们要搞一个升级版:直接写一个图像文字识别OCR工具!博主基于PyQtlabelmePaddleOCR写了一个桌面端的OCR工具,用于快速实现图片中文本区域自动检测文本自动识别。ui界面上的控件可以通过self._ui.xxxObjectName访问。这里以按钮响应函数、列表响应函数为例。

人生苦短,快学Python!

在之前的文章里,我们多次尝试用python实现文本OCR识别!

今天我们要搞一个升级版:直接写一个 图像文字识别OCR工具 !

引言

最近在技术交流群里聊到一个关于图像文字识别的需求,在工作、生活中常常会用到,比如 票据、漫画、扫描件、照片的文本提取 。

博主基于 PyQtlabelmePaddleOCR 写了一个桌面端的OCR工具,用于快速实现图片中 文本区域自动检测 文本自动识别 。

识别效果如下图所示:

干货主要有:

① 200 多本 Python 电子书(和经典的书籍)应该有

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且可靠的练手项目及源码)

④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)私信小编01即可获取大量Python学习资源

▲OCR工具识别效果

所有框选区域为OCR算法自动检测,右侧列表有每个框对应的文字内容;点击右侧“识别结果”中的文本记录,然后点击“复制到剪贴板”即可复制该文本内容。

功能列表
  • 文本区域检测 文字识别
  • 文本区域可视化
  • 文字内容列表
  • 图像、文件夹加载
  • 图像滚轮缩放查看
  • 绘制区域、编辑区域
  • 复制所选文本识别结果
OCR部分

图像文字检测 文字识别算法,主要借助 paddleocr 实现。

创建或者选择一个虚拟环境,安装需要用到的第三方库。

conda create -n ocrconda activate ocr

安装框架

如果你没有NVIDIA GPU,或GPU不支持CUDA,可以安装CPU版本:

# CPU版本pip install paddlepaddle==2.1.0 -i https://mirror.baidu.com/pypi/simple

如果你的GPU安装过CUDA9或CUDA10,cuDNN 7.6 ,可以选择下面这个GPU版本:

# GPU版本python3 -m pip install paddlepaddle-gpu==2.1.0 -i https://mirror.baidu.com/pypi/simple

安装 PaddleOCR

安装paddleocr:

pip install "paddleocr>=2.0.1" # 推荐使用2.0.1 版本

版面分析,需要安装 Layout-Parser:

pip3 install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl

测试安装是否成功

安装完成后,测试一张图片 --image_dir ./imgs/11.jpg ,采用中英文检测 方向分类器 识别全流程:

paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false

输出一个list:

在python中调用

from paddleocr import PaddleOCR, draw_ocr# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`ocr = PaddleOCR(use_angle_cls=True, lang="ch")# need to run only once to download and load model into memoryimg_path = './imgs/11.jpg'result = ocr.ocr(img_path, cls=True)for line in result:print(line)

输出结果是一个list,每个item包含了文本框,文字和识别置信度:

[[[24.0, 36.0], [304.0, 34.0], [304.0, 72.0], [24.0, 74.0]], ['纯臻营养护发素', 0.964739]] [[[24.0, 80.0], [172.0, 80.0], [172.0, 104.0], [24.0, 104.0]], ['产品信息/参数', 0.98069626]] [[[24.0, 109.0], [333.0, 109.0], [333.0, 136.0], [24.0, 136.0]], ['(45元/每公斤,100公斤起订)', 0.9676722]] ......

界面部分

界面部分基于pyqt5实现,其中pyqt GUI程序开发入门和环境配置,详见一篇博客(具体见文末)。

主要步骤:

界面布局设计

在QtDesigner中拖拽控件,完成程序界面布局,并保存 *.ui 文件。

利用 pyuic 自动生成界面代码

在 pycharm 的项目文件结构中找到 *.ui 文件,右键——External Tools——pyuic,会在ui文件同级目录下自动生成界面 ui 的 Python 代码。

编写界面业务类

业务类 MainWindow 实现程序逻辑和算法功能,与前面第2步生成的ui实现解耦,避免每次修改ui文件会影响业务代码。ui界面上的控件可以通过 self._ui.xxxObjectName 访问。

class MainWindow(QMainWindow): FIT_WINDOW, FIT_WIDTH, MANUAL_ZOOM = 0, 1, 2 def __init__(self):super().__init__()# 调用父类构造函数,创建QWidget窗体self._ui = Ui_MainWindow()# 创建ui对象self._ui.setupUi(self)# 构造uiself.setWindowTitle(__appname__)# 加载默认配置config = get_config()self._config = config# 单选按钮组self.checkBtnGroup = QButtonGroup(self)self.checkBtnGroup.addButton(self._ui.checkBox_ocr)self.checkBtnGroup.addButton(self._ui.checkBox_det)self.checkBtnGroup.addButton(self._ui.checkBox_recog)self.checkBtnGroup.addButton(self._ui.checkBox_layoutparser)self.checkBtnGroup.setExclusive(True)

实现界面业务逻辑

对主界面上的按钮、列表、绘图控件进行 信号槽连接 。自定义的槽函数不用专门声明,如果是自定义的信号,需要在类__init__()前加上 yourSignal= pyqtSignal(args) 。

这里以按钮响应函数、列表响应函数为例。按钮点击的信号是 clicked ,listWidget列表切换选择的信号是 itemSelectionChanged 。

# 按钮响应函数self._ui.btnOpenImg.clicked.connect(self.openFile)self._ui.btnOpenDir.clicked.connect(self.openDirDialog)self._ui.btnNext.clicked.connect(self.openNextImg)self._ui.btnPrev.clicked.connect(self.openPrevImg)self._ui.btnStartProcess.clicked.connect(self.startProcess)self._ui.btncopyAll.clicked.connect(self.copyToClipboard)self._ui.btnSaveAll.clicked.connect(self.saveToFile)self._ui.listWidgetResults.itemSelectionChanged.connect(self.onItemResultClicked)

5. 运行看看效果

运行 python main.py 即可启动GUI程序。

打开图片→选择语言模型ch(中文)→选择文本检测 识别→点击开始,检测完的文本区域会自动画框,并在右侧识别结果——文本Tab页的列表中显示。

所有检测出文本的区域列表,在识别结果——区域Tab页:

软件代码

由于时间有限,软件细节功能还需进一步完善。代码已开源到 gitee 上,欢迎感兴趣的朋友提pull request,共同修改完善。

代码开源地址: https://gitee.com/signal926/ocr-gui-demo

    推荐阅读
  • 扶芳藤怎么栽培 扶芳藤的生长环境

    按行距为5厘米开沟,将插穗以3厘米的株距整齐斜摆在沟内,插的深度以插条下端2/3入土为宜,插后覆土压实插条四周土壤,并淋透定根水。按行距25-30厘米开沟,株距约15厘米摆放,边摆30厘米×15-20厘米开穴种植,每穴种苗1-2株,淋足定根水。种植成活后,如发现有缺株,应及时补上同龄苗木,以保证全苗生产。由于扶芳藤前期生长较慢,杂草较多,每月应进行1-2次中耕除草。禁止单纯使用化肥,限制使用硝态氮肥。

  • 梦到狐狸是什么意思周公解梦(梦见狐狸了是啥意思啊)

    另一方面,也表示你身边的人可能为了你着想,正对你隐瞒着一个秘密。

  • 栝楼什么季节种植(栝楼栽培管理技术)

    果壳中药名栝楼皮,种子中药名栝楼仁,根中药名天花粉(根)。栝楼皮具有润肺化痰、宽中利气的功效;栝楼仁具有润燥、化痰、滑肠、通便的功效;天花粉具有清肺、养胃、止咳、降火、消肿等功效。选取成熟的果实,取出种子,3月中旬进行温床育苗。4田间管理生长期及时中耕除草,植株封行后停止除草。7月份,每亩追施腐熟人畜粪水1500kg。9月份,果实呈绿色时采收全栝楼。

  • 黄鹌菜的功效与作用 黄鹌菜的功效与作用,黄鹌菜的副作用

    黄鹤菜的副作用黄鹤菜除了上面功效以外,还能增强人体抗病毒能力,预防流感和尿路感染发生,但是药三分毒,黄鹤菜也不例外,人们在服用黄鹤菜有一定的副作用,它会加重人类肠胃负担,会导致脾胃虚寒或者腹痛,那些肠胃功能不全的人在食用黄鹤菜以后还可能会出现滑肠腹泻。

  • 怎么给员工办理社保(给员工办理社保的方法)

    怎么给员工办理社保单位营业执照副本、组织机构代码证、公章,原件及复印件法人以及经办人员身份证复印件。单位公积金登记申请表。员工需要提供本人身份证复印件、1寸白底照片、个人信息登记表、社保增员。由单位社保经办人员带单位社保证、公章、参保人员相关资料到社保部门统一办理社保部门办理之后,会下发社保卡,不同的城市日期不同,有的是半个月,有的是一个月。通过社保卡可以查询个人社保缴存记录。

  • 治乳腺炎的偏方(治疗乳腺炎偏方)

    乳腺炎是由细菌感染引起的乳腺组织急性化脓性病变,一般多见于哺乳期和初产后3-4周左右的妇女,是一种较为常见的妇科疾患,给很多产后女性的哺乳带来极大的不便。用法:蒲公英水煎剂一日煎服3次,蒲公英泥外敷于疼痛处,干则再换。

  • 红火蚁有没有入侵无锡(红火蚁有多厉害)

    随着红火蚁入侵范围不断增大,被红火蚁咬伤的案例也逐渐呈暴发态势。有专家在网络上以“红火蚁休克、昏迷”作为关键词,在2019年1月1日到2020年10月16日的时间段内检索到50例红火蚁伤人事件。红火蚁不仅伤害人类,还会屠杀其他动物。除了动物之外,植物也是红火蚁的攻击目标。果蝇可以让幼虫寄生在红火蚁体内,吸食红火蚁的营养,致其死亡,也是一种选择。

  • 三月什么花开的季节(三月份开的花的哪些)

    我们一起去了解并探讨一下这个问题吧!三月什么花开的季节金银花,花期在3-4月份,花朵刚开放的时候白色的,之后变成黄色。桃花,也是在3-4月份开花,花朵颜色多变,花朵分为复瓣和重瓣。梨花,花期会根据当地的地域有区别,开花时间在2-5月份左右。

  • 桃蛋变绿了怎么养红(桃蛋变绿了的原因及解决方法)

    以下内容希望对你有帮助!若是长时间在庇荫或者日照时间短的位置养护的话,叶片就会慢慢的出现变绿的情况。

  • 机动车检验合格标志到期在哪领?(机动车合格标志到期哪里领)

    机动车检验合格标志到期在车管所进行领取即可。机动车检验合格标志的领取需要带行车本,交强险,身份证去车管所或者是交警大队免费领取年检标志。根据《道路交通安全法实施条例》第13条规定:机动车检验合格标志、保险标志应当粘贴在机动车前窗右上角。不按照规定张贴相关车辆标志是违法的。