前提
はじめに: Pythonを触り始めてから3週間の素人です。見当違いなことを書いていたら申し訳ありません。
この度、全盲の自分でも使える一括OCRプログラム(指定したフォルダ内の画像にOCRをかけて別フォルダに出力するもの)を作ろうとして様々なサイトで調べた知識をつぎはぎしながらコードを記述していました。
しかし、試しに以下のようなプログラムを記載したところ、各画像へのループ処理とテキストファイルへの出力に問題が生じてしまったようです。
検索しても解決方法を発見することができませんでしたので、何方かに教えて頂きたく投稿しました。
宜しくお願い致します。
実現したいこと
・フォルダ名を入力させる
・入力されたフォルダ内に以下の処理を繰り返し実行する
・画像を識別しやすいよう処理する。
・TesseractOCR(同階層にあるフォルダに格納済み)にかけてテキストを抽出する
・「text」フォルダを作成し、抽出した内容を張り付けて保存する
というプログラムを作りたいと思っています。
発生している問題・エラーメッセージ
File "C:\Users\User\MyFiles\Python\OCR\ocr.py", line 24, in <module> img = Image.open(jpgFile) File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\PIL\Image.py", line 3068, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'filename.jpg'
該当のソースコード
python3.10
1import os 2from PIL import Image 3import pyocr 4import pyocr.builders 5import sys 6import pdf2image 7def resource_path(relative_path): 8 if hasattr(sys, '_MEIPASS'): 9 return os.path.join(sys._MEIPASS, relative_path) 10 return os.path.join(os.path.abspath("."), relative_path) 11path = resource_path('resources/Tesseract-OCR/') 12os.environ['PATH'] = os.environ['PATH'] + path 13pyocr.tesseract.TESSERACT_CMD = resource_path('resources/Tesseract-OCR/tesseract.exe') 14tools = pyocr.get_available_tools() 15if len(tools) == 0: 16 print('OCRツールが見つかりませんでした。') 17 sys.exit(1) 18tool = tools[0] 19os.makedirs('text', exist_ok = 'true') 20folder = input('フォルダ名を入力 >>') 21files = os.listdir(folder) 22jpgFile = 'filename.jpg' 23for filename in files: 24 img = Image.open(jpgFile) 25 img = img.convert('RGB') 26 size = img.size 27 img2 = Image.new('RGB', size) 28 border = 110 29 for x in range(size[0]): 30 for y in range(size[1]): 31 r,g,b = img.getpixel((x,y)) 32 if r > border or g > border or b > border: 33 r = 255 34 g = 255 35 b = 255 36 img2.putpixel((x,y),(r,g,b)) 37 builder = pyocr.builders.TextBuilder(tesseract_layout=3) 38 text = tool.image_to_string(img2, lang="jpn", builder=builder) 39 txtFile = f'{filename}.txt' 40 f = open(txtFile, 'w') 41 f.write(text) 42 f.close
また、上記エラー以外に問題となりそうな箇所がありましたら、ご指摘・ご教授頂ければ幸いです。
回答1件