当前位置:网站首页>PaddleOCR 图片文字提取
PaddleOCR 图片文字提取
2022-04-23 06:10:00 【林-金鹏】
PaddleOCR 图片文字提取
需求
工作上的一个需求,需要把图片中的车牌号码提取出来。如图,车牌在图片固定位置。开始使用pytesseract,对中文识别特别不友好,毕竟是外国人的东西。同事推荐使用PaddleOCR,国人开发的东西就是不一样,识别正确率居然可以达到90%以上。不过两者都存在共性问题,黑底白字无法识别/范围太小识别不准等。

一.裁剪车牌号码区域
# np.fromfil 从文本或二进制文件中的数据构造一个数组
# cv2.imdecode()把读取的数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像
# cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,可以直接写-1
img = cv2.imdecode(np.fromfile(imgSrc, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
cropImg = img[y1:y2, x1:x2] #顺序为上下 左右


于是百度找了张图,刚好是白底黑字 文字居中,结果神奇地识别结果100%识别正确。经过对比,我断定是白色字体无法识别,接着又把小图进行反相处理。
二.对车牌小图进行处理
height, width, deep = cropImg.shape
gray = cv2.cvtColor(cropImg, cv2.COLOR_BGR2GRAY) # cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
dst = np.zeros((height, width, 1), np.uint8) #生成一张纯黑色图
for i in range(0, height): # 反相 转白底黑字
for j in range(0, width):
grayPixel = gray[i, j]
dst[i, j] = 255 - grayPixel
#走完这一步,已经实现了 转白底黑字,但是白色低背景不是最亮的
#再用cv2.threshold进行二值化,使黑色部分更黑,白的更白
ret, img = cv2.threshold(dst, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
对小图进行反相处理后的结果就是下面这样,仔细看发现白色底不是很白,再用cv.threshold进行二值化(非黑既白),通对比二值化的图片,层次感就出来了。


再次进行识别,识别结果终于出来了,但是发现最后一位7被识别成了2,按道理来说这么简单的文字不应该识别错。于是想到前面用来测试识别的图片边界很宽,文字居中,接着对小图进行了填充白底边界150个像素。
三.填充边界
# cv2.BORDER_CONSTANT 固定值填充方式
imgsrc = cv2.copyMakeBorder(img, 150, 150, 150, 150, cv2.BORDER_CONSTANT, value=[255, 255, 255])

四.识别步骤
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False) # 使用CPU预加载,不用GPU
text = ocr.ocr(img, cls=True)
result = str(text[0][1][0]).replace('车牌号码:', '').upper()


版权声明
本文为[林-金鹏]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46105038/article/details/124323135
边栏推荐
- Apprentissage par composantes
- Miscellaneous learning
- Binder mechanism principle
- sys.dbms_scheduler.create_job创建定时任务(功能更强大丰富)
- 杂七杂八的学习
- 组件化学习(3)ARouter中的Path和Group注解
- 常用UI控件简写名
- AVD Pixel_2_API_24 is already running.If that is not the case, delete the files at C:\Users\admi
- this. getOptions is not a function
- oracle数据库将多个列的查询结果集合并到一行中
猜你喜欢

从0开始封装一套项目的网络请求框架
![[2021 book recommendation] red hat rhcsa 8 cert Guide: ex200](/img/5a/387baa0f59e5a8a502bb157184d968.png)
[2021 book recommendation] red hat rhcsa 8 cert Guide: ex200

Component learning (2) arouter principle learning

Oracle Job定时任务的使用详解

Android面试计网面经大全【持续更新中。。。】

AVD Pixel_2_API_24 is already running.If that is not the case, delete the files at C:\Users\admi

Itop4412 HDMI display (4.4.4_r1)

What did you do during the internship

oracle表的约束详解

Itop4412 LCD backlight drive (PWM)
随机推荐
Cause: dx. jar is missing
Project, how to package
sys.dbms_scheduler.create_job创建定时任务(功能更强大丰富)
MySQL notes 2_ data sheet
組件化學習
同时解决高度塌陷和外边距重叠问题
常用UI控件简写名
oracle杀死正在执行的sql
iTOP4412 HDMI显示(4.0.3_r1)
HandlerThread原理和实际应用
第三篇:docker安装mysql容器(自定义端口)
[recommendation of new books in 2021] practical IOT hacking
MySQL notes 1_ database
What did you do during the internship
【2021年新书推荐】Practical Node-RED Programming
实习做了啥
oracle分区的相关操作
WebRTC ICE candidate里面的raddr和rport表示什么?
webView因证书问题显示一片空白
WebView displays a blank due to a certificate problem