- 1. 概要
- 2. 作成
- 3. 参考サイト
1. 概要
いよいよ、ソースを作成します。
2. 作成
下記のソースを作成します。
import os
import sys
from PIL import Image
import pytesseract
from tkinter import Tk, Label
from tkinterdnd2 import DND_FILES, TkinterDnD
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def extract_text_from_image(image_path):
try:
# 画像を開く
img = Image.open(image_path)
# OCRを実行(日本語と英語を対象にする場合は 'jpn+eng')
extracted_text = pytesseract.image_to_string(img, lang='jpn+eng')
# 出力するテキストファイルのパスを作成(画像と同じフォルダ、同じ名前で .txt に)
base_path, _ = os.path.splitext(image_path)
output_txt_path = base_path + ".txt"
# テキストファイルに書き出し
with open(output_txt_path, "w", encoding="utf-8") as f:
f.write(extracted_text)
return f"成功: {os.path.basename(output_txt_path)} を作成しました!"
except Exception as e:
return f"エラーが発生しました: {str(e)}"
def drop(event):
# ドラッグ&ドロップされたファイルのパスを取得
file_path = event.data
# Windowsなどの環境によってパスが {} で囲まれることがあるのを解除
if file_path.startswith('{') and file_path.endswith('}'):
file_path = file_path[1:-1]
# 対応している拡張子かチェック
if file_path.lower().endswith(('.png', '.jpg', '.jpeg')):
status_label.config(text="解析中...")
root.update()
# OCR処理を実行
result_message = extract_text_from_image(file_path)
status_label.config(text=result_message)
else:
status_label.config(text="エラー: .png または .jpeg/.jpg ファイルをドロップしてください。")
# アプリケーション画面の作成
root = TkinterDnD.Tk()
root.title("画像テキスト抽出 (OCR)")
root.geometry("400x200")
# 案内用ラベル
label = Label(root, text="ここに画像をドラッグ&ドロップしてください", font=("Helvetica", 12), bg="#f0f0f0", width=40, height=5)
label.pack(padx=20, pady=20, fill="both", expand=True)
# ステータス表示用ラベル
status_label = Label(root, text="待機中...", font=("Helvetica", 10), fg="blue")
status_label.pack(pady=10)
# ドラッグ&ドロップ機能をラベルに登録
label.drop_target_register(DND_FILES)
label.dnd_bind('<<Drop>>', drop)
# 画面を起動
root.mainloop()
プラットフォームや「Tesseract OCR」のインストール先が異なる場合は、8行目の定義を変更する必要があります。
3. 参考サイト
本ページは、「Gemini」伍長を参考にさせていただきました。
まだ、解析できていない。
|