首页 > 其他分享 >PaddleOCR+OpenCV实现文字识别步骤

PaddleOCR+OpenCV实现文字识别步骤

时间:2023-05-21 21:07:42浏览次数:27  
标签:ch PaddleOCR OpenCV 步骤 import model 识别 cls

本期将介绍并演示PaddleOCR+Python+OpenCV实现车牌识别、身份证信息识别和车票信息识别的步骤与效果。

介绍

百度深度学习框架PaddlePaddle开源的OCR项目PaddleOCR近期霸榜github。使用测试后发现识别效果很好,对于简单的应用(车票车牌身份证等),直接用项目提供的模型即可使用。特殊应用,可自己训练后使用。

gituhub地址:https://github.com/PaddlePaddle/PaddleOCR

PaddleOCR+OpenCV实现文字识别步骤_github

效果展示

分别以车牌识别、身份证信息识别和车票信息识别为例,测试效果如下视频:

PaddleOCR+OpenCV实现文字识别步骤_github_02

实现步骤

PaddleOCR是基于百度的深度学习框架PaddlePaddle实现的,所以第一步我们需要先安装PaddlePaddle模块。直接使用pip安装即可:

——指令:pip install paddlepaddle

 

第二步:安装PaddleOCR。同样是pip安装:

——GPU版安装:

python -m pip install paddlepaddle-gpu==2.0.0 -i https://mirror.baidu.com/pypi/simple

——CPU版安装:

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

如果要在GPU模式下使用除了有GPU外还需要安装CUDA 10.1和CUDNN对应文件,另外遇到的安装问题网上也可以找到答案,我的安装步骤到此结束。

代码演示

代码演示前需要先下载PaddleOCR提供的训练好的模型共3个,我是Win10 PC端使用下载下面三个,如果是移动端下载上面三个。

PaddleOCR+OpenCV实现文字识别步骤_github_03

 

github提供的Demo如下将会保存一张识别结果图:

from paddleocr import PaddleOCR
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from paddleocr import PaddleOCR, draw_ocr
font=cv2.FONT_HERSHEY_SIMPLEX

# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch",use_gpu=False,
                rec_model_dir='./models/ch_ppocr_server_v2.0_rec_infer/',
                cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',
                det_model_dir='./models/ch_ppocr_server_v2.0_det_infer/') # need to run only once to download and load model into memory


img_path = './imgs/B.jpg'
result = ocr.ocr(img_path, cls=True)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')
im_show = Image.fromarray(im_show)

im_show.save('result.png')

 识别输出信息:

PaddleOCR+OpenCV实现文字识别步骤_Image_04

输出结果图:

 

我们把输出结果部分改成OpenCV实现:

from paddleocr import PaddleOCR
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
font=cv2.FONT_HERSHEY_SIMPLEX

# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch",use_gpu=False,
                rec_model_dir='./models/ch_ppocr_server_v2.0_rec_infer/',
                cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',
                det_model_dir='./models/ch_ppocr_server_v2.0_det_infer/') # need to run only once to download and load model into memory


def putText_Chinese(img,strText,pos,color,fontSize):
    fontpath = "./simsun.ttc" # <== 这里是宋体路径 
    font = ImageFont.truetype(fontpath, fontSize)
    img_pil = Image.fromarray(img)
    draw = ImageDraw.Draw(img_pil)
    draw.text(pos,strText, font=font, fill=color)
    img = np.array(img_pil)
    return img

print('---------------PaddleOCR Start---------------------')
img_path = './pics/18.jpg'
img = cv2.imread(img_path)
cv2.imshow("src", img)
result = ocr.ocr(img_path, cls=True)
#print(result)
for line in result:
    print('----------------------------')
    print(line)
    pt1 = ((int)(line[0][0][0]),(int)(line[0][0][1]))
    pt2 = ((int)(line[0][1][0]),(int)(line[0][1][1]))
    pt3 = ((int)(line[0][2][0]),(int)(line[0][2][1]))
    pt4 = ((int)(line[0][3][0]),(int)(line[0][3][1]))
    cv2.line(img,pt1,pt2,(0,0,255),1,cv2.LINE_AA)
    cv2.line(img,pt2,pt3,(0,0,255),1,cv2.LINE_AA)
    cv2.line(img,pt3,pt4,(0,0,255),1,cv2.LINE_AA)
    cv2.line(img,pt1,pt4,(0,0,255),1,cv2.LINE_AA)
   
    img = putText_Chinese(img,line[1][0],(pt1[0],pt1[1]-35),(255,0,255),50)
   
cv2.imshow("OCR-Result", img)
cv2.imwrite("result.png", img)
cv2.waitKey()
cv2.destroyAllWindows()

 输出结果图:

倾斜也可以自动识别:

车票识别:

PaddleOCR+OpenCV实现文字识别步骤_paddle_05

 



标签:ch,PaddleOCR,OpenCV,步骤,import,model,识别,cls
From: https://blog.51cto.com/u_2820398/6320182

相关文章

  • 数据梳理项目的几个步骤
    数据梳理项目通常包括以下几个步骤:数据收集:收集项目涉及的各种数据源,了解数据的来源、格式和内容。数据审查:对收集到的数据进行审查,识别数据质量问题,如缺失值、异常值、不一致性等。数据清洗:根据审查结果,对数据进行清洗,纠正错误、填补缺失值、消除重复等,以提高数据质量。......
  • [Linux]香橙派orangepi下ubuntu SSH安装步骤详解
    Linux下SSH安装步骤详解(linux中ssh安装)SSH(SecureShell)是一种加密的工具,可以安全地在网上进行数据交换,是远程安全服务器登录等功能建立在现有网络环境中的一种基本安全协议。本文介绍在Linux系统中安装SSH的方法,以Ubuntu18.04为例。一、安装openssh-server我们首先要安装openss......
  • 2023新手小白注册谷歌Gmail账号此号码无法用于验证的解决方法,谷歌账号注册详细步骤!
    网友在注册谷歌账号时都会遇到提示”此号码无法用于进行验证“导致注册失败。具体原因是什么?又该如何进行注册?需要解决哪些问题?首先,必须要只知道的是网络很多网友传言中国手机无法申请注册谷歌Gmail邮箱,这完全是子虚乌有的事情。除了Googlevoice虚拟号码以外的任何手机号都能注册......
  • pbootcms对接微信扫码登录代码核心片段和步骤(前后端)
    首先需要在微信公众平台或开放平台中创建应用,并获取到AppID和AppSecret。在pbootcms中创建一个自定义模板页面(例如:wechat_login.html),并在该页面中添加以下代码,用于生成微信扫码登录的二维码:<!--引入jquery库--><scriptsrc="https://cdn.bootcss.com/jquery/3.5.1/jque......
  • 如何通过三个步骤彻底擦除iPhone中的数据
    https://zh-cn.aiseesoft.com/erase-iphone/how-to-erase-data-on-iphone-securely.html 在出售或赠送用过的iPhone之前,您必须以安全的方式彻底擦除iPhone上的所有数据,以保护您的隐私。您可以简单地从手机上的iPhone中删除数据或恢复计算机上的默认设置。使用方便,但......
  • 性能测试-JMeter分布式测试及其详细步骤
    性能测试概要性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。性能测试种类非常多,有些概念也很相近:LoadTestingBaselineTestingSmok......
  • 多图详解:不停机分库分表五个步骤
    1理论知识1.1分库分表是否必要分库分表确实可以解决单表数据量大这个问题,但是并非首选。因为分库分表至少引入了三个必须解决的突出问题。第一是分库分表方案本身具有的复杂性。第二是本地事务失效问题,原本在同一个数据库中可以保证强一致性业务逻辑,分库之后事务失效。第三是......
  • 接口自动化 参数化实现步骤
    我们在写接口用例的时候可能同个case,会有不同等价类的传参,传统的固定传参,我们需要同个case写好多遍,但仅仅是传参不一样所以很冗杂。通过参数化我们可实现测试数据与testcase的分离,简化代码量。首先参数化用到的包是parameterized包fromparameterizedimportparameterized......
  • EF Core 主从表修改主键类型步骤
    1.背景有两张表Blog与PostclassDiagramclassBlog{+GuidId+StringName+DateTimeCreateTime+intOrder+List<Post>Posts}classPost{+StringId+StringContent+GuidBlogId+BlogBlog}......
  • Linux中jdk11、tomcat10、防火墙的设置、MySQL、的安装步骤
    一般在Linux系统上安装软件步骤:1.上传  2.解压 3.配置环境 4.刷新配置 5.检查       jdk11    tomcat10 设置防火墙mysql ......