【问题标题】:Need help finding the correct config for Pytesseract be able to recognize this text需要帮助找到 Pytesseract 的正确配置才能识别此文本
【发布时间】:2021-12-23 16:02:11
【问题描述】:

所以我正在编写这个脚本,我需要能够从这种类型的图片 [1][2] 中识别文本,即文本“绑定诅咒”和“掠夺 I”。 我是 Pytesseract 和 C2V 的新手,所以我真的不知道应该如何编辑图片。下面的代码没有得到我想要的结果。

import pytesseract
import cv2

pytesseract.pytesseract.tesseract_cmd = "C:\\Users\\guilh\\AppData\\Local\\Programs\\Tesseract-OCR\\tesseract.exe"

image = cv2.imread('trades/1.png')

text = pytesseract.image_to_string(image, lang='mc')
print(result)

提前致谢!

[1] - https://i.stack.imgur.com/0fNhM.png

[2] - https://i.stack.imgur.com/J71v6.png

编辑:语言“mc”是图片中的自定义字体,来自游戏 Minecraft。

【问题讨论】:

    标签: python python-tesseract


    【解决方案1】:

    这可能是一个牵强附会的问题,但您是否从link 下载了 mc 训练数据?

    如果是这样,则此训练数据在某些字符方面存在问题,并且仅适用于数字。另一件重要的事情是尝试剪掉文本周围的背景。

    我正在做一个类似的项目here,但有一些不同之处。 (使用 tesserocr 作为视频/大量图像的速度更快) (阅读保证白色文本的 f3 调试菜单)

    如果您查看 process_image,它会获取图像,切掉所有非灰色像素,然后应用 cv2.threshold(im_arr,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

    我还在应用所有效果后对第一列进行裁剪,以最大限度地减少开始时的大量空白。

    您可以尝试使用而不是检查灰色像素

    # Check out hsv masking/filtering in opencv documentation
    image = cv2.inRange((h_min,s_min,v_min), (h_max, s_max, v_max), image)
    ret3, image = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    def process_image(im, crop_to_activity=False):
        """
        Converts the image to a numpy array, then applies preprocessing.
        """
        im_arr = np.array(im)
            
        height, width, depth = im_arr.shape
    
        for i in range(height):
            for j in range(width):
                r, g, b = im_arr[i][j]
    
                r = (r + 150) / 2
                g = (g + 150) / 2
                b = (b + 150) / 2
    
                mean = (r + g + b) / 3
                diffr = abs(mean - r)
                diffg = abs(mean - g)
                diffb = abs(mean - b)
    
                maxdev = 2
    
                if (diffr + diffg + diffb) > maxdev:
                    im_arr[i][j][0] = 0
                    im_arr[i][j][1] = 0
                    im_arr[i][j][2] = 0
                
    
    
        im_arr = cv2.cvtColor(im_arr, cv2.COLOR_BGR2GRAY)
    
            #cap_arr = cv2.threshold(cap_arr,127,255,cv2.THRESH_BINARY)
        
        # Otsu's thresholding after Gaussian filtering
        #blur = cv2.GaussianBlur(cap_arr,(3,3),0)
        ret3, im_arr = cv2.threshold(im_arr,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    
    
        if crop_to_activity:
            last_column = -1
            for j in range(width):
                for i in range(height):
                    v = im_arr[i][j]
    
                    if v != 0:
                        last_column = j
                        break
                if last_column != -1:
                    break
            
            last_column = max(0, last_column-3)
            im_arr = im_arr[:, last_column:]
    
        return im_arr
    

    【讨论】:

      【解决方案2】:

      我想建议inRange Thresholding

      如果你申请:

      1st Image 2nd Image

      如果您将page segmentation result 设置为 6:

      1st Image 2nd Image
      Enchanted Book Enchanted Book
      Curse of Binding

      在第二张图片中,looting-I 丢失了,所以我们需要设置不同的值:

      2nd Image Result
      dese eee _, Looting I

      global thresholding 无法处理这些图像。

      Adaptive thresholding 并不比 inRange 阈值更成功:

      1st Image 2nd Image

      因此,您可以通过更改值来找到理想的结果。

      InRange 阈值代码:

      import cv2
      import pytesseract
      from numpy import array
      
      image_list = ["0fNhM.png", "J71v6.png"]
      
      for image_name in image_list:
          bgr_image = cv2.imread(image_name)
          hsv_image = cv2.cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
          mask = cv2.inRange(hsv_image, array([0, 158, 233]), array([46, 255, 255]))
          kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
          dilate = cv2.dilate(mask, kernel, iterations=1)
          thresh = 255 - cv2.bitwise_and(dilate, mask)
          txt = pytesseract.image_to_string(thresh, config='--psm 6')
          print(txt)
      

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 2020-05-13
        • 1970-01-01
        相关资源
        最近更新 更多