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

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

    推荐阅读
  • 学习法学要背什么(最后70天各科背什么)

    其次,这个阶段除了要背诵之外,已经可以开始大量地练习了,而且提醒大家,最重要的是一定要亲自动手写。刑法民法的案例分析题考察的是记忆和推理能力。其次是要多做题。现在发现就记下来,争取考试时别错就好。这个阶段做真题的目的不仅在于研究真题,还在于端正态度,就把这个模拟当成是正式考试一样。建议大家一周可以抽两天时间出来做真题。

  • 小米11 ultra怎么样值得购买吗(小米11Ultra降价2000元但它还值得买吗)

    有一说一,降完价后的小米11Ultra,性价比确实突出。而从小米10开始,小米则是正式转向了定制CMOS的路线,主摄的底迎来了大幅提升。至于小米11Ultra就不用多说了,光是两颗副摄,就已经用上了K20Pro的主摄同款。更大底的小米11Ultra,在这块也输了。此外,如果是这种亮度相对比较高的城市夜景。直到2018那年,小米才开始成立独立的相机部,专注于拍照的提升。当年的小米8,也成为了第一款登上DXO榜单的数字旗舰。另外,这次小米11Ultra突然选择降价清仓。

  • 公务员考试人文历史常识题(国学常识练习题)

    国学常识练习题公考真题练习,每天一练,轻松上岸!公考各种资料分享,每天都在更新,求点赞关注评论转发1、“形存则神存,形谢则神灭”是由谁提出的(​A)A、范缜​B​、柳宗元​C​、周敦颐​D​、刘禹锡2、(B​)时期。

  • 猫牙齿断了怎么办(猫牙齿断了怎么办讲解)

    跟着小编一起来看一看吧!猫牙齿断了怎么办应该观察猫咪断牙处的牙龈有无肿胀发炎,如果有的话,主人应该给猫咪饲喂一些消炎药物。如果是处于换牙期的猫咪,那么断牙后还可以长出新牙。但如果是成年猫咪,那么断牙后,是不会再长的,如果断牙处不影响猫咪的正常生活,是可以不用拔牙的。那两颗尖牙是为了捕猎用的,但现在猫都是家养了,所以少那个尖牙没关系。

  • 北戴河魏玉亭艺术学校(巴彦淖尔这所学校的学生人人都是)

    ↓↓↓为了丰富学生的校园生活,注重学生的个性发展,培养学生的兴趣特长,提升学生的动手能力和艺术素养,临河区逸夫学校的轻轻泥仿铜浮雕兴趣社团受到了学生们的欢迎。临河区逸夫学校严格执行“双减”政策,利用好学生社团这一阵地,在促进学生全面发展的同时充分挖掘学生潜能,激发学生自信,全面提升学生素质。

  • 渐渐的意思是什么(渐渐是什么意思)

    以下内容大家不妨参考一二希望能帮到您!渐渐的意思是什么渐渐,指程度或数量逐步地;慢慢地。唐张籍《早春病中》诗:“更怜晴日色,渐渐暖贫居。”《三国演义》第八五回:“却说先主在永安宫,染病不起,渐渐沉重。”

  • 提高能量的三个绝招(提升能量最直接的10个小方法)

    过了九月进入十月,整体的能量都是呈上升的趋势。所以,不要担心,默默耕耘,静待佳音。仪态比五官更重要,整体大于局部。每个月拿出来10%的工资存起来,存几个月再买。有时候人就是需要和自己对话,直接讲出来的“我相信你”能让你瞬间提升能量。退出无用群聊,关掉朋友圈,不积极的话题绝不参与讨论。

  • 戴望舒狱中题壁初中现代诗阅读题及答案(戴望舒狱中题壁初中阅读题及答案是怎样的)

    戴望舒狱中题壁初中现代诗阅读题及答案?你们之中的一个死了,在日本占领地的牢里,他怀着的深深仇恨,你们应该永远地记忆。题目第二节中的“你们之中的一个”指谁?____________________________________________________对《狱中题壁》的赏析,不恰当的一项是()A。写给朋友的诗竟需要题壁,表明了身陷黑暗潮湿的囚狱中失去自由的状况。这首诗以一个个体的境遇与心情映射了整个中华民族誓死抗战的精神。全诗表明了诗人为了民族大义慷慨赴死的决心和对胜利终会到来的信心。

  • 怎么设置光盘启动(如何设置光驱启动)

    如何设置光驱启动电脑接通电源,按电脑的开机按钮开机或者在电脑的开始菜单的关机项目中,选择重启电脑开机画面上会提示进BIOS需要按哪个快捷键,每个主板的不一样,一般都是DelF2F10,也可以按F10,按一下进入到BI。

  • 盒马集市前景分析(盒马集市汇聚社区消费需求)

    5月下旬,羊角蜜甜瓜进入成熟期。山东莘县首批9万斤羊角蜜甜瓜,刚上市即销售一空。今年以前,每到5月收获期,莘县的羊角蜜瓜农便要想尽办法卖瓜。今年3月1日,阿里巴巴设立MMC事业群。3月底,盒马集市来到山东,与当地羊角蜜主产区合作。盒马集市联动大商家,前往农产品产地直采,让瓜农能够直接对接市场、社区和消费者。盒马集市平台一名羊角蜜供应商称。