windows系统搭建OCR半自动标注工具PaddleOCR

深度学习


文章目录

  • 深度学习
  • 前言
  • 一、环境搭建准备
    • 方式1:安装Anaconda搭建
      • 1. Anaconda下载地址: [点击](https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D)
      • 2. 创建新的conda环境
    • 方式2. 直接安装python
  • 二、安装CPU版本
    • 1. 安装PaddlePaddle
    • 2、安装PaddleOCR whl包
      • 提示:
    • 验证安装
    • 如何卸载
  • 三、安装和运行标注工具PPOCRLabel
    • 1. 获取源代码
    • 2. 安装运行
    • 3. 使用PPOCRLabel
  • 问题汇总


前言

PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。

一、环境搭建准备

Windows和Mac用户推荐使用Anaconda搭建Python环境,Linux用户建议使用docker搭建Python环境。
已搭建过查看环境:
确认python的版本是否满足要求:python --version
确认 pip 的版本是否满足要求:python -m ensurepip
同时查看:python -m pip --version
注:pip 版本为 20.2.2 或更高版本

方式1:安装Anaconda搭建

python集成环境Anaconda工具包,安装完Anaconda后,可以安装python环境,以及numpy等所需的工具包环境

1. Anaconda下载地址: 点击

默认安装位置为C盘,建议将安装位置更改到D盘,勾选conda加入环境变量,忽略警告,
安装完成后,打开终端并创建conda环境:左下角Windows Start Menu -> Anaconda3 -> Anaconda Prompt启动控制台:

2. 创建新的conda环境

在命令行输入以下命令(此处为加速下载,使用清华源)

conda create --name paddle_env python=3.10 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

该命令会创建1个名为paddle_env、python版本为3.10的可执行环境,根据网络状态,需要花费一段时间。

方式2. 直接安装python

python下载地址:https://www.python.org/downloads/

点击Download后进入版本界面,根据系统选择合适的版本,

windows installer:exe可执行文件,安装比较方便。(windows下可执行文件一般是exe,msi等);

windows embeddable package:

注:安装Python尽量选择最新版本的上一版本,本人使用最新版各种出错,无奈卸载重新下载另一版本才成功。

安装Python时记得勾选Add Python To Path。

安装完成进入Windows终端测试Python是否安装成功:若出现"不是内部或外部命令,也不是可运行的程序", 请及时检查环境变量中是否存在 python安装的路径。
手动添加环境变量:右键【此电脑】属性–高级系统设置----高级–环境变量

二、安装CPU版本

1. 安装PaddlePaddle

执行以下命令(速度快):

python -m pip install paddlepaddle==2.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

或者

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

速度慢:

python3 -m pip install paddlepaddle==2.6.0 -i https://mirror.baidu.com/pypi/simple

如果提示升级pip,执行以下命令(三选一):

python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

注:请确认需要安装 PaddlePaddle 的 Python 是您预期的位置,因为您计算机可能有多个 Python。根据您的环境您可能需要将说明中所有命令行中的 python 替换为具体的 Python 路径。

2、安装PaddleOCR whl包

执行以下命令:推荐使用2.6.0以上版本(最新版是2.7,所以我写的是大于版本2.6.0)

pip install "paddleocr>=2.6.0"

对于Windows环境用户:直接通过pip安装的shapely库可能出现“找不到指定模块”的问题。建议下载shapely安装包完成安装。
1.下载安装whl以及确定Python适配版本(请自行搜索)
2.将 wheel 包下载到本地:

python -m pip download paddlepaddle==2.6.0 -f https://www.paddlepaddle.org.cn/whl/windows/openblas/avx/stable.html --no-index --no-deps

3.再本地安装:

python -m pip install [name].whl    #([name]为 wheel 包名称)

提示:

如果同时使用whl包安装了paddleocr,其优先级大于通过paddleocr.py调用PaddleOCR类,whl包未更新时会导致程序异常。
如果出现 module ‘cv2’ has no attribute 'INTER_NEAREST’错误,需要首先删除所有opencv相关包,然后重新安装4.2.0.32版本的headless opencv:pip install opencv-contrib-python-headless==4.2.0.32。

验证安装

需要先在终端里打开python,在Python在运行

import paddle
paddle.utils.run_check()

如果出现PaddlePaddle is installed successfully!,即成功。
注:需要先在终端里运行python,然后再输入运行。

如何卸载

python -m pip uninstall paddlepaddle

三、安装和运行标注工具PPOCRLabel

1. 获取源代码

PaddleOCR2.7版本:https://github.com/PaddlePaddle/PaddleOCR
在PaddleOCR2.7文件夹下打开终端运行:

pip3 install -r requirements.txt    #安装第三方依赖库

2. 安装运行

(1) 方法1:终端运行(通过whl包安装与运行)

pip install PPOCRLabel # 安装

在PaddleOCR2.7文件夹下打开终端运行

PPOCRLabel --lang ch # 启动【普通模式】,用于打【检测+识别】场景的标签
PPOCRLabel --lang ch --kie True # 启动 【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签。

注:如若出现了类似反馈, ppocr WARNING: When args.layout is false, args.ocr is automatically set to false,可以忽略,能正常使用。

此后会弹出PPOCRLabel窗口。

注:通过whl包安装PPOCRLabel会自动下载paddleocr whl包,其中shapely依赖可能会出现找不到指定模块的问题。建议从https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely下载shapely安装包完成安装。

3. 使用PPOCRLabel

1、打开文件夹:在菜单栏点击 “文件”–"打开目录"选择待标记图片的文件夹。只能选择文件夹,不能选择单个文件。
2、自动标注:点击“自动标注”,使用PP-OCR超轻量模型对图片文件名前图片状态为“X” 的图片进行自动标注。
3、手动标注:点击“矩形标注”(推荐直接在英文模式下点击键盘中的“W”),用户可对当前图片中模型未检出的部分进行手动绘制标记框。点击键盘Q,则使用多点标注模式,用户依次点击4个点后,双击左键表示标注完成。
4、注:在使用矩形标注时如果经常性闪退,建议使用多点标注,结合实际更换方法。
标记框绘制完成后,用户点击“确认”,检测框会先被预分配一个“待识别”标签,可以在框选的文字右键–重识别此区块。“待识别”内容就会更新。
5、重新识别:将图片中的所有检测画绘制/调整完成后,点击“重新识别”,PP-OCR模型会对当前图片中的所有检测框重新识别。
6、内容更改:单击识别结果,对不准确的识别结果进行手动更改。
7、确认标记:点击 “确认”,图片状态切换为“√,跳转至下一张。
8、删除:点击“删除图像”,图片将会被删除至回收站。
9、导出结果:用户可以通过菜单中“文件-导出标记结果”手动导出,同时也可以点击“文件-自动导出标记结果”开启自动导出。自动导出:点击“文件 - 自动导出标记结果”后,用户每确认过一张图片,程序自动将标记结果写入Label.txt中。若未开启此选项,则检测到用户手动确认过5张图片后进行自动导出。默认情况下自动导出功能为关闭状态。
10、手动确认过的标记将会被存放在所打开图片文件夹下的Label.txt中。在菜单栏点击 “文件”–"导出识别结果"后,会将此类图片的识别训练数据保存在crop_img文件夹下,识别标签保存在rec_gt.txt中。

Label.txt:检测标签,可直接用于PPOCR检测模型训练。用户每确认5张检测结果后,程序会进行自动写入。当用户关闭应用程序或切换文件路径后同样会进行写入。
fileState.txt:图片状态标记文件,保存当前文件夹下已经被用户手动确认过的图片名称。
Cache.cach:缓存文件,保存模型自动识别的结果。
rec_gt.txt:识别标签。可直接用于PPOCR识别模型训练。需用户手动点击菜单栏文件–导出识别结果后产生。
crop_img:识别数据。按照检测框切割后的图片。与rec_gt.txt同时产生。

注:PPOCRLabel不支持对纯中文文件名的图片进行自动标注。

提示:修改识别结果时,文字如果出现突然不能输入中文,或者输入法不出现等,建议先对已标注进行保存,然后重置界面与保存地址,退出程序,再次运行即可正常(内容少的临时解决方法:复制粘贴文字进行修改)。

问题汇总

如果标注时打框就闪退,
修改以下文件
1、D:\Python310\Lib\site-packages\PPOCRLabel\libs\canvas.py(根据自己的Python安装位置找)中

p.drawRect(leftTop.x(), leftTop.y(), rectWidth, rectHeight
改为
p.drawRect(int(leftTop.x()), int(leftTop.y()), int(rectWidth), int(rectHeight))p.drawLine(self.prevPoint.x(), 0, self.prevPoint.x(), self.pixmap.height())
改为
p.drawLine(int(self.prevPoint.x()), 0, int(self.prevPoint.x()), self.pixmap.height())p.drawLine(0, self.prevPoint.y(), self.pixmap.width(), self.prevPoint.y())
改为
p.drawLine(0, int(self.prevPoint.y()), self.pixmap.width(), int(self.prevPoint.y()))

2、D:\Python310\Lib\site-packages\PPOCRLabel\PPOCRLabel.py 中

bar.setValue(bar.value() + bar.singleStep() * units)
改为
bar.setValue(int(bar.value() + bar.singleStep() * units))

建议:如果下载验证中途出现各种问题建议彻底删除相关所有软件再重新安装,本人使用中因为版本及软件卸载遗留的问题等出现了多种莫名的问题,无奈选择彻底卸载重装重来一遍就OK了!!
3、启动报错
添加环境变量
os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国省级人口结构数据集(2002-2022年)

01、数据简介 人口结构数据不仅反映了地域特色,更是预测地区未来发展趋势的重要工具。在这些数据中,总抚养比、少年儿童抚养比和老年人口抚养比是三大核心指标。 少儿抚养比0-14周岁人口数/15-64周岁人口数 老年抚养比65周岁及以上人口数/15-64周岁人…

leetcode每日一题(1702. 修改后的最大二进制字符串)

题目描述 题解 这道题贪心的思想,我们只需要尽可能多的把0变成1,而且进行操作1才能使其变大。观察发现以下几点: 不论原字符串有多少个0,最后都会剩余1个0。 假设原字符串只有一个0,不能进行任何操作,显然…

一招将vscode自动补全的双引号改为单引号

打开设置,搜索quote,在结果的HTML选项下找到自动完成,设置默认引号类型即可。 vscode版本:1.88.1, vscode更新日期:2024-4-10

利用Java代码调用Lua脚本改造分布式锁

4.8 利用Java代码调用Lua脚本改造分布式锁 lua脚本本身并不需要大家花费太多时间去研究,只需要知道如何调用,大致是什么意思即可,所以在笔记中并不会详细的去解释这些lua表达式的含义。 我们的RedisTemplate中,可以利用execute方…

共轭梯度法 Conjugate Gradient Method (线性及非线性)

1. 线性共轭梯度法 共轭梯度法(英语:Conjugate gradient method),是求解系数矩阵为对称正定矩阵的线性方程组的数值解的方法。 共轭梯度法是一个迭代方法,它适用于 1. 求解线性方程组, 2. 共轭梯度法也可…

学习基于pytorch的VGG图像分类 day5

注:本系列博客在于汇总CSDN的精华帖,类似自用笔记,不做学习交流,方便以后的复习回顾,博文中的引用都注明出处,并点赞收藏原博主. 目录 VGG的数据集处理 1.数据的分类 2.对数据集的处理 VGG的分类标签设置 …

2款Notepad++平替工具(实用、跨平台的文本编辑器)

前言 今天大姚给大家分享2款Notepad平替工具,实用、跨平台(支持Window/MacOS/Linux操作系统平台)的文本编辑器。 NotepadNext NotepadNext是一个跨平台的 Notepad 的重新实现。开发是使用 QtCreator 和 Microsft Visual C (msvc) 编译器完…

python输入某年某月某日判断这一天是这一年的第几天

如何使用python实现输入某年某月某日判断这一天是这一年的第几天 from datetime import datetime #引入日期类 def is_leap_year(year):"""判断是否为闰年"""return (year % 4 0 and year % 100 ! 0) or (year % 400 0)# 根据年份和月份返回当…

深度解析 Spark(进阶):架构、集群运行机理与核心组件详解

关联阅读博客文章:深度解析SPARK的基本概念 引言: Apache Spark作为一种快速、通用、可扩展的大数据处理引擎,在大数据领域中备受关注和应用。本文将深入探讨Spark的集群运行原理、核心组件、工作原理以及分布式计算模型,带领读者…

test4141

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

ES6: set和map数据结构以及使用场景

ES6:set和map数据结构 一、Set 数据结构:二、使用场景:使用Set 进行去重三、Map 数据结构四、使用场景:使用Map进行树型数据懒加载刷新五、Set和Map的区别六、Map、Set的实际使用场景 Set 和 Map 是 ES6 中引入的两种新的数据结构&#xff0c…

JavaScript中的Blob、Buffer、ArrayBuffer和TypedArray详解

文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕) 正文 摘要:本文详细介绍了JavaS…

Spring之IoC容器(持续更新版本...)

目录 IoC容器1. Bean概述1.1. Bean命名1.2. 实例化Bean 2. 依赖关系2.1. 依赖注入2.2. 自动装配 3. Bean的范围4. 定制Bean的特性4.1. 生命周期回调4.2. Lifecycle、SmartLifecycle 以及 LifecycleProcessor4.3. Aware接口 5. 容器拓展6. 容器启动过程7. 基于注解的容器配置7.1…

(UDP)其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

“System.Net.Sockets.SocketException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。这个异常表示端口已经被占用了,需要释放端口或者使用其他端口来建立连接。您可以…

vite+react+ts+scss 创建项目

npm create vitelatest输入项目名称选择react选择typescript swc WC 通过利用 Rust 编写的编译器,使用了更先进的优化技术,使得它在处理 TypeScript 代码时能够更快地进行转换和编译。特别是在大型项目中,SWC 相对于传统的 TypeScript 编译器…

springboot火车运输物资定额领用管理系统java

本系统设计的现状和趋势,从需求、结构、数据库等方面的设计到系统的实现,分别为管理员和库房部、财务部、用户、生产部的实现。论文的内容从系统的设计、描述、实现、分析、测试方面来表明开发的过程。本系统根据现实情况来选择一种可行的开发方案&#…

2023数据要素白皮书(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 【2023年数据资源入表白皮书】 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT解决方案&a…

STM32-看门狗

1、看门狗是什么:就是一个向下定时器,定时时间一到,就会触发一个向下的复位的中断,使单片机开始工作 2、作用:MCU微控制器构成的微型计算机系统中,由于微控制器的工作常常会受到来自外界电磁场的干 扰,造成…

MySQL进阶-合

目录 1.使用环境 2.条件判断 2.1.case when 2.2.if 3.窗口函数 3.1.排序函数 3.2.聚合函数 3.3.partiton by ​​​​​​​3.4.order by 4.排序窗口函数 5.聚合窗口函数 1.使用环境 数据库:MySQL 8.0.30 客户端:Navicat 15.0.12 MySQL进阶…

openjudge_2.5基本算法之搜索_166:The Castle

题目 166:The Castle 总时间限制: 1000ms 内存限制: 65536kB 描述 Figure 1 shows the map of a castle.Write a program that calculates how many rooms the castle hashow big the largest room is The castle is divided into m * n (m<50, n<50) square modules.…