見出し画像

google gemini pro visionで絵描き歌を解説してもらう

こんにちはmakokonです。
今日はgoogle gemini pro visionで絵描き歌を解説してもらう。
gemini pro visionは複数の画像を渡して、回答を生成することができるので、きっと絵描き歌もわかるに違いない。

google 生成AIの準備


ライブラリをインストールして、APIキーをGEMINI_API_KEYにセットしておきます。
export GEMINI_API_KEY="your API KEY"です。

pip install --upgrade google_generativeai

一応現時点のモデルを確認

import os

import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

print("サポートしているモデル")
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

サポートしているモデル
models/gemini-1.0-pro
models/gemini-1.0-pro-001
models/gemini-1.0-pro-latest
models/gemini-1.0-pro-vision-latest
models/gemini-pro
models/gemini-pro-vision

実行結果

おや、知らないうちにサポートしているモデルが増えていますね。
どれもgemini-proの文字が入っているので、アップデートがあったのでしょうか。
現在のGeminiモデルのバージョンは1.2.0で、2024年2月13日にリリースされたようです。いくつかの機能強化とバグフィックスがあるようです。
(gemini 1.5のリリースも発表されていますのでそちらは後日機会があれば)
とりあえず、以前のプログラムが問題なく動いたので今回は気にしません。

映像の準備

絵描き歌は、「かわいいコックさん」です。
下記のサイトの画像を使わせてもらいました。
画像そのものをブログに乗せるのは問題かもしれないのでどんな画像かは、リンクを確認してください。

cook_image \$ ls   
cook01.jpg cook03.jpg cook05.jpg cook07.jpg cook09.jpg
cook02.jpg cook04.jpg cook06.jpg cook08.jpg cook10.jpg

10枚の画像があったので、jpgイメージに変換して保存しました。

全体コードの説明

import glob
import os
from PIL import Image

import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)


# 指定したディレクトリ内のgifファイルのリストを取得
file_list = glob.glob("cook_image/*.jpg")
# ファイル名でソート
file_list.sort(key=os.path.basename)

model_image = genai.GenerativeModel('gemini-pro-vision')

sys_prompt = """これらの画像は、全10枚の相互に関連する画像です。
この画像を個別に日本語で説明してください。
また、これらの画像の関連性について説明してください。"""

prompts=[]
prompts.append(sys_prompt)
images =[]

for i,file in enumerate(file_list):
    img = Image.open(file)
    images.append(img)

prompts=prompts+images
    
    
response = model_image.generate_content(prompts)
msg=f"画像の説明:{response.text}"
print(msg)

最初に、画像を保存したフォルダcook_image/を指定して、そのフォルダに存在するJPGファイルの名前を、ソートしてリストimagesに格納します。

モデルネームとしてgemini-pro-visionを指定して、プロンプトを書きます。
今回は、それぞれの画像の説明と、相互の関わりについて訪ねました。一応promptsというリストにしておきます。
実際のプロンプトはテキストと、イメージのリストなので、先程作ったpromptsとimagesを接続します。
あとは、model_image.generato()にpromptsを渡して出来上がり。

実行結果

実行結果を示します。

画像の説明: 1. 一本線のイラスト
2. 1のイラストに口が追加されたイラスト
3. 2のイラストに目と手足が追加されたイラスト
4. 3のイラストの口がへの字になったイラスト
5. 4のイラストに手足と尻尾が追加されたイラスト
6. 5のイラストの尻尾が長くなったイラスト
7. 6のイラストに服が追加されたイラスト
8. 7のイラストに耳が追加されたイラスト
9. 8のイラストの足が地面についたイラスト
10. 9のイラストにコック帽が追加されたイラスト

これらのイラストは、1本の線から始まり、徐々に要素が追加されて、最終的にコック帽をかぶった猿のイラストが完成する様子を描いています。

実行結果

成績はどうですかね。
1,2はOK
3は目はついていますが、手足はどこにあるんでしょうね。
4は頭がついたところなので、口がへの字といわれても。
5で手がつきましたが、尻尾はわかりません。
6の尻尾は真ん中の線なのでしょうか
7はOK、たしかに服らしく見えます。
8,9もOK。耳がついて、地面に足がつきました。
10 防止を被って可愛いコックさんといってほしかったが、猿と言われてしましました。
総括はまあ、まともですね。

わかっていたことですが、画像の抽象性が高い間は、評価が安定しません。繰り返し実行しても3,4,5あたりは結構好きなことをいいます。
具体的なイメージが固まってくると、評価も安定するようです。
段階的に画像を評価するおかげで総括もまあ、まともでした。
残念なのは何回繰り返しても出来上がりが猿だと言われることで、たまには人間と言ってほしかった。

おまけ1 絵描き歌から絵がかけるのかな。

なお、DALLE3を使って、この絵描き歌を使って、イラストを生成してもらいました。結果はまあ、しょうがないな。というところですね。

いかに示す、イメージ生成手順に従って描かれる,イラストを生成してください .生成手順:1.棒が一本あったとさ 手順2.はっぱかな 手順3.はっぱじゃないよ かえるだよ 手順4. かえるじゃないよ あひるだよ 手順5 六月六日に雨 ざあざあふってきて 手順6.三角じょうぎに ひびいって 手順7.あんぱんふたつ 豆三つ 手順8. コッペぱんふたつ くださいな 手順9. あっというまに 手順10.かわいいコックさん

DELLE-3プロンプト
絵描き歌から生成したイラスト


おまけ2 逆に作った絵を解説してもらった by GPT-4V

画像は、10段階に分かれたイラストで構成されており、各ステップが食べ物の調理工程をユーモラスな視点で捉えたものです。不正確な言葉遊びや言葉の音韻の類似を使い、実際の料理用語や成分ではなく、類似した響きを持つ英語を面白おかしく紹介しています。例えば、"Two sound re verserates of in a trian g eral ruler." など文脈から離れた表現が見られます。キャラクターが登場しており、中央では緑色のキャラクターがボウルの中で何かを混ぜたり、料理されたりしているのが見えます。全体としては、実際の料理プロセスを楽しく模倣した漫画的な作品です。

この記事が気に入ったらサポートをしてみませんか?