人生苦短,快学Python! 在之前的文章里,我们多次尝试用Python实现文本OCR识别! 今天我们要搞一个升级版:直接写一个图像文字识别OCR工具!引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作、生活中常常会用到,比如票据、漫画、扫描件、照片的文本提取。 博主基于PyQtlabelmePaddleOCR写了一个桌面端的OCR工具,用于快速实现图片中文本区域自动检测文本自动识别。 识别效果如下图所示:干货主要有: 200多本Python电子书(和经典的书籍)应该有 Python标准库资料(最全中文版) 项目源码(四五十个有趣且可靠的练手项目及源码) Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习) Python学习路线图(告别不入流的学习) 私信小编01即可获取大量Python学习资源 OCR工具识别效果 所有框选区域为OCR算法自动检测,右侧列表有每个框对应的文字内容;点击右侧识别结果中的文本记录,然后点击复制到剪贴板即可复制该文本内容。功能列表文本区域检测文字识别文本区域可视化文字内容列表图像、文件夹加载图像滚轮缩放查看绘制区域、编辑区域复制所选文本识别结果OCR部分 图像文字检测文字识别算法,主要借助paddleocr实现。 创建或者选择一个虚拟环境,安装需要用到的第三方库。condacreatenocrcondaactivateocr安装框架 如果你没有NVIDIAGPU,或GPU不支持CUDA,可以安装CPU版本:CPU版本pipinstallpaddlepaddle2。1。0ihttps:mirror。baidu。compypisimple 如果你的GPU安装过CUDA9或CUDA10,cuDNN7。6,可以选择下面这个GPU版本:GPU版本python3mpipinstallpaddlepaddlegpu2。1。0ihttps:mirror。baidu。compypisimple安装PaddleOCR 安装paddleocr:pipinstallpaddleocr2。0。1推荐使用2。0。1版本 版面分析,需要安装LayoutParser:pip3installUhttps:paddleocr。bj。bcebos。comwhllayoutparser0。0。0py3noneany。whl测试安装是否成功 安装完成后,测试一张图片imagedir。imgs11。jpg,采用中英文检测方向分类器识别全流程:paddleocrimagedir。imgs11。jpguseangleclstrueusegpufalse 输出一个list: 在python中调用frompaddleocrimportPaddleOCR,drawocrPaddleocr目前支持的多语言语种可以通过修改lang参数进行切换例如ch,en,fr,german,korean,japanocrPaddleOCR(useangleclsTrue,langch)needtorunonlyoncetodownloadandloadmodelintomemoryimgpath。imgs11。jpgresultocr。ocr(imgpath,clsTrue)forlineinresult: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实现,其中pyqtGUI程序开发入门和环境配置,详见一篇博客(具体见文末)。 主要步骤:界面布局设计 在QtDesigner中拖拽控件,完成程序界面布局,并保存。ui文件。 利用pyuic自动生成界面代码 在pycharm的项目文件结构中找到。ui文件,右键ExternalToolspyuic,会在ui文件同级目录下自动生成界面ui的Python代码。 编写界面业务类 业务类MainWindow实现程序逻辑和算法功能,与前面第2步生成的ui实现解耦,避免每次修改ui文件会影响业务代码。ui界面上的控件可以通过self。ui。xxxObjectName访问。classMainWindow(QMainWindow):FITWINDOW,FITWIDTH,MANUALZOOM0,1,2definit(self):super()。init()调用父类构造函数,创建QWidget窗体self。uiUiMainWindow()创建ui对象self。ui。setupUi(self)构造uiself。setWindowTitle(appname)加载默认配置configgetconfig()self。configconfig单选按钮组self。checkBtnGroupQButtonGroup(self)self。checkBtnGroup。addButton(self。ui。checkBoxocr)self。checkBtnGroup。addButton(self。ui。checkBoxdet)self。checkBtnGroup。addButton(self。ui。checkBoxrecog)self。checkBtnGroup。addButton(self。ui。checkBoxlayoutparser)self。checkBtnGroup。setExclusive(True)实现界面业务逻辑 对主界面上的按钮、列表、绘图控件进行信号槽连接。自定义的槽函数不用专门声明,如果是自定义的信号,需要在类init()前加上yourSignalpyqtSignal(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。运行看看效果 运行pythonmain。py即可启动GUI程序。 打开图片选择语言模型ch(中文)选择文本检测识别点击开始,检测完的文本区域会自动画框,并在右侧识别结果文本Tab页的列表中显示。 所有检测出文本的区域列表,在识别结果区域Tab页: 软件代码 由于时间有限,软件细节功能还需进一步完善。代码已开源到gitee上,欢迎感兴趣的朋友提pullrequest,共同修改完善。 代码开源地址:https:gitee。comsignal926ocrguidemo