【问题标题】:Recognize single characters on a page with Tesseract使用 Tesseract 识别页面上的单个字符
【发布时间】:2020-02-04 22:29:33
【问题描述】:

此图像返回空字符串;

基本上我正在尝试为 WOW 游戏制作一个机器人,但我对这个 OCR 东西真的很陌生。我无法让 tesseract 阅读这张图片;我想要一个无序列表的字符以及包含它们的每个正方形的坐标(如果可能)。有没有办法做到这一点?

感谢您的宝贵时间!

这是我的代码:

from PIL import Image
import cv2
from pytesseract import image_to_string

column = Image.open('photo.png')
gray = column.convert('L')
blackwhite = gray.point(lambda x: 255 if x < 200 else 0, '1')
blackwhite.save("code_bw.jpg")


print(image_to_string(cv2.imread("code_bw.jpg")))

【问题讨论】:

    标签: python image-processing ocr tesseract python-tesseract


    【解决方案1】:

    您需要做一些预处理来隔离文本字符。一个简单的方法是使用 Otsu 的阈值来获得二值图像,然后我们可以找到轮廓并使用纵横比 + 轮廓区域进行过滤。这将为我们提供文本的边界框坐标,我们可以将其绘制到蒙版上。我们按位和输入图像的掩码得到我们的清洁图像,然后将其放入 OCR。结果如下:

    检测到的文本字符

    结果

    OCR 的结果

    A
    A R
    P
    

    代码

    import cv2
    import pytesseract
    import numpy as np
    
    pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
    
    # Load image, grayscale, Otsu's threshold
    image = cv2.imread('1.jpg')
    original = image.copy()
    mask = np.zeros(image.shape, dtype=np.uint8) 
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    
    # Find contours and filter using aspect ratio and area
    cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if len(cnts) == 2 else cnts[1]
    for c in cnts:
        area = cv2.contourArea(c)
        x,y,w,h = cv2.boundingRect(c)
        ar = w / float(h)
        if area > 1000 and ar > .85 and ar < 1.2:
            cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
            cv2.rectangle(mask, (x, y), (x + w, y + h), (255,255,255), -1)
            ROI = original[y:y+h, x:x+w]
    
    # Bitwise-and to isolate characters 
    result = cv2.bitwise_and(original, mask)
    result[mask==0] = 255
    
    # OCR
    data = pytesseract.image_to_string(result, lang='eng',config='--psm 6')
    print(data)
    
    cv2.imshow('image', image)
    cv2.imshow('thresh', thresh)
    cv2.imshow('result', result)
    cv2.waitKey()
    

    【讨论】:

    • 我觉得你是一个 pythonista,所以这是一个我无论如何都无法解决的后续问题:这个代码只有在我在我的 C 盘上运行并删除 pytesseract.pytesseract.tesseract_cmd 时才有效= r"C:\Program Files\Tesseract-OCR\tesseract.exe" 行....为什么?
    • 我不确定,我使用的是 Windows,所以我需要该行,这是默认情况下可执行文件所在的位置。如果我不把它放进去,我会得到这个tesseract error,所以这就是为什么至少我需要这条线的原因。如果它在没有它的情况下对你有用,那就太好了
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2014-01-09
    • 2016-08-09
    • 1970-01-01
    • 2020-07-28
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多