はじめに
以前LM StudioとGraidoを組み合わせてOCRアプリを作りました。touch-sp.hatenablog.com
lmstudioというPythonライブラリを使うともっと簡単に実現可能でした。
Pythonスクリプト
import lmstudio as lms import gradio as gr import os # モデルの初期化 model = lms.llm("gemma-3-12b-it-qat") def extract_text(image_path: str): """ 画像からテキストを抽出する関数 """ try: # 画像ファイルが存在するかチェック if not os.path.exists(image_path): yield "エラー: 画像ファイルが見つかりません。" return # 画像の準備 image_handle = lms.prepare_image(image_path) # チャットの初期化 chat = lms.Chat("あなたは優秀なAIアシスタントです。") # ユーザーメッセージの追加 chat.add_user_message( "画像からテキストを抽出して下さい。回答は抽出したテキストのみとして下さい。", images=[image_handle] ) # ストリーミングレスポンスの処理 result = "" for fragment in model.respond_stream(chat): result += fragment.content yield result except Exception as e: yield f"エラーが発生しました: {str(e)}" # Gradioインターフェースの作成 with gr.Blocks(title="画像テキスト抽出アプリ") as demo: gr.Markdown("# 画像からテキスト抽出") gr.Markdown("画像をアップロードして、その中に含まれるテキストを抽出します。") gr.Interface( fn=extract_text, inputs=gr.Image( type="filepath", label="画像をアップロード" ), outputs=gr.Textbox( lines=10, max_lines=40, show_copy_button=True, label="抽出されたテキスト" ), flagging_mode="never" ) if __name__ == "__main__": demo.launch(share=False)
注意点
事前にLM Studioでサーバーを立てておく必要があります。その方法はこちら。touch-sp.hatenablog.com