如何在Pytesseract中获取字符位置

12

我正在尝试使用pytesseract库获取图像文件的字符位置。

import pytesseract
from PIL import Image
print pytesseract.image_to_string(Image.open('5.png'))

有没有一个库可以获取每个字符的位置

4个回答

6

你尝试使用pytesseract.image_to_data()吗?

data = pytesseract.image_to_data(img, output_type='dict')
boxes = len(data['level'])
for i in range(boxes ):
    (x, y, w, h) = (data['left'][i], data['top'][i], data['width'][i], data['height'][i])
    #Draw box        
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

1

使用 pytesseract 似乎不是获取位置的最佳方式,但您可以尝试以下方法:

from pytesseract import pytesseract
pytesseract.run_tesseract('image.png', 'output', lang=None, boxes=False, config="hocr")

1
它不起作用。使用最新版本,请使用以下链接: https://github.com/madmaze/pytesseract/blob/master/README.rst - DaniPaniz

0

您可以使用下面的脚本将每个字符保存为图像,适用于Python 3.6+。

import cv2
import pytesseract 
import numpy
import time
from PIL import ImageGrab

path_to_save = "img_out/"
img = cv2.imread("image_INAUTXQ_www.facebook.com.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

hImg, wImg,_ = img.shape
boxes = pytesseract.image_to_boxes(img)
ROI_number=0
for b in boxes.splitlines():
    b = b.split(' ')
    x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
    # cv2.rectangle(img, (x,hImg- y), (w,hImg- h), (50, 50, 255), 1)
    x1,y1=hImg-h,hImg-y
    x2,y2=x,w
    roi=img[x1:y1,x2:y2]
    output = cv2.resize(roi,(300,300))
    # cv2.imshow('roi', roi)
    # cv2.imshow('img',img)
    # cv2.waitKey(0)
    cv2.imwrite("test"+str(ROI_number)+".jpeg",output)
    ROI_number+=1

-1
字符的位置可以按照以下方式找到。
import csv
import cv2
from pytesseract import pytesseract as pt

pt.run_tesseract('bw.png', 'output', lang=None, boxes=True, config="hocr")

# To read the coordinates
boxes = []
with open('output.box', 'rb') as f:
    reader = csv.reader(f, delimiter = ' ')
    for row in reader:
        if(len(row)==6):
            boxes.append(row)

# Draw the bounding box
img = cv2.imread('bw.png')
h, w, _ = img.shape
for b in boxes:
    img = cv2.rectangle(img,(int(b[1]),h-int(b[2])),(int(b[3]),h-int(b[4])),(255,0,0),2)

cv2.imshow('output',img)

在使用此方法时,可能会错过一些文本。需要对图像进行一些预处理(如背景减法)以获得更好的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接