Pytesseract 和 OpenCV 尝试检测文本中的倾斜

问题描述 投票:0回答:0

我有一些图片,比如一个包。这个包,上面有一个标题,是文字。我一直在尝试找到一种方法来检测文本偏离的角度(例如 4 度、-4 度等),这样我就可以重新定位图像,使其不再倾斜。通过图像,我的意思是旋转图像,这样袋子就不再倾斜了。

我尝试过的几种方法是使用 OpenCV 和 pytesseract。他们都没有成功,因为它给出的角度既多变又非常不准确。

这是我的 openCV 代码:

_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Bounding box of text
rect = cv2.minAreaRect(contours[0])
box = cv2.boxPoints(rect)
box = np.intp(box)

# the angle that it is off by
angle = rect[2]
print(angle)
if angle < -45:
    angle = -(90 + angle)
else:
    angle = -angle

rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
img_rotated = cv2.warpAffine(img, M, (cols, rows))

我也试过hough变换的方法,结果也差不多(也许我只是写错了?)

我的pytesseract尝试:

thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    area = cv2.contourArea(cnt)
    x, y, w, h = cv2.boundingRect(cnt)
    if area > 1000 and h > 20 and w > 20:
        roi = img[y:y+h, x:x+w]
        break
text = pytesseract.image_to_string(roi, lang='fra', config='--psm 6')
orientation, _ = pytesseract.image_to_osd(roi, lang='fra')
angle = int(orientation.split('\n')[1].split(':')[-1])

谢谢,如果可以提供更多详细信息,请告诉我。

python opencv tesseract python-tesseract
© www.soinside.com 2019 - 2024. All rights reserved.