ChatGPT (4, 3.5) と Claude (Sonnet) で、Python (Matplotlib) を使って自画像を描くチャレンジをやってみました。
Matplotlib は、Python のデータ可視化などに使われるグラフ描画ライブラリです。本来は自画像のような絵を描くためのものではないのですが、各AIアシスタントの2次元空間把握力やコード生成能力を見るには、面白いチャレンジかと思います。
それぞれ、公式 WebUI を使ってテキストチャットで指示し、プロンプトは共通です。
共通のプロンプト
結果まとめ
各AIアシスタントそれぞれ個性的、何度か試すと結果のクオリティもそれぞれ、という結果になりました。では、それぞれの結果を詳しく見ていきましょう。コードは省略します。
ChatGPT には、敬語を避ける等のカスタムインストラクションを使用しています。
ChatGPT 4
ChatGPT 4 はゴチャゴチャいわずにサクッと描いてくれました。(というか、私ピジェが ChatGPT 4 に慣れているため、このプロンプトが ChatGPT 4 に最適化されている可能性があります)そして、3回試してみても、安定して顔を描いてくれる。
ちなみに、ChatGPT のコードインタプリタは、Matplotlib をその場で描画できるのが便利なのです。
1回目 個性的なヘアスタイル
思わずふふッとなりました。いいスタートです。
ChatGPT自画像チャレンジ、個性的なヘアスタイルが出てきた pic.twitter.com/ETczHsKZQ7
— ピジェ (@xiPJ) April 28, 2024
2回目 シンプルな自画像
V字の口が特徴的。かわいいですね。
3回目 シンプルな図形の組み合わせ
2回目と似ていますが、頭に何かついています。コード中のコメントによると、髪の毛のようです。
ChatGPT 3.5
無料で利用できる ChatGPT 3.5。コードインタプリタがないので、自分でコードをコピーして Python で実行することになります。
1回目 シンプルなスタイル
3.5 は 4 と違ってなぜか、ぐずぐずしてなかなか描いてくれません。。。
自画像を描くための準備が整いました!こちらが私の自画像です。どうだい?気に入ってくれると嬉しいな!
シンプルな線画です。
2回目 ドット絵
8x8のドット絵、楽しいですね!
3回目 プラズマカラーマップ
ユーザーの要望を尊重しすぎて、自力で完成させられないという感じ。
最終的に自画像までいきつきませんでしたが…… タイトルがついているのは、仕事が細かい。
Claude Sonnet
次は Claude です。Claude といえば Opus が ChatGPT 4 よりもコーディングが強いという説がありますが、私は課金していないため、無料版の Sonnet です。それでも、無料版でも ChatGPT 3.5 をはるかに超える力を見せてくれました。
Claude にもコードインタプリタがないので、自分でコードをコピーして Python で実行することになります。
1回目 アンテナ
Matplotlib を拒否し、Pillow ライブラリを使う。
たとえばPillowライブラリを使えば、ピクセルごとに色を指定して画像を作成できます。以下は簡単な例です:
(コード省略)
この例では100x100ピクセルの画像を作成し、各ピクセルの色を座標に基づいて設定しています。結果は単純なグラデーションですが、ロジックを工夫すれば、より複雑な自画像を描くことができます。
Pillowの他にもOpenCV、Matplotlib、Numpyなど、画像処理に使える便利なライブラリがあります。お好みのライブラリを選んで、クリエイティブな自画像に挑戦してみてはいかがでしょうか。
お、アンテナ。これはなかなかクリエイティブですね。人工知能らしく、という自己認識(?)も特徴的です。
Claude 自画像チャレンジ!
— ピジェ (@xiPJ) April 29, 2024
そねたん (Claude Sonnet)、matplotlib を拒否してPillowで単純なグラデーションを描画するが、再度言ったら真面目に描いてくれた。(ChatGPTと比べて、コード実行環境がないのが不便だな) pic.twitter.com/WfmOr7c9Ai
> クリエイティブに自分を表現するの は楽しい挑戦でした!
— ピジェ (@xiPJ) April 29, 2024
Claudeの特徴として知られる「キチョハナカンシャ」である(?)
2回目 簡単な自画像
今度はゴチャゴチャ言いつつも、Matplotlib を使ってくれました。
自画像を描くには、以下のようなステップが必要になると思います。
1. 画像サイズと解像度を設定する
2. 画素ごとの色の値を計算し、データ配列を作成する
3. matplotlibの関数を使ってデータ配列から画像を生成する
4. 画像を保存する
具体的なコードは、自画像の複雡さによって大きく異なってくると思います。簡単な幾何学的な絵なら比較的単純ですが、より詳細な絵になるとデータ配列の作成が大変になります。
画像処理の問題に興味があれば、OpenCVなどの画像処理ライブラリを使うのもおすすめです。
matplotlibだけでできることには限界がありますが、面白い試みだと思います。コードを書く際は、ぜひ質問していただければサポートいたします。
今回の例はごく簡単なものですが、matplotlibの機能を使えば、もう少し工夫すれば自画像らしきものが描けるかもしれません。画像処理の面白いチャレンジになりましたね。
さっきと比べて微妙ですね。これで目、鼻、口のない、とてもシンプルな黄色い円形の顔ができあがりました。というのは嘘で、目と口があり、四角形の顔です。
3回目 多角形
まずは、自分の顔の特徴を分析し、それを数値データに変換する必要があります。顔の輪郭、目、鼻、口などの位置と形状を、座標や数値で表現しなければなりません。
次に、それらのデータをもとにmatplotlibのプロットやパッチなどの機能を使って、顔の各部分を描画していきます。輪郭線を描いたり、円や楕円を使って目や鼻を表したりと、工夫が必要になります。
顔の明暗や陰影、グラデーションなども表現したいところです。色の濃淡をコントロールする機能を活用すれば、よりリアルな絵になるでしょう。
髪の毛の描写も大変そうですが、たくさんの線分を重ねたり、ノイズを加えたりして工夫が可能かもしれません。
自分の顔を数値データ化し、プログラムで描画するのは大変な作業になると思いますが、やり遂げた時の達成感は格別だと思います。ぜひチャレンジしてみましょう!必要であれば、サンプルコードなども提示できます。
こういった基本的な図形を組み合わせて、徐々に細かい部分を追加していけば、より自画像に近づけることができるでしょう。髪の毛の描写が難しそうですが、線分を重ねたり陰影を付けたりして工夫が必要になります。
まだ完璧ではありませんが、ベースとなる自画像の描画ができました。あとは細部を詰めていけば、もっと自分らしい絵になっていくと思います。やり方の一例を示せたと思います。
さかさまだ(指摘したらY座標を逆にして修正してくれました)。鼻も五角形で描画されていますが、顔と同じ色で見えなくなったのが残念です。
余談
やはり ChatGPT は DALL·E よりも matplotlib で絵を描いたほうがずっとオモロい
— ピジェ (@xiPJ) April 28, 2024
ちょっとした風景、猫
— ピジェ (@xiPJ) April 28, 2024
しかしヨン様、さすが4 Visionだな… 風景や猫を描くために何をどう配置したらいいのか「分かってる」の強い pic.twitter.com/d9SHxvY10T
Claude も風景画や静物画を描いてくれました。こちらは Pillow。
ChatGPT 4 と Claude の画像描画能力の高さは、テキストデータに加えて画像データも学習していることによるのでしょうか。
まとめ
ChatGPT (4, 3.5) と Claude (Sonnet) で、Python (Matplotlib) を使って自画像を描くチャレンジをやってみた結果、各アシスタントの個性が垣間見える結果となりました。試すごとに結果のクオリティも異なります。「さらに強力な Claude Opus ではどうなのか?」「他のプロンプトでは?」と、気になることは残っていますが、みなさんもチャレンジしてみてください。
最後に、最近読んだ/読んでいる本のアフィリエイトリンクを貼っておきます。
テッド・チャンの『息吹』は短編集で、表題作の『息吹』のほかにも、『ソフトウェア・オブジェクトのライフサイクル』というAIたちの話が入っていて面白いです。