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

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

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

人生苦短,快学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

    推荐阅读
  • 阿q正传的故事梗概(阿q正传的故事介绍)

    以下内容希望对你有帮助!阿q正传的故事梗概作品描写了一个生活在辛亥革命前后的农民阿Q。在旧中国农村小镇未庄,阿Q很穷,只得住在土谷祠里,只能靠打短工为生。社会地位低下,甚至失掉了自己的姓。他的现实处境悲惨之至,但在精神上却“常处优胜”,靠着自欺欺人的精神胜利法他“战胜”了很多人,可终究拯救不了自己的性命,丧生在封建统治者的屠刀下。

  • 七彩纸培怎么养(怎样养好七彩)

    七彩纸培怎么养七彩神仙鱼体长20厘米,近圆形,侧扁,尾柄极短,背、臀鳍对称。七彩神仙鱼别名铁饼、七彩燕,原产于南美洲的亚马逊河流域,属热带鱼中的慈鲷鱼科。七彩神仙鱼贵得有道理,这似乎成了记者逛遍莱太花卉交易中心观赏鱼区所有热带水族店后得到的一个共识。不过,也有一部分人认为,七彩神仙鱼之所以贵,也离不开人为炒作,但是对于好的鱼种,大家还是一致认为物有所值的。

  • 红萝卜炒黄花菜步骤(红萝卜炒黄花菜怎么做)

    红萝卜炒黄花菜步骤食材:胡萝卜150g,黄花菜60g,木耳50g,瘦猪肉50g,食用油适量,盐适量,鸡精适量,香菜适量,大蒜瓣适量,干辣椒少许。按照自己的口感需求选择胡萝卜丝的长短粗细。将从超市买的晒干的黄花菜及木耳选取适量侵泡在水中,恢复原本的摸样和口感。购买新鲜的瘦肉,将瘦猪肉切成丁备用。黄花菜必须要煮熟,但是建议不要煮得太熟,会影响口感。根据口感加入调味料。对菜品有所讲究的亲可以用香菜等进行摆盘。

  • 平江县独生子女证怎么办? 平江县计生办

    符合现行的计划生育农村奖励扶助条件,可向当地村委会申报计划生育农村奖励。对自愿只生育一个孩子的夫妻,不再发放《独生子女父母光荣证》,不再享受独生子女父母奖励费等相关奖励优待政策。因此,我省自2016年3月30日起,停止办理《独生子女父母光荣证》,之前已经领取《独生子女父母光荣证》的,继续按规定的条件、标准、年限,享受各项计划生育奖励优待政策。

  • 中国春节的来历(中国春节的来历是什么)

    春节是由岁首祈岁祭祀演变而来,上古时代人们在春回大地、终而复始、万象更新的岁首,举行祭祀活动报祭天地众神、祖先的恩德,驱邪攘灾、祈岁纳福。如岭南部分地区沿承有在新年初一拜岁以及新年期间隆重盛大的拜神祭祖、驱邪纳福节仪活动,由此可见上古时代岁首祭祀的蛛丝马迹。人们点起蜡烛或油灯,通宵守夜,象征着把一切邪瘟病疫照跑驱走,期待着新的一年吉祥如意。

  • 什么梗是什么意思(网络语什么梗的意思)

    接下来我们就一起去研究一下吧!什么梗是什么意思所谓“梗”的意思是笑点,铺梗就是为笑点作铺垫。一般来说,梗用于流行事物比如综艺、动漫、电视剧等。“梗”字的词义被不断扩大引申,大到某个时间段,小到情节插曲,乃至故事中发生的片段都可以叫“梗”,比如“身高梗”、“经典梗”、“撞脸梗”、“言情梗”、“创意梗”、“幽默梗”等。这些用法多来自网络语言,往往有一定的时效性,随着时间的推进,老梗会被新梗覆盖。

  • 洛阳中考查分是裸分还是包括加分 洛阳中考成绩总分是多少分

    考生在平台上查询到的成绩,除七门文化课外,还有满分共115分的中招体育、理化生实验操作、信息技术考试成绩。经审批享受加分政策的学生,在平台上查到的成绩含固定分值的中招加分。查分时间:7月7日8:00查询入口:1、河南省普通高中综合信息管理系统2、河南省高中阶段教育招生信息服务平台3、河南中考服务平台

  • 第四届中国国际茶叶博览会有哪些展馆

    重大主题活动一览本届茶博会主要以下特点1、庆祝建党百年,提振发展信心2、坚持开放共享,创造合作机遇3、促进茶叶消费,构建新发展格局4、推动数字化应用,提升现代化水平5、丰富文化内涵,增强展会体验感6、本届展会规模更大、活动更多、形式更新。

  • 人固有一死或重于泰山或轻于鸿毛的或是什么意思(人固有一死出自哪里)

    人固有一死或重于泰山或轻于鸿毛的或是什么意思?人固有一死或重于泰山或轻于鸿毛的或的意思:有的,今天小编就来聊一聊关于人固有一死或重于泰山或轻于鸿毛的或是什么意思?接下来我们就一起去研究一下吧!“人固有一死,或重于泰山,或轻于鸿毛”出自西汉司马迁《报任安书》,意思是:人意思是人终究免不了一死,但死的价值不同,有的人的死比泰山还重,有的人的死比鸿毛还轻。常用来比喻人生价值的轻重悬殊。

  • 打了新冠疫苗之后需要注意什么饮食(打完新冠疫苗后饮食注意事项)

    打了新冠疫苗之后需要注意什么饮食新冠疫苗接种疫苗之后,不要吃辛辣刺激性的食物,禁烟,不要喝浓茶咖啡,避免影响药效。其次就是注射新冠疫苗之后需要多喝水,不能喝酒。打完新冠疫苗之后最好不要服用任何药物,尤其是不要吃消炎药物,因为消炎药物很有可能会与新冠疫苗产生一些相互作用,对疫苗的药效发挥造成一定的影响,还有可能会出现不良反应。