- 前言
- 一、OCR的作用
- 二、使用步骤
- 1.引入库
- 2.单字符识别
- 3.整体识别
- 4.完整代码
- 总结
前言
本篇文章主要是学习记录使用,给大家本文章的源视频地址,虽然是英语的不过有中英双字幕,还是蛮好听懂的。
一、OCR的作用
OCR,即 Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。通常技术中广泛流传的 OCR 指的就是“将图片转成文字”的智能技术。OCR描述原文
二、使用步骤 1.引入库代码如下(示例):
简单使用还是仅仅依赖两个库:
pip install opencv-python
pip install pytesseract
(没下载库的)
import cv2
import pytesseract
2.单字符识别
代码如下(示例):
# 获取图像大小
img_H, img_W, _ = img.shape
# 单个图像识别数据
boxes = pytesseract.image_to_boxes(img)
# 处理图片数据
for boxe in boxes.splitlines():
# 分割数据
boxe = boxe.split(" ")
# print(boxe)
# 获取图像识别的位置坐标
x, y, w, h = int(boxe[1]), int(boxe[2]), int(boxe[3]), int(boxe[4])
# 添加位置方框
cv2.rectangle(img, (x, img_H - y), (w, img_H - h), (0, 0, 255), 2)
# 添加识别文字
cv2.putText(img, boxe[0], (x, img_H - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)
识别结果演示:
3.整体识别代码如下(示例):
# 获取图像大小
img_H, img_W, _ = img.shape
# 图像识别数据
boxes = pytesseract.image_to_data(img)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
# 分割数据
boxe = boxe.split()
print(boxe)
# 判断图像数据长度(只有数据长度为12时才存储有识别结果)
if len(boxe) == 12:
# 获取图像识别的位置坐标
x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
# 添加位置方框
cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
# 添加识别文字
cv2.putText(img, boxe[11], (x, y + 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0), 1)
识别结果演示:
4.完整代码
代码如下(示例):
import cv2
import pytesseract
# 注意:OCR只接受RGB值 openCV为BGR值 在使用时需要格式转换
# 启动tesseract_OCR
pytesseract.pytesseract.tesseract_cmd = r"D:\PyCharm\Tesseract-OCR\tesseract.exe"
# 导入图像
img = cv2.imread("./img/b.bmp")
# 处理图像 (BGR转RGB格式才能OCR识别)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 窗口格式化转换(才能显示中文)
def winname(name):
return name.encode("gbk").decode(errors="ignore")
# 显示图像
cv2.imshow(winname("原图"), img)
# 识别结果
# print(pytesseract.image_to_string(img))
# 识别整体
# 获取图像大小
img_H, img_W, _ = img.shape
# 图像识别数据
boxes = pytesseract.image_to_data(img)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
# 分割数据
boxe = boxe.split()
print(boxe)
# 判断图像数据长度(只有数据长度为12时才存储有识别结果)
if len(boxe) == 12:
# 获取图像识别的位置坐标
x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
# 添加位置方框
cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
# 添加识别文字
cv2.putText(img, boxe[11], (x, y + 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0), 1)
cv2.imshow(winname("识别"), img)
cv2.waitKey(0)
"""
# 单个识别
# 获取图像大小
img_H, img_W, _ = img.shape
# 单个图像识别数据
boxes = pytesseract.image_to_boxes(img)
# 处理图片数据
for boxe in boxes.splitlines():
# 分割数据
boxe = boxe.split(" ")
# print(boxe)
# 获取图像识别的位置坐标
x, y, w, h = int(boxe[1]), int(boxe[2]), int(boxe[3]), int(boxe[4])
# 添加位置方框
cv2.rectangle(img, (x, img_H - y), (w, img_H - h), (0, 0, 255), 2)
# 添加识别文字
cv2.putText(img, boxe[0], (x, img_H - y + 25), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)
# 数字识别
cong = r"--oem 3 --psm 6 outputbase digits"
# 获取图像大小
img_H, img_W, _ = img.shape
# 图像数字识别数据
boxes = pytesseract.image_to_data(img, config=cong)
# 处理图片数据
for boxe in boxes.splitlines()[1:]:
# 分割数据
boxe = boxe.split()
print(boxe)
if len(boxe) == 12:
# 获取图像识别的位置坐标
x, y, w, h = int(boxe[6]), int(boxe[7]), int(boxe[8]), int(boxe[9])
# 添加位置方框
cv2.rectangle(img, (x, y), (w + x, h + y), (0, 0, 255), 2)
# 添加识别文字
cv2.putText(img, boxe[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 1)
"""
总结
提示:这个整体是不难的,而且识别正确率也还是蛮高的。只要下载了相对应的库和tesseract_OCR就可以了。tesseract_OCR下载可以借鉴知乎-海阔and天空。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)