かっこいい “gemini-3-flash-preview” を試してみた

  • URLをコピーしました!

こんにちはジョージです。最近 Gemini が面白いので カスタム App でも試してみたよ。今回は Gemini 3 を使って、写真から色や形状の特徴を日本語で生成してみました!

目次

デモで使えるデータセットの準備

まずは大量に写真を準備します。(大量でなくてもいいですが、、、) kaggle というサイトで公開されている 5,000 件強の洋服の写真を素材として使います。データは 7 GB ほどでダウンロードした写真は全てカスタム App にレコードとして登録します。

https://www.kaggle.com/datasets/agrigorev/clothing-dataset-full

Gemini API の使い方をチェック

Gemini API の使い方を以下のウェブサイトでチェックします。curl で使えるのであれば「URL から挿入」スクリプトステップに置き換えられますね。

https://ai.google.dev/gemini-api/docs/image-understanding?hl=ja#rest

IMG_PATH="/path/to/your/image1.jpg"

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
    "contents": [{
    "parts":[
        {
            "inline_data": {
            "mime_type":"image/jpeg",
            "data": "'"$(base64 $B64FLAGS $IMG_PATH)"'"
            }
        },
        {"text": "Caption this image."},
    ]
    }]
}' 2> /dev/null

カスタム App スクリプトに置き換える

Gemini に FileMaker カスタム App で使えるようにポイントを教えてもらいます。最終的には、前項のサンプルコードを自分の頭の中で置き換えるのですが、要は $url に $payload と $model あたりがうまく渡せればいいので地道にトライしていきます。

SECRET は Google AI Studio (https://aistudio.google.com)にアクセスして画面左下にある Get API Key で発行した Key の値になります。私の場合、無料クレジットの反映がうまくいかず小一時間ほど「プロジェクトの割り当てティアを利用できません。」とエラーでましたが、しばらくしたら無事に反映されました。

# 
変数を設定 [ $url ; 値: "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent?key={secret}" ]
変数を設定 [ $model ; 値: "gemini-3-flash-preview" ]
変数を設定 [ $url ; 値: Substitute ( $url; [ "{model}"; $model ]; [ "{secret}"; SECRET ] ) ]
# 
# {
     "contents": [{
         "parts": [
             {"text": "添付した画像について日本語で説明してください"},
             {
                 "inline_data": {
                     "mime_type": "image/jpeg",
                     "data": "@image_base64"
                 }
             }
         ]
     }]
 }
変数を設定 [ $prompt ; 値: "添付した画像について日本語で説明してください" ]
変数を設定 [ $image_base64 ; 値: Base64EncodeRFC ( 4648; images::container ) ]
変数を設定 [ $payload ; 値: JSONSetElement ( "{}" ;         [ "contents[0].parts[0].text" ; $prompt ; JSONString ] ;         [ "contents[0].parts[1].inline_data.mime_type" ; "image/jpeg" ; JSONString ] ;         [ "contents[0].parts[1].inline_data.data" ; $image_base64 ; JSONString… ]
変数を設定 [ $payload ; 値: "--request POST " & " --header " & Quote ( "Content-Type: application/json" ) & " --data " & Quote ( $payload ) ]
# 
URL から挿入 [ ダイアログあり: オフ ; ターゲット: images::response ; $url ; cURL オプション: $payload ]
# 
フィールド設定 [ images::description ; JSONGetElement ( images::response; "candidates[]content.parts[]text" ) ]
# 
レコード/検索条件確定 [ ダイアログあり: オフ ]
# 

試してみる

API リクエストがうまく通ると次の JSON を取得できます。本文を candidates[0].content.parts[0].text にはいってるので、JSONGetElement で取得してフィールドに挿入します。プロンプト次第ではもう少し体系的な説明にできそうですね。

root
├─ candidates: Array<Candidate>
│  └─ [0]
│     ├─ content: Content
│     │  ├─ parts: Array<Part>
│     │  │  └─ [0]
│     │  │     ├─ text: string <<-- これ
│     │  │     └─ thoughtSignature: string
│     │  └─ role: string ("model")
│     ├─ finishReason: string ("STOP")
│     └─ index: number
│
├─ usageMetadata: UsageMetadata
│  ├─ promptTokenCount: number
│  ├─ candidatesTokenCount: number
│  ├─ totalTokenCount: number
│  ├─ promptTokensDetails: Array<PromptTokenDetail>
│  │  ├─ [0]
│  │  │  ├─ modality: string ("IMAGE")
│  │  │  └─ tokenCount: number
│  │  └─ [1]
│  │     ├─ modality: string ("TEXT")
│  │     └─ tokenCount: number
│  └─ thoughtsTokenCount: number
│
├─ modelVersion: string
└─ responseId: string

まとめ

いかがでしたでしょうか。話題の Gemini 3 で画像の説明文章を作成してみました。ここまで準備できれば埋め込みを作成して、FileMaker 標準機能の「セマンティック検索」や「自然言語で検索実行」を使って、簡易的な画像データベースが完成です。皆様も是非試してみてください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次