1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollama で Gemma 3 による画像認識

Last updated at Posted at 2025-03-15

Ollama を利用して Gemma 3 で画像を分析します。

Gemma 3

Gemma 3 は Google が開発したローカルで動かせる LLM です。

1B/4B/12B/27B の 4 つのサイズが用意されています。

4B 以上のモデルは画像認識が可能で、サイズが大きいほど精度が向上します。本記事では 4B を例に説明を進めます。

準備

Ollama をインストールして、モデルをダウンロードしてください。

ollama pull gemma3:4b

コマンドラインからの実行

画像を置いたフォルダで Ollama を実行します。

ollama run gemma3:4b

処理速度を測定するためのオプションを指定します。

/set verbose

プロンプトで ./ に続けてファイル名を指定すれば読み込まれます。

プロンプト
画像を説明してください。./image.png

入力画像(別途生成): image.png (1024×1024)

生成パラメーター
  • Model: Animagine XL 3.1
  • Prompt: 1girl, original, eating pizza
  • Negative Prompt: nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]

出力例

この画像は、アニメ風の若い女性を描いたものです。以下に詳細を説明します。

  • 人物:
    • 若い女性で、茶色のショートヘアをしています。
    • 頬にはピンク色のチークをしています。
    • 大きな、少し憂鬱な目をしています。
    • 彼女は、オレンジ色のフリースジャケットと緑色のセーターを着ています。
  • 背景:
    • 木製のテーブルの上に座っています。
    • 背景には窓があり、自然光が差し込んでいます。
  • オブジェクト:
    • 彼女は、ピザを食べています。ピザにはトマトとチーズが乗っています。
  • スタイル:
    • 全体的にアニメ風で、細部まで丁寧に描かれています。
    • 色使いは暖色系で、全体的に温かみのある雰囲気です。

この画像は、美味しそうなピザを食べる若い女性の可愛らしいイラストです。

測定結果
total duration:       6.9259706s
load duration:        62.7936ms
prompt eval count:    273 token(s)
prompt eval duration: 2.942s
prompt eval rate:     92.79 tokens/s
eval count:           214 token(s)
eval duration:        3.912s
eval rate:            54.70 tokens/s

以下の環境で測定しました。

  • OS: Windows 11 Home [10.0.26100.3476]
  • RAM: DDR4-3200 64GB
  • CPU: AMD Ryzen 5 5600X 6-Core Processor
  • GPU: AMD Radeon RX 7600 XT (VRAM 16GB)

文章での説明

プロンプトで指定すれば文章で説明できます。

プロンプト
箇条書きではなく文章で、画像を説明してください。./image.png

出力例

このイラストは、明るい光が差し込む室内で、可愛らしいアニメ風の少女を描いています。

少女は、オレンジ色のフリースジャケットと緑色のセーターを着ています。彼女は、丸いテーブルの上に置かれたピザを、両手で持って、一口食べる準備をしています。ピザにはトマトソースとチーズ、そしてトマトのスライスが散りばめられています。

少女の表情は、楽しそうに、そして少し照れくさそうに見つめています。頬にはほんのりとしたピンク色のチークをしています。背景には、窓から差し込む自然光がぼんやりと写っており、暖かく、居心地の良い雰囲気を作り出しています。全体的に、このイラストは、美味しそうなピザと、少女の可愛らしい表情が組み合わさって、温かみのある、ほのぼのとした雰囲気を醸し出しています。

測定結果
total duration:       6.359634s
load duration:        64.1589ms
prompt eval count:    280 token(s)
prompt eval duration: 2.848s
prompt eval rate:     98.31 tokens/s
eval count:           188 token(s)
eval duration:        3.438s
eval rate:            54.68 tokens/s

文字認識

文字認識も可能です。

プロンプト
文字を読み取ってください。./text.png

ただし精度的に 4B は実用的ではなく、27B で 90% くらいという印象です。

手書き文字にも対応しています。詳細は以下の記事を参照してください。

Python

Python から読み込む例です。

ライブラリ追加
pip install ollama
import ollama

response = ollama.chat(
    model = "gemma3:4b",
    messages = [{
        "role": "user",
        "content": "画像を説明してください。",
        "images": ["image.png"],
    }],
)
print(response["message"]["content"])

リサイズ

画像サイズによっては応答しなくなる可能性があるため、リサイズ処理を追加した例です。

Ollama に縮小した画像データを渡しますが、元のファイルは変更しません。

ライブラリ追加
pip install pillow
import ollama, io
from PIL import Image

def shrink_image(image_path, max_size):
    image = Image.open(image_path)
    w1, h1 = image.size
    if max(w1, h1) > max_size:
        if w1 > h1:
            w2 = max_size
            h2 = int(h1 * (max_size / w1))
        else:
            w2 = int(w1 * (max_size / h1))
            h2 = max_size
        image = image.resize((w2, h2), resample=Image.LANCZOS)
    buf = io.BytesIO()
    image.save(buf, format="PNG")
    return buf.getvalue()

response = ollama.chat(
    model = "gemma3:4b",
    messages = [{
        "role": "user",
        "content": "画像を説明してください。",
        "images": [shrink_image("image.png", 512)],
    }],
)
print(response["message"]["content"])

LangChain

LangChain での利用法は以下の記事を参照してください。

関連記事

本記事は、以下の記事の改訂版という位置付けです。Gemma 3 は Llama 3.2-Vision よりも高性能です。

ピザ画像の元ネタは以下を参照してください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?