实战 | 计算器/数码管OCR数字识别(附源码)
2023-04-18 15:03:08 时间
导读
本文主要介绍一个计算器显示数字识别的OCR实例,基于OpenCV和EasyOCR/PaddleOCR。
实例来源
实例来源于51Halcon论坛,对应的Halcon实现这里不做介绍,如下图,最终目的就是识别计算器显示数字内容。
初步思路:先提取显示区域ROI,然后使用EasyOCR或PaddleOCR直接识别。
实现步骤与演示
【1】通过HSV阈值筛选,分离液晶显示区域;
【2】轮廓筛选,精确定位出液晶显示区域;
【3】截取ROI后传给EasyOCR识别
【4】实现完整源码与注意事项
# -*- coding: cp936 -*-
import numpy as np
import cv2
import easyocr
font = cv2.FONT_HERSHEY_SIMPLEX
reader = easyocr.Reader(['en'])
img=cv2.imread("test.jpg")
hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_hsv = np.array([0,0,30])#颜色范围低阈值
upper_hsv = np.array([170,100,210])#颜色范围高阈值
mask = cv2.inRange(hsv_img,lower_hsv,upper_hsv)#根据颜色范围删选
mask = cv2.medianBlur(mask, 5)#中值滤波
cv2.imshow('mask', mask)
contours,hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
ROI = None
rect = (0,0,0,0)
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt)
if(w > 240 and w < 300 and h>60 and h < 100):
ROI = img[y-20:y+h+20,x-20:x+w+20].copy()
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
rect = (x, y, w, h)
break
cv2.imshow('e',img)
cv2.imshow('ROI',ROI)
cv2.imwrite('roi.jpg',ROI)
result = reader.readtext(ROI)
if len(result) > 0:
for i in range(0,len(result)):
print(result[i][1])
strText = result[i][1].replace(' ','')
cv2.putText(img,strText,(rect[0],rect[1]),0,1.5,(0,0,255),3)
cv2.imshow('result',img)
cv2.imwrite('res.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意事项:
1、截取ROI时并没有按照ROI原始大小截取,而是将ROI四周扩大20pixel,这样可以提高识别准确率!
ROI = img[y-20:y+h+20,x-20:x+w+20].copy()
ROI原始大小的识别结果:
ROI扩大后的识别结果:
2、截取ROI之后也可使用PaddleOCR方法识别,识别效果如下:
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击