人生苦短,学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 才能找到一份高薪工作。以下采访题为阿里巴巴、腾讯、字节跳动等一线互联网厂商的最新采访资料,阿里巴巴老板给出了权威答案。刷完这套面试资料,相信大家都能找到一份满意的工作。

扫描下方二维码添加

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐