原始图片用pytesseract识别文字,精准度往往没达到预期。使用opencv处理后,提高识别精准度。处理方法有
a.图片转成白底黑字。
b.截取图片某固定区域。这个很重要,因为图片包含图标或其他形状图形,辨识导致错乱的。
import cv2
#加载图片
image = cv2.imread(filePath)
#截取矩形区域
# 格式[y1: y2, x1: x2] , (x1,y1)矩形左上角,(x2,y2)矩形右下角.
image = image[180:550, 55:280]
#灰度转换
GrayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#二值化
# cv2Type: int类型
# 0. cv2.THRESH_BINARY
# 表示阈值的二值化操作,大于阈值使用maxval表示,小于阈值使用0表示
#
# 1. cv2.THRESH_BINARY_INV
# 表示阈值的二值化翻转操作,大于阈值的使用0表示,小于阈值的使用最大值表示
# ret, thresh2 = cv2.threshold(GrayImage, 88, 255, cv2.THRESH_BINARY_INV)
#cv2Threshold 阈值
ret, thresh2 = cv2.threshold(GrayImage, cv2Threshold, 255, cv2Type)
#ocr 辨识
# output_type=Output.DICT 将获取具体辨识数据,用于后期处理。
results = pytesseract.image_to_data(thresh2, output_type=Output.DICT, lang='eng')
写文字,画矩形
for i in range(0, len(results["text"])):
text = results["text"][i].strip()
tmp_tl_x = results["left"][i]
tmp_tl_y = results["top"][i]
tmp_br_x = tmp_tl_x + results["width"][i]
tmp_br_y = tmp_tl_y + results["height"][i]
#写字
cv2.putText(thresh2, text, (tmp_tl_x, tmp_tl_y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)
#画矩形
cv2.rectangle(image, (tmp_tl_x, tmp_tl_y), (tmp_br_x, tmp_br_y), (0, 255, 255), 2)
参考:https://livezingy.com/pytesseract-image_to_data_locate_text/