我正在使用基于 Python 的 OCR (Pytesseract) 来读取图像作为 PDF 的一部分,以从中提取某些 ISIN 值。在某些情况下,OCR 算法将零 (0) 读作字母“O”。
我得到的输出是:
IEOOBQZJ1775 mULeyN USD Unhedged Accumulation
预期的输出是:IE00BQZJ1775 mULeyN USD Unhedged Accumulation
负责此的代码块是:import pytesseract
from PIL import Image
import cv2
img = Image.open('out.jpg')
new_image = cv2.bitwise_not(img)
new_image = cv2.resize(new_image, (0,0), fx=1.5, fy=1.5)
target = pytesseract.image_to_string(new_image, lang='eng', config='--psm 7 --oem 3')
我尝试了不同的 --oem 和不同的 --psm,但问题仍然存在。任何见解都将非常有帮助。通过 Opencv 进行图像预处理的任何可能有助于检测的东西。最佳答案
对于ISIN,可能你可以利用它的结构来验证它的有效性。根据wikipedia页,ISIN 由
至少,通过校验位,我们可以判断 OCR 是否成功,并可能更正它。当然,tesseract 可能会弄错某些字符,包括校验位,因此,也许您可以获取每个字符的置信度(如果存在,我已经多年没有使用 tesseract)来了解其准确性。
如果要进行图像处理,对于 0 和 O,可以拟合椭圆并检查偏心率,但这取决于字体。
关于python-3.x - Pytesseract 混淆了零 ('0' )和大写 O ('O' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62557704/