基于深度学习OpenCV与python进行字符识别

小白学视觉

共 2947字,需浏览 6分钟

 ·

2020-09-18 05:02

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

当我们在处理图像数据集时,总是会想有没有什么办法以简单的文本格式检索图像中的这些字符呢?
今天我们就一起看看有没有什么简单的办法可以实现这一功能~
对于字符识别,我们找到了一些在线工具可以使用,他们将获取用户的输入并提供输出信息。

字符识别:

字符识别程序有助于准确的从文本中识别出每个文本元素。

通过应用深度学习算法,可以准确的识别图像中字符或文本元素的并对其进行分类。这些字符一般有很大区别。

当我们使用普通技术来识别字符时,可能会在特定点上出现一些错误。如果我们使用基于深度学习的OpenCV算法将给出有效的输出。

对于运行模型的必须安装由Google作为光学字符识别引擎开发的tesseract。

pip install pytesseract

OpenCV:

OpenCV是一种一项基本技术,我们主要利用他来消除的噪声以便进一步执行数据操作。

Open CV是深度学习技术领域中使用最广泛的算法。

它极大地依赖于受过训练的数据,并有助于识别图像中存在的文本。开放式简历使算法丢失的准确性变成一幅图画。灰度等级在字符识别领域提供了有效的分类。因此,我们特此导入所有必要的软件包,以使我们的模型可以正常使用。

为了在您的本地计算机上安装OpenCV,请使用以下命令...

pip install opencv-python

图像可以直接读取到代码中吗?

• 让我们讨论影响识别字符的因素:

• 图像中的噪声会导致许多错误识别字符的因素。为了确保无噪音,我们在代码中消除了识别。

• 当图像不是高分辨率时,识别将失败。因此,为了获得准确的结果,最好拍摄高分辨率的图像。

• 有时图像的角度也会出现缺陷。

• 在假定文本时,图像的反射会导致错误。如此多的字母“ F”被识别为“ P”。

• 如果代码无法训练字体,字体也会改变结果。

• 各种图像具有本领域的各种表示风格,因此,当存在更多肤色或多种颜色时,会对图像中的识别文本做出不正确的假设。

考虑到以上所有因素,必须在所有测试用例通过的地方相应地构建代码。

使用OpenCV识别字符的Python代码:

导入所有软件包:
#import all the packagesimport cv2import numpy as npimport pytesseractfrom PIL import Image
使用软件包安装后,将其导入代码。
声明或初始化路径:
tesseract是一种开源工具,可以从网上下载。下载后,请提及其路径,如下所示。
# path of pytesseract execution folder pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe'# Path of imagemain_path = r'qu12.png'
主要方法:
在这部分代码中,我们正在实现
• 读取图像
• 灰度图像
• 进行膨胀和腐蚀以消除图像中不需要的噪声。
• 去除噪点后写图像。
• 应用阈值以获取唯一的黑白图片。
• 写入相同的图像以进行进一步的识别过程。
• 使用Tesseract进行字符识别。
def get_string(pic_path):   # Reading picture with opencv   pic = cv2.imread(pic_path)# grey-scale the picture   pic = cv2.cvtColor(pic, cv2.COLOR_BGR2GRAY)# Do dilation and erosion to eliminate unwanted noises   kernel = np.ones((1, 1), np.uint8)   pic = cv2.dilate(pic, kernel, iterations=20)   pic = cv2.erode(pic, kernel, iterations=20)# Write image after removed noise   cv2.imwrite(main_path + "no_noise.png", pic)#  threshold applying to get only black and white picture    pic = cv2.adaptiveThreshold(pic, 300, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)# Write the image for later recognition process    cv2.imwrite(main_path + "threshold.png", pic)# Character recognition with tesseract   final = pytesseract.image_to_string(Image.open(main_path + "threshold.png"))return final

显示最终输出:

print(get_string(src_path))

输入和输出:

在这里,我们给出输入到代码中的输入和输出,以便稍后执行代码。

输入:

从互联网上获取样本识别

输出:

执行代码后的屏幕截图

代码链接https : //github.com/eazyciphers/deep-learning-tutors

参考文献:

https://www.researchgate.net/profile/Andrew_Agbemenu/publication/325223548_An_Automatic_Number_Plate_Recognition_System_using_OpenCV_and_Tesseract_OCR_Engine/links/5c87e7ea299bf14e7e781750/An-Automatic-Number-Plate-Recognition-System-using-OpenCV-and-Tesseract-OCR-Engine.pdf

 https://en.wikipedia.org/wiki/Tesseract_(software)


交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 44
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报