用到了 pillow 、pytesseract 、cv2这三个库
pip install pillow
pip install pytesseract
pip install cv2
Tesseract-OCR(optical character recognition,光学字符识别)开源库,可将包含文本的图像识别为计算机文字(计算机黑白点阵)。
下载地址
GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)
Tesseract-OCR 安装成功后,需要修改pytesseract 库的配置:
在python安装目录下找到\Lib\site-packages\pytesseractpy\tesseract.py,编辑tesseract.py文件,搜索 tesseract_cmd,将它的值修改为Tesseract-OCR 的安装路径并保存。
# 总体思路: 做色彩漂移将内容在色彩层面平滑滤波过滤噪点 将处理好的图片交给图像识别函数进行识别
# 线性滤波算法: 均值滤波 中值滤波 高斯滤波
# 用掩模扫描图像中的每一个像素,用邻域内像素的加权平均灰度值去替代模板中心像素点的值
# 利用均值漂移算法特性中和色彩分布相近的颜色,侵蚀面积较小的颜色区域
# sp 用来定义漂移物理空间半径大小
# sr 用来定义漂移色彩空间半径大小
dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150)
cv.imshow('reduce-the-noise', dst)
dst = cv.pyrMeanShiftFiltering(dst, sp=10, sr=150)
cv.imshow('reduce1', dst)
# 色彩空间转换将图片转为灰度图
gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)
cv.imshow('gray-level-image', gray)
# 二值化 将图片处理为只有黑白两色的图片,目的为去干扰线
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow('binary', binary)
# erode = cv.erode(binary, None, iterations=2)
# cv.imshow('erode', erode)
# 腐蚀函数 用于去除白噪声
# 所以除白色的边缘区域都会变成黑色 达到边界腐蚀效果
erode = cv.erode(binary, None, iterations=2)
cv.imshow('erode-2', erode)
# 膨胀函数 作用在于放大图像内容
# dilate = cv.dilate(erode, None, iterations=1)
# cv.imshow('dilate', dilate)
# 用于结构特征提取 图像二进制进行取反操作
# cv.bitwise_not(binary, binary)
# cv.imshow('binary-image', binary)
test_message = Image.fromarray(dst)
text = pytesseract.image_to_string(test_message)
print(f'识别结果:{text}')
运行效果: