Python - 画像よりテキスト抽出 - 作成


 


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」伍長を参考にさせていただきました。  まだ、解析できていない。

audiobook.jp
健康サポート特集
TikTok Shop 【リピート用プログラム】
U-NEXT
JETBOY
薬屋の独り言
葬送のフリーレン Prime Video
ネットオークションの相場、統計、価格比較といえばオークファン
サウンドハウス
ベルリッツ
それがだいじWi-Fi
アフィリエイトのアクセストレード
earthcar(アースカー)
5G CONNECT
EaseUS
損保との違い
【usus ウズウズ】
ハイスピードプラン
Amazonギフトカード