PaddleOCR使用

最近在项目过程中需要用到文字识别的能力,之前没有接触过。需要对现有的开源能力进行调研和学习。

1. 基本概念

1.1 PaddlePaddle

PaddlePaddle 是一个由百度开源,基于 Python 的深度学习框架。PaddlePaddle 针对不同的硬件环境提供了不同的安装包或安装方式:可以使用 CPU 也可以 GPU,GPU 支持的硬件包含 CUDA 和 ROCm 4.0。但 ROCm 目前只能在 Linux 系统中使用。具体可以参考 paddlepaddle官方文档。
在这里插入图片描述

1.2 PaddleHub

PaddleHub是基于PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。下面是 PaddlePadd 在 github 上的介绍摘录。

【模型种类丰富】: 涵盖大模型、CV、NLP、Audio、Video、工业应用主流六大品类的 400+ 预训练模型,全部开源下载,离线可运行
【超低使用门槛】:无需深度学习背景、无需数据与训练过程,可快速使用AI模型
【一键模型快速预测】:通过一行命令行或者极简的Python API实现模型调用,可快速体验模型效果
【一键模型转服务化】:一行命令,搭建深度学习模型API服务化部署能力
【跨平台兼容性】:可运行于Linux、Windows、MacOS等多种操作系统

1.3 PaddleOCR

PaddleOCR,也叫pp-ocr,是 PaddlePaddle 框架下的 OCR 库,支持多种语言的文本识别。

2. 安装步骤

2.1 安装 PaddlePaddle

# 默认安装CPU版本,安装paddle时建议使用百度源
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

2.2 安装 PaddleHub

# 在命令行中输入以下命令
pip install paddlehub -i https://mirror.baidu.com/pypi/simple

2.3 安装 PP-OCR(PaddleOCR)

hub install ch_pp-ocrv3

3. 使用 PaddleOCR

3.1 命令行方式进行识别

hub run ch_pp-ocrv3 --input_path "/PATH/TO/IMAGE"

3.2 用 Python 代码进行识别

import paddlehub as hub
import cv2ocr = hub.Module(name="ch_pp-ocrv3", enable_mkldnn=True) # mkldnn加速仅在CPU下有效
result = ocr.recognize_text(images=[cv2.imread('/PATH/TO/IMAGE')])

3.2.1 CV2 安装

实际上,”cv2”中的 ”2” 并不表示 OpenCV 的版本号。我们知道,OpenCV 是基于 C/C++的,”cv”和”cv2”表示底层使用的是 C 语言 API 还是 C++ API,”cv2”表示使用的是 C++ API。这主要是一个历史遗留问题,是为了保持向后兼容性。另外:“cv2” 的安装模块名为 opencv-python

这里的 cv2 需要另外安装

pip install opencv-python

如果安装时出现如下报错

ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)
ERROR: No matching distribution found for cv2

检查 pip 是否最新,如果不是最新的则对 pip 进行升级,并指定下载源安装。

python -m pip install --upgrade pip # 如果是python3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

3.2.2 API

API 的出入参数在官方文档中有写到,这里就不再展开。

3.3 PaddleHub Serving

PaddleHub 可以将 OCR 部署一个在线服务,命令如下。

hub serving start -m ch_pp-ocrv3

在执行完命令之后会有提示,告知服务的地址和端口号,默认端口号是8866。在服务启动之后就可以通过 http 方式使用 OCR 了。这种在线服务的方式让其他编程语言可以方便的使用 PaddleOCR。

3.3.1 在线服务验证代码

import requests
import json
import cv2
import base64def cv2_to_base64(image):data = cv2.imencode('.jpg', image)[1]return base64.b64encode(data.tostring()).decode('utf8')# 发送HTTP请求
data = {'images':[cv2_to_base64(cv2.imread("/PATH/TO/IMAGE"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/ch_pp-ocrv3"
r = requests.post(url=url, headers=headers, data=json.dumps(data))# 打印预测结果
print(r.json()["results"])

3.3.2 在线服务性能

由于是在本机做测试,所以用 python 直接调用 PaddleOCR 还是通过 http 调用 PaddleHub Serving,性能上没有明显的差异。

3.3.3 Gradio App

官方文档中提到 “从 PaddleHub 2.3.1 开始支持在浏览器中访问 ch_pp-ocrv3 的 Gradio App”,但我在访问 URL 的时候服务端报错。粗略查了一下可能是由于我的环境是 Windows,这个问题不影响整体,所以暂时不深究。

4. 测试结果

4.1 识别率

PaddleOCR 的识别率还是比较高的,对于非手写的字体基本识别率达到 95% 以上,由于没有特别测试比较复杂的字,所以这个数字是我的主观判断。对于比较刁钻的测试,PaddleOCR 的识别率就比较低了,如故意把 Il 混在一起(如 IlIlIlIl)基本无法识别(当然这只是为了测试而创造的,正常情况下不会出现,因为人也无法识别)。

4.2 性能

对于普通的图片,识别性能基本在秒级别,识别消息根据图片中的内容存在较大差异,越复杂越慢。对同一张图片多次识别时只需要花费原本 20% 的时间,猜测是有类似缓存的机制。

4.3 使用难度

整体安装上没有太大难度,跟着官方文档一步步安装就可以了。唯一的难度是需要用 python 来调用,但是官方也提供了 hub serving,其他语言可以通过 http 进行调用。

参考资料

PaddleOCR的使用
开始使用
零基础windows安装并实现图像风格迁移
python安装cv2库 python3.8安装cv2
Python3 安装cv2 / OpenCV安装

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

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

相关文章

小丑的身份证和复印件 (BFS + Floyd)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 2 10 (JOKERjoke #####asdr) 输出 12 思路: 根据题意,要求最短时间,实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法&…

第07-6章 应用层详解

HTTP、SSL:基于TCP,HTTP端口:80、HTTPS(加密)端口:443;FTP:基于TCP,两类端口:21、20(数据传输之前需要建立连接此时是21,真正传输数据时用20)TFTP…

07 常用工具集

本课时主要介绍常用的工具,将会讲解三个知识点: JVM 相关工具的作用和适用场景; Git 常用命令和工作流; Linux 系统中常用分析工具。 常用工具汇总 常用工具汇总如下图所示。 说明:这里列出的都是一些相对独立的工…

若依集成mybatis-plus 超详细教程(亲测可用)

文章目录 简介步骤第一步第二步第三步第四步第五步第六步 使用QueryWrapperservice层impl 实现接口类层Mapper层 简介 话不多说 直接跟着下面的教程操作,如果有报错私信我,或者通过博文下面的微信名片加我微信,免费解答哦! 步骤 …

jsp 实验16 MVC 表白墙

源代码以及执行结果截图&#xff1a; ExpressWish_Bean.java package web; import java.util.HashMap; import java.util.ArrayList; import java.util.Iterator; public class ExpressWish_Bean { public HashMap<String,ExpressWish> wishList; ArrayList&…

基于Springboot的线上教学平台

基于SpringbootVue的线上教学平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 学习资料 交流论坛 试卷列表 公告信息 后台登录 后台首页 学员管理 资料类型…

【递归、回溯和剪枝】二叉树中的深搜

⼆叉树中的深搜深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀&#xff0c;直到⼀条路径上的所有节点都被遍历完毕&#xff0c;然后…

投票系统怎么做?最新网页投票系统搭建源码+详细图文搭建部署教程 一键创建投票活动

在数字化快速发展的今天&#xff0c;投票活动已经成为我们生活中不可或缺的一部分。无论是企业内部的决策、公众的意见收集&#xff0c;还是各类活动的评选&#xff0c;都离不开高效、便捷的投票系统。分享一个投票系统搭建源码系统&#xff0c;最新网页投票系统搭建源码&#…

为什么说TailwindCSS是2024 年前端最优的 CSS 框架?

如果有一本圣经&#xff0c;大家都按照圣经的标准写网页&#xff0c;那世界将更加的标准化和美好。这本圣经就是TailwindCSS。 什么是 Tailwind CSS&#xff1f; Tailwind CSS 是一个流行的 CSS 框架&#xff0c;旨在帮助开发者快速构建现代化的、响应式的 Web 界面。与其他 …

2024付费进群系统,源码及搭建变现视频课程(教程+源码)

前三节讲解搭建支付对接&#xff0c;后两节讲解一些引流变现的方法&#xff0c;还有一种变现就是帮人搭建这样的平台&#xff0c;因为全网都没有一套完整的视频教怎么搭建的&#xff0c;有也只是文字教程&#xff0c;一般新人根本看不懂&#xff0c;我视频实操演示&#xff0c;…

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面 这里写目录标题 Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面一、tkinter模块和类的简述1.1 tkinter的简要介绍1.2 类结构的简要介绍 二、基于类机构和t…

ES:聚合查询语法

基础查询结构&#xff1a; GET http://ip:prot/textbook/_search { "query" : { ...query子句... }, "aggs" : { "agg_name":{ "agg_type": { "agg_arg": agg_arg_value } } }, "sort" : { ..sor…