0

私はこのような画像を持っています: nidカードのイメージ

pytesseract を使用してこの画像からテキストを検出して認識したいのですが、最新の pytesseract 0.3.8 では、この画像の空の出力が得られます。これの理由は、画像内の国民 ID カードが傾いているためだと思います (非水平テキストが表示されます)。 pytesseractを使用してこの画像から国民IDカードを回転およびトリミングする方法はありますか?またはpytesseractが画像から湾曲したまたは未知の方向のテキストを自動的に認識することは可能ですか? この投稿で説明されているコードを試しました: OCR の Tesseract 自動テキスト回転機能を強化するには?

ここに私が試したコードがあります:

import pytesseract
import cv2
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import re
import math
#from skimage.transform import rotate

# function to rotate the image
def rotate(image: np.ndarray,angle, background_color): 
    old_width, old_height = image.shape[:2]
    angle_radian = math.radians(angle)
    width = abs(np.sin(angle_radian) * old_height) + abs(np.cos(angle_radian) * old_width)
    height = abs(np.sin(angle_radian) * old_width) + abs(np.cos(angle_radian) * old_height)
    image_center = tuple(np.array(image.shape[1::-1]) / 2)
    rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0)  
    rot_mat[1, 2] += (width - old_width) / 2
    rot_mat[0, 2] += (height - old_height) / 2
    return cv2.warpAffine(image, rot_mat, (int(round(height)), int(round(width))), borderValue=background_color)

image = cv2.imread('tests/t3.png')
while True:
    osd_rotated_image = pytesseract.image_to_osd(image)

    # using regex we search for the angle(in string format) of the text
    angle_rotated_image = re.search('(?<=Rotate: )\d+', osd_rotated_image).group(0)
    print(angle_rotated_image)
    if (angle_rotated_image == '0'):
        image = image
        plt.imshow(image)
        # break the loop once we get the correctly deskewed image
        break
    elif (angle_rotated_image == '90'):
        image = rotate(image,90,(255,255,255)) # rotate(image,angle,background_color)
        continue
    elif (angle_rotated_image == '180'):
        image = rotate(image,180,(255,255,255))
        continue
    elif (angle_rotated_image == '270'):
        image = rotate(image,90,(255,255,255))
        continue 

実際には画像全体を回転させ、画像内の NID カードを回転させることはできないため、間違った出力は次のようになります。

処理後の向きが間違っている

NIDカードにあるすべての英語のテキストを認識したいのですが、それが不可能な場合は、少なくともpytesseractを使用して、このような未知の方向の画像のNID番号を注意深く認識したいのですが、paddleocrとeasyocrがこのような画像で機能することは知っていますが、このような画像に対して pytesseract のテキスト認識を機能させることができるかどうか知りたいですか?もしそうなら、どうすればできますか? たとえば、この画像からすべての単語を認識できますか : バングラ、英語、英語の数字

4

0 に答える 0