python+opencv图片文字旋转矫正
最近在使用实在RPA做机器人自动化,功能是受理单核对,即对核对业务受理人是否上传受理单承诺书
方法很简单,由于系统中图片位置不固定,所以需要将所有附件进行下载,并进行图像文字识别,但是实在RPA中的OCR识别无法识别颠倒倾斜的图片,所以有两种方法,一种是使用其他OCR模型,一种是将图片旋转,由于操作在云电脑,使用的公司内网,无法连外网,所以第一种方法实现较为麻烦,所以选择在识别前将图片旋转。
使用Tesseract 和 Python 矫正文本方向
1.安装pytesseract
pip install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple
2.下载tesseract
下载地址:https://digi.bib.uni-mannheim.de/tesseract/
设置环境变量:
D:\xxx\Tesseract-OCR
下载语音包(按需,如果没有勾选):https://github.com/tesseract-ocr/tessdata/tree/main
3.代码
from pytesseract import Output import pytesseract import cv2 # 打印pytesseract支持的所有语言 print('langs: ', pytesseract.get_languages(config='')) def rotate_bound(image, angle): # 获取图像的中心点 (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, -angle, 1.0) return cv2.warpAffine(image, M, (w, h)) # 自定义tesseract目录 pytesseract.pytesseract.tesseract_cmd = r"D:\\xxx\\xxx\\Tesseract-OCR\\tesseract.exe" # 自定义tessdata目录 tessdata_dir_config = "D:\\xxx\\xxx\\Tesseract-OCR\\tessdata" image = cv2.imread('6.jpg') rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = pytesseract.image_to_osd(rgb, lang="chi_sim", output_type=Output.DICT) print("[INFO] detected orientation: {}".format( results["orientation"])) print("[INFO] rotate by {} degrees to correct".format( results["rotate"])) print("[INFO] detected script: {}".format(results["script"])) rotated_image = rotate_bound(image, angle=results["rotate"]) # 显示旋转后的图片 cv2.imshow('Rotated Image', rotated_image) cv2.waitKey(0) cv2.destroyAllWindows()
重点pytesseract.image_to_osd中的lang要改成chi_sim,即 lang="chi_sim",识别的是中文,否则会出错