Getting the bounding box of the recognized words using python-tesseract

前端 未结 7 1058
不思量自难忘°
不思量自难忘° 2020-11-30 19:21

I am using python-tesseract to extract words from an image. This is a python wrapper for tesseract which is an OCR code.

I am using the following code for getting th

相关标签:
7条回答
  • 2020-11-30 19:54

    Some examples are answered aove which can be used with pytesseract, however to use tesserocr python library you can use code given below to find individual word and their bounding boxes:-

        with PyTessBaseAPI(psm=6, oem=1) as api:
                level = RIL.WORD
                api.SetImageFile(imagePath)
                api.Recognize()
                ri = api.GetIterator()
                while(ri.Next(level)):
                    word = ri.GetUTF8Text(level)
                    boxes = ri.BoundingBox(level)
                    print(word,"word")
                    print(boxes,"coords")
    
    0 讨论(0)
  • 2020-11-30 19:56

    Use pytesseract.image_to_data()

    import pytesseract
    from pytesseract import Output
    import cv2
    img = cv2.imread('image.jpg')
    
    d = pytesseract.image_to_data(img, output_type=Output.DICT)
    n_boxes = len(d['level'])
    for i in range(n_boxes):
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
    cv2.imshow('img', img)
    cv2.waitKey(0)
    

    Among the data returned by pytesseract.image_to_data():

    • left is the distance from the upper-left corner of the bounding box, to the left border of the image.
    • top is the distance from the upper-left corner of the bounding box, to the top border of the image.
    • width and height are the width and height of the bounding box.
    • conf is the model's confidence for the prediction for the word within that bounding box. If conf is -1, that means that the corresponding bounding box contains a block of text, rather than just a single word.

    The bounding boxes returned by pytesseract.image_to_boxes() enclose letters so I believe pytesseract.image_to_data() is what you're looking for.

    0 讨论(0)
  • 2020-11-30 20:04

    tesseract.GetBoxText() method returns the exact position of each character in an array.

    Besides, there is a command line option tesseract test.jpg result hocr that will generate a result.html file with each recognized word's coordinates in it. But I'm not sure whether it can be called through python script.

    0 讨论(0)
  • 2020-11-30 20:06

    Python tesseract can do this without writing to file, using the image_to_boxes function:

    import cv2
    import pytesseract
    
    filename = 'image.png'
    
    # read the image and get the dimensions
    img = cv2.imread(filename)
    h, w, _ = img.shape # assumes color image
    
    # run tesseract, returning the bounding boxes
    boxes = pytesseract.image_to_boxes(img) # also include any config options you use
    
    # draw the bounding boxes on the image
    for b in boxes.splitlines():
        b = b.split(' ')
        img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)
    
    # show annotated image and wait for keypress
    cv2.imshow(filename, img)
    cv2.waitKey(0)
    
    0 讨论(0)
  • 2020-11-30 20:15

    To get bounding boxes over words:

    import cv2
    import pytesseract
    img = cv2.imread('/home/gautam/Desktop/python/ocr/SEAGATE/SEAGATE-01.jpg')
    
    from pytesseract import Output
    d = pytesseract.image_to_data(img, output_type=Output.DICT)
    n_boxes = len(d['level'])
    for i in range(n_boxes):
        if(d['text'][i] != ""):
            (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
    cv2.imwrite('result.png', img)
    
    0 讨论(0)
  • 2020-11-30 20:16

    Would comment under lennon310 but don't have enough reputation to comment...

    To run his command line command tesseract test.jpg result hocr in a python script:

    from subprocess import check_call
    
    tesseractParams = ['tesseract', 'test.jpg', 'result', 'hocr']
    check_call(tesseractParams)
    
    0 讨论(0)
提交回复
热议问题