簡體   English   中英

檢測文本和糾偏

[英]Detect text and deskew

有人問過類似的問題,但似乎沒有一個對我的情況有幫助(盡管如此,我從這些線程中學到了一些東西)。

示例圖片

我正在使用 Tesseract 進行 OCR,但是當文本稍微傾斜時,結果遠不能令人滿意(見上圖)。

受類似案例的啟發,我嘗試使用 OpenCV 來檢測和修復傾斜,但不幸的是它似乎不起作用。 在下面,您可以看到我當前的嘗試,但沒有產生必要的結果。 我得到的只是圖像周圍的另一個邊界框(已經被裁剪了)。

import cv2
from matplotlib import pyplot as plt
import numpy as np
img = cv2.imread("skew.JPG")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
#gray = cv2.bitwise_not(gray)
ret,thresh1 = cv2.threshold(gray, 0, 255 ,cv2.THRESH_OTSU)     
rect_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3
, 2))
dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1)
cv2.imshow('dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
        rect = cv2.minAreaRect(cnt)
        box = cv2.boxPoints(rect)
        box = np.int0(box)
        cv2.drawContours(img,[box],0,(0,0,255),3)
cv2.imshow('final', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我將不勝感激任何建議。

Tesseract在文字出現一些扭曲的情況下似乎有很多麻煩。

這個想法是找到文本的輪廓以能夠使圖像不失真,然后使用 Tesseract。 輪廓通常是一個矩形,它與文本經歷了相同的變形。 因此,它在您的圖像中不再顯示為完美的矩形。 Opencv 為您提供了不同的方法來查找它。 cv2.minAreaRect()找到最佳旋轉矩形。 根據文本的失真情況,這可能就足夠了。 否則,您可以使用cv2.convexHull()來更好地適應您的文本。

輪廓應該為您提供要重新映射到常規矩形的文本角。 你可以這樣做:

cv2.getAffineTransform(corners, dest_corners)    # requires 3 points
cv2.getPerspectiveTransform(corners, dest_corners)    # requires 4 points

進而

 cv2.warpAffine(...)
 cv2.warpPerspective(...)

另外,不要忘記正確設置 Tesseract 需要使用的頁面分割方法( https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality )。 在你的情況下,“6 假設一個統一的文本塊。” 似乎適應了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM