はじめに
PythonとTesseractでOCRを実施しようとした場合は、日本文字列をそのままOCRに書けるとあまり精度が出ません。
import os from PIL import Image from PIL import ImageEnhance import pyocr import cv2 import difflib def start_setting(): TESSERACT_PATH = r'C:\Program Files\Tesseract-OCR' TESSDATA_PATH = r'C:\Program Files\Tesseract-OCR\tessdata' os.environ["PATH"] += os.pathsep + TESSERACT_PATH os.environ["TESSDATA_PREFIX"] = TESSDATA_PATH def set_border(before_image, after_image, border: int = 125): for x in range(size[0]): for y in range(size[1]): r, g, b = before_image.getpixel((x, y)) if r > border or g > border or b > border: r = 255 g = 255 b = 255 after_image.putpixel((x, y), (r, g, b)) start_setting() if not os.path.exists("./Convert"): # ディレクトリが存在しない場合、ディレクトリを作成する os.makedirs("./Convert") # pyocrへ利用するOCRエンジンをTesseractに指定する。 tools = pyocr.get_available_tools() print(tools[0].get_name()) tool = tools[0] print("Will use tool '%s'" % (tool.get_name())) # OCR対応言語を確認する langs = tool.get_available_languages() print("Available languages: %s" % ", ".join(langs)) lang = langs[0] print("Will use lang '%s'" % (lang)) # OCR対象の画像ファイルを読み込む img = Image.open('./Image/jp_text_pattern_modify.png') img = img.convert('L') img.save("./Convert/result_gray.jpg") # コントラストを上げる enhancer = ImageEnhance.Contrast(img) img = enhancer.enhance(4.0) img.save("./Convert/result_gray_contrast.jpg") # 画像を読みやすいように加工。 img = img.convert('RGB') size = img.size border_image = Image.new('RGB', size) set_border(img, border_image, 230) border_image.save("./Convert/border_image.jpg") result_text_from_img = tool.image_to_string( border_image, lang='jpn', builder=pyocr.builders.TextBuilder() ) # txt is a Python string print(result_text_from_img) result_text_from_img = result_text_from_img.replace(' ', '') word_boxes = tool.image_to_string( border_image, lang="eng", builder=pyocr.builders.WordBoxBuilder() ) expected = "私のテキスト入力は完璧です。" diff = difflib.Differ() diffs = diff.compare(result_text_from_img, expected) for diff in diffs: print(diff)
Open-CV
【python】OpenCVのインストール方法 | 資格マフィア