【发布时间】:2019-09-19 12:06:04
【问题描述】:
我正在执行一项 OCR 任务,以从多个身份证明文件中提取信息。一个挑战是扫描图像的方向。需要固定 PAN、Aadhaar、驾驶执照或任何身份证明的扫描图像的方向。
已经在 Stackoverflow 和其他论坛上尝试过所有建议的方法,例如 OpenCV minAreaRect、霍夫线变换、FFT、单应性、带有 psm 0 的 tesseract osd。没有一个有效。
【问题讨论】:
-
直接的方法是将光学字符识别应用于 4 个旋转的图像,并保留带有“印度”一词的图像,或者使用分段字符串的某种测试来获得最高分。为此,可以考虑使用 opencv、numpy、Image 和 pytesseract 库。你能发布一个显示你尝试过的最小代码吗?
-
@francis,感谢您的评论和建议。由于 cmets 的字符限制,为简洁起见,我将代码 sn-ps 作为 cmets 在下面单独发布,由于某种原因,代码显示为纯文本
-
这是 pytesseract,目的是忽略抽象方向并让 tesseract 隐式处理,效果不太好:config = ('stdout --psm 0 --oem 0 -l osd -c min_characters_to_try=5') imgPath = sys.argv[1] img = cv2.imread(imgPath) text = pytesseract.image_to_osd(img, config=config) print(text)
-
这是 HOG:im = cv2.imread(imgPath) im = np.float32(im) / 255.0 gx = cv2.Sobel(im, cv2.CV_32F, 1, 0, ksize=1 ) gy = cv2.Sobel(im, cv2.CV_32F, 0, 1, ksize=1) mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True) print(angle[0])
-
使用霍夫线变换:img_edges = cv2.Canny(img_before, 100, 200, openingSize=3) lines = cv2.HoughLinesP(img_edges, 1, math.pi / 180.0, 100, minLineLength=100 , maxLineGap=5) 角度 = [] for x1, y1, x2, y2 in lines[0]: cv2.line(img_before, (x1, y1), (x2, y2), (255, 0, 0), 3 ) angle = math.degrees(math.atan2(y2 - y1, x2 - x1)) Angles.append(angle) median_angle = np.median(angles) #print(median_angle) print("角度为 {}".format(中值角度))
标签: python image opencv image-processing computer-vision