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",识别的是中文,否则会出错

 

posted @ 2024-09-12 14:26  睡觉不困  阅读(113)  评论(0编辑  收藏  举报