基于OpenCV与Pytesseract的图像文字识别优化:如何修正字符'5'被误识别为'S'的问题
基于OpenCV与Pytesseract的图像文字识别优化:如何修正字符'5'被误识别为'S'的问题
大家好,我最近在做图像文字识别的时候遇到了一个小麻烦,想请大家帮忙看看怎么优化。
首先,先把需要处理的图片下载下来,保存为sample.png:
我的目标是提取这张图里的英文字符和数字,最开始我写了这样一段代码:
import cv2 import pytesseract img = cv2.imread("sample.png") gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 23, 100) bnt = cv2.bitwise_not(thr) txt = pytesseract.image_to_string(bnt, config="--psm 6") res = ''.join(i for i in txt if i.isalnum()) print(res)
结果输出却只有:
ee
之后我调整了预处理的步骤,又试了一次:
import cv2 import pytesseract pytesseract.pytesseract.tesseract_cmd = r'/bin/tesseract' image = cv2.imread('sample.png') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) inverted_image = cv2.bitwise_not(gray_image) binary_image = cv2.adaptiveThreshold(inverted_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) denoised_image = cv2.medianBlur(binary_image, 3) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4, 4)) eroded_image = cv2.erode(denoised_image, kernel) mask = (denoised_image == 255) & (eroded_image == 0) denoised_image[mask] = 0 cv2.imwrite('preprocessed_image.png', denoised_image) text = pytesseract.image_to_string(denoised_image, config='--psm 6') print("result:", text.strip())
这次的结果比第一次好多了:
result:CRSP
但问题来了,实际图片里的字符应该是CR5P,也就是数字5被误识别成了字母S,这可怎么办呢?有没有办法优化代码,让识别更准确?
另外,我再放一张更清晰的细节图,方便大家看清楚那个数字5的样子:
备注:内容来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

