花了一个小时用Python写一个图像和字符识别的OCR工具
人生苦短,学Python! 在上一篇文章中,我们多次尝试使用Python实现文本OCR识别! 今天我们要做一个升级版:直接写一个图像字符识别OCR工具! 介绍 最近在技术交流群里讲了一个图像和字符识别的需求,在工作和生活中经常用到,比如票据、漫画、扫描件和照片的文本提取。 博主基于PyQt+labelme+PaddleOCR编写了一款桌面OCR工具,用于快速实现图片中文字区域自动检测+文字自动识别
人生苦短,学Python!
在上一篇文章中,我们多次尝试使用Python实现文本OCR识别!
今天我们要做一个升级版:直接写一个图像字符识别OCR工具!
介绍
最近在技术交流群里讲了一个图像和字符识别的需求,在工作和生活中经常用到,比如票据、漫画、扫描件和照片的文本提取。
博主基于PyQt+labelme+PaddleOCR编写了一款桌面OCR工具,用于快速实现图片中文字区域自动检测+文字自动识别。
识别效果如下图所示:
OCR算法自动检测所有框选区域,右侧列出每个框对应的文本内容;点击右侧“识别结果”中的文本记录,然后点击“复制到剪贴板”即可复制文本内容。
功能列表
-
文字区域检测+文字识别
-
文本区域可视化
-
文字内容列表
-
图片和文件夹加载
-
图像滚轮缩放视图
-
绘图区和编辑区
-
复制选中的文本识别结果
OCR部分
图像文字检测+字符识别算法主要通过paddleocr实现。
创建或选择一个虚拟环境来安装所需的第三方库。
conda 创建-n ocr
conda 激活 ocr
安装架
如果你没有NVIDIA GPU或者GPU不支持CUDA,可以安装CPU版本:
# CPU 版本
pip install paddlepaddleu003du003d2.1.0 -i https://mirror.baidu.com/pypi/simple
如果你的GPU已经安装了CUDA9或者CUDA10、cuDNN 7.6+,可以选择以下GPU版本:
# GPU 版本
python3 -m pip install paddlepaddle-gpuu003du003d2.1.0 -i https://mirror.baidu.com/pypi/simple
安装 PaddleOCR
要安装 paddleocr:
pip install "paddleocr>u003d2.0.1" # 推荐版本 2.0.1 +
布局解析需要安装布局解析器:
pip3 安装 -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
输出一个列表:
在python中调用
从 paddleocr 导入 PaddleOCR,绘制_ocr
Paddleocr当前支持的多语言可以通过修改lang参数进行切换
例如,'Ch'、'en'、'fr'、'German'、'Korean'、'Japan'`
ocr u003d PaddleOCR(use_angle_clsu003dTrue, langu003d"ch") # 只需运行一次即可将模型下载并加载到内存中
img\path u003d './images/11.jpg'
结果 u003d ocr.ocr(img_path, clsu003dTrue)
对于结果中的行:
打印(行)
输出结果是一个列表。每个项目都包含一个文本框、文本和识别置信度:
[[[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文件。
! zoz100037](https://programming.vip/images/doc/f72a1d4aa41f4587acaa46a142a71c64.jpg)
pyuic自动生成接口代码
寻找 *。在pycharm的项目文件结构中右键ui文件-外部工具-pyuic,在ui文件同级目录下会自动生成ui界面的Python代码。
写接口业务类
业务类MainWindow实现程序逻辑和算法功能,与上面第2步生成的UI实现解耦,避免每次修改UI文件影响业务代码。 UI界面上的控件可以通过self_ui来访问。 xxxobjectname 访问。
类主窗口(QMainWindow):
适合_WINDOW、适合_WIDTH、手动_ZOOM u003d 0、1、2
定义__init__(自我):
super().__init__() # 调用父构造函数创建QWidget表单
self._ui u003d Ui_MainWindow() # 创建ui对象
self._ui.setupUi(self) # 构造 ui
self.setWindowTitle(__appname__)
加载默认配置
配置 u003d 获取_config()
自我。_config u003d 配置
单选按钮组
self.checkBtnGroup u003d 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)
实现接口业务逻辑
将信号槽连接到主界面上的按钮、列表和绘图控件。自定义槽函数不需要特别声明。如果是自定义信号,则需要在class__ init__()前面加上yourSignalu003dpyqtSignal(args)。
这里以按钮响应函数和列表响应函数为例。按钮点击的信号被点击,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)
1.运行看看效果
运行 Python main Py 以启动 GUI 程序。
打开图片→选择语言模式ch(中文)→选择文字检测+识别→点击开始,检测到的文字区域会自动加框显示在右侧识别结果-文字标签页的列表中。
所有检测到的文本区域的列表,在识别结果 - 区域选项卡页面上:
软件代码
由于时间有限,软件的详细功能有待进一步完善。代码已对 gitee 开源。欢迎有兴趣的朋友提交pull request,共同修改完善。
源码地址:https://gitee.com/signal926/ocr-gui-demo
零基础Python学习指南
于是博主花了三个月的时间收集整理,终于完成了这套完整的Python零基础学习资源,
如果您准备自学 Python 或正在学习,您应该能够使用:
-
1 Python全方位学习路线图,全方位明确学什么
-
2 100多个Python课程视频,涵盖基础基础、爬虫和数据分析
-
3 100多个Python实战案例,学习不再只是理论
-
4 华为出品独家Python卡通教程,可在手机上学习
-
5 多年来互联网企业Python面试真题非常方便复习
以上信息:访问地址在文末
1、Python全方位学习路线
Python的各个方向就是对Python常用的技术点进行梳理,形成各个领域知识点的总结。其目的是让你可以根据以上知识点找到对应的学习资源,保证你学得更全面。
2、Python课程视频
当我们看视频时,我们不能只动动我们的眼睛和大脑而没有双手。更科学的学习方法是了解后再使用。这时候手部训练项目就很适合了。
3、Python实战案例
光学理论是无用的。我们要学会敲门,练习,把所学的应用到练习中。这时候,我们可以做一些实际案例来学习。
4、Python卡通教程
用通俗易懂的漫画教你学Python,让你更容易记忆,不会枯燥。
5、互联网企业实战面试题
我们必须学习 Python 才能找到一份高薪工作。以下采访题为阿里巴巴、腾讯、字节跳动等一线互联网厂商的最新采访资料,阿里巴巴老板给出了权威答案。刷完这套面试资料,相信大家都能找到一份满意的工作。
扫描下方二维码添加
更多推荐
所有评论(0)