作成
GeminiAPI マルチモーダルを bash+curl で実行
JPEGファイルの中身にたいして、質問をする。ようは「この写真はどこ?」「この図面の画像ファイルから情報を抜き出して」 をする スクリプト(curl + bash ) の見本です。 ###title 事前準備 ### #*#事前準備① シェル内で json を扱うには yum や apt で jq をインストールしておきます。 #*#事前準備② step1.sh と step2.sh を作りますので +x でパーミッションを付与しておいてください。 #*#事前準備③ APIキーを取得して、キーの権限などを適切に設定しておきます。(ここでは gemini1.5flashを使用) ###title STEP1 プロンプトをJSON形式で出力 ### わかりやすく2段階で実行します。以下は STEP1 クエリ(プロンプト) をjsonファイルに出力。 test.jpg のバイナリを取得しつつ、JSONのプロンプトを作って、それをいったん test.json に出力します。 ###source (step1.sh) #!/bin/bash echo '{ "contents": [ { "role": "user", "parts": [ { "inline_data": { "mime_type":"image/jpeg", "data": "'$(base64 -w0 test.jpg)'" } }, { "text": "この画像から金額、住所、建物情報、元付け(名前や電話番号など)などの情報を抽出してください。また、JSON での出力もなにとぞ" } ] }, ], }' > test.json ### 実行します。 ###command bash step1.sh #### ###title STEP2 Gemini に問合せ(画像+文字) ### STEP1 でつくった 画像のバイナリと プロンプトがまじった test.json を gemini になげます。 ###source (step2.sh) #!/bin/bash API_KEY="XXXあなたのAPIキーXXX" curl https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${API_KEY} ¥ -H 'Content-Type: application/json' ¥ -d @test.json ### ### 実行します。 ###command bash step2.sh #### ### レスポンスです。「この画像から金額、住所、建物情報、元付け(名前や電話番号など)などの情報を抽出してください。」というプロンプトを投げましたが、他にも「この物件を主婦目線からみてどうですか?」といったプロンプトも試してみる価値はあります。 ###center (img://18/540m) ###title だめだった例 ###error google ai studio の get code をコピーしていろいろいじってたのですが、 "code": 400,"message": "Request contains an invalid argument.", のエラーでした。 ###center (img://18/541s) ### Google AI Studio の getcode のソースでは、画像をアップロードしてURL取得してプロンプトをなげるという処理でしたが、それだとだめで、画像をこちら側でバイナリにしてプロンプトにいれて投げる ならうまくいきました(謎) ###source "fileData": { "fileUri": "'${uri}'", "mimeType": "image/jpeg" } ###source (だめだったスクリプト) #!/bin/bash API_KEY="***ここにGEMINIのAPIキーを設定***" echo $API_KEY FILES=("test.jpg") MIME_TYPES=("image/jpeg") echo "STEP1" json="" for i in "${!FILES[@]}"; do NUM_BYTES=$(wc -c < "${FILES[$i]}") json_data=$( curl -s "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${API_KEY}" ¥ -H "X-Goog-Upload-Command: start, upload, finalize" ¥ -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" ¥ -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPES[$i]}" ¥ -H "Content-Type: application/json" ¥ -d "{'file': {'display_name': '${FILES[$i]}'}}" ¥ --data-binary "@${FILES[$i]}" | jq -r '.' ) done echo "$json_data" #JSON から URL部分を抜き出す uri=$(echo "${json_data}" | jq -r '.file.uri') echo "STEP2" json2='{ "contents": [ { "role": "user", "parts": [ { "fileData": { "fileUri": "'${uri}'", "mimeType": "image/jpeg" } }, { "text": "この画像から金額、住所、建物情報、元付け(名前や電話番号など)などの情報を抽出してください。また、JSON での出力もなにとぞ" } ] }, ], }' echo $json2 curl ¥ -X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${API_KEY} ¥ -H 'Content-Type: application/json' ¥ -d "$json2" ###
wakatta 記法
投稿の仕方
基本的な記法
エンジニア向け記法
記法のサンプル
このコンテンツを見る