How to detect subscript numbers in an image using OCR?

前端 未结 3 1504
抹茶落季
抹茶落季 2021-02-14 11:46

I am using tesseract for OCR, via the pytesseract bindings. Unfortunately, I encounter difficulties when trying to extract text including subscript-sty

3条回答
  •  走了就别回头了
    2021-02-14 12:38

    I think this way can be more suitable for the general situation.

    import cv2
    import pytesseract
    from pathlib import Path
    
    image = cv2.imread('test.jpg')
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]  # (suitable for sharper black and white pictures
    contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    contours = contours[0] if len(contours) == 2 else contours[1]  # is OpenCV2.4 or OpenCV3
    result_list = []
    for c in contours:
        x, y, w, h = cv2.boundingRect(c)
        area = cv2.contourArea(c)
        if area > 200:
            detect_area = image[y:y + h, x:x + w]
            # detect_area = cv2.GaussianBlur(detect_area, (3, 3), 0)
            predict_char = pytesseract.image_to_string(detect_area, lang='eng', config='--oem 0 --psm 10')
            result_list.append((x, predict_char))
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)
    
    result = ''.join([char for _, char in sorted(result_list, key=lambda _x: _x[0])])
    print(result)  # CH3
    
    
    output_dir = Path('./temp')
    output_dir.mkdir(parents=True, exist_ok=True)
    cv2.imwrite(f"{output_dir/Path('image.png')}", image)
    cv2.imwrite(f"{output_dir/Path('clean.png')}", thresh)
    
    

    MORE REFERENCE

    I strongly suggest you refer to the following examples, which is a useful reference for OCR.

    1. Get the location of all text present in image using opencv
    2. Using YOLO or other image recognition techniques to identify all alphanumeric text present in images

提交回复
热议问题