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