一. 需要做的前期准备环境配置:
Python版本:3.9.0
功能包:opencv-python(4.5.2.52)
提前安装Tesseract_OCR工具,下载地址:http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe(切记:记录好Tesseract_OCR文件夹所安装的位置,作者这里为:C:\Program files (x86)\Tesseract-OCR)需要自行搜索想要识别的图像,作为input;或者实时检测的情况下调用摄像头也可一个用的顺手的IDE(本人推荐Pycharm)00二. 源码如下
import cv2import PyTesseract# 将tesseract导入到OpenCV中(注意格式)PyTesseract.PyTesseract.tesseract_cmd = "C:\Program files (x86)\Tesseract-OCR\tesseract.exe"# 读取图像img = cv2.imread('english.jpg')img = cv2.cvtcolor(img, cv2.color_BGR2RGB) # tesseract支持的是RGB格式图像,而OpenCV是BGR,因此需要将想要读取的图像转换为RGB格式# print(PyTesseract.image_to_string(img)) # 用于读取图片中的所有英文字母# print(PyTesseract.image_to_Boxes(img)) # 用于输出假设字母上边有boundingBox,则BoundingBox的左上角坐标以及右下角坐标分别是什么# 检测字符himg, wimg, _ = img.shapeBoxes = PyTesseract.image_to_Boxes(img)for Box in Boxes.splitlines(): # print(Box) # 打印出图片中所有的英文字母以及它所对应的boundingBox的左上角点和右下角点 Box = Box.split(' ') print(Box) # 为了方便调用每一个相关的值,将每个字母及其boundingBox的左上角右下角坐标保存在一个列表中 x1, y1, x2, y2 = int(Box[1]), int(Box[2]), int(Box[3]), int(Box[4]) cv2.rectangle(img, (x1, himg - y1), (x2, himg - y2), (0, 0, 255), 2) # 给每一个字母画上所对应的框 cv2.putText(img, Box[0], (x1, himg - y1 - 90), cv2.Font_ITAliC, 1, (50, 50, 255), 2) # 给每一个框上标记上检测出来的结果,根据想要写字符的位置进行对 (x1, himg - y1 - 数字)中数字的修改# 调用摄像头的实时字符检测 (想要使用本功能则将上边检测字符的代码块注释掉,将本段代码块恢复运行即可)# cap = cv2.VIDeoCapture(0)# cap.set(3, 640)# cap.set(4, 480)### def captureScreen(bBox=(300, 300, 1500, 1000)):# capScr = np.array(ImageGrab.grab(bBox))# capScr = cv2.cvtcolor(capScr, cv2.color_RGB2BGR)# return capScr### while True:# timer = cv2.getTickCount()# _, img = cap.read()# # 检测画面中的字符# himg, wimg, _ = img.shape# Boxes = PyTesseract.image_to_Boxes(img)# for b in Boxes.splitlines():# b = b.split(' ')# x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])# cv2.rectangle(img, (x, himg - y), (w, himg - h), (50, 50, 255), 2)# cv2.putText(img, b[0], (x, himg - y + 25), cv2.Font_HERShey_SIMPLEX, 1, (50, 50, 255), 2)# fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer)# cv2.putText(img, 'FPS:' + str(int(fps)), (75, 40), cv2.Font_HERShey_SIMPLEX, 0.7, (20, 230, 20), 2)# cv2.imshow("Result", img)# cv2.waitKey(1)## 展示图像 (使用实时检测功能时要将该部分代码块注释掉)cv2.imshow("Result", img)cv2.waitKey(0)
三. 结果展示非实时实时
四. 感悟与分享明显可以看出实时的检测结果很不稳定,且容易出错。只对画面中字符的识别是远远不够的,需要做字符的联结(换句话说就是去主动地将字符做合理拼接成为单词),其实是有解决办法的,即使用PyTesseract.image_to_data,但作者这里一直报错
Attribute Error:‘List’ object has no attribute 'read'
,且尚未解决,解决之后会第一时间进行更新。参考课程及推荐:https://www.youtube.com/watch?v=6DjFscX4I_c(内容为英文,且需要翻墙)如有问题,敬请指正。欢迎转载,但请注明出处。 总结
以上是内存溢出为你收集整理的OpenCV-Python-Tesseract_OCR 实现对图像中字符的识别、提取、标识(可实时,附源码)全部内容,希望文章能够帮你解决OpenCV-Python-Tesseract_OCR 实现对图像中字符的识别、提取、标识(可实时,附源码)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)