画像解析って?
ChatGPTは文字だけではなく画像の内容を答えてもらうといった使い方が可能です。
写真から風景のイメージを答えてもらったり、紙から文字起こしをしてもらったり様々な利用が可能です。
日本最大のゲーム技術カンファレンス『CEDEC2024』では、ゲーム画面をAIに解析させて入力を操作させる検証で、実際にAIがゲームをプレイしているでも映像も公開されていました。
このように画像解析はAIが人の領域に近付くために必要な重要なファクターです!
注意点
上記のゲームプレイのデモ中にも指摘されていましたが、画像解析は送信するデータ量が大きくなりがちです。
利用する際は画像サイズや頻度に注意して利用しましょう。
画像解析の方法
画像解析はAPI自体の公式ドキュメントに利用方法は書いてあるものの、OpenAI .NET API libraryには殆ど利用方法の記載がありません。
ただGitHub上でライブラリ内のコードを見ていると画像を送信に含める機能が存在する事が分かります。
正直、使い方が間違っている可能性もありますが、自分は下記の方法で画像解析を実行しています。
public async void AnalyzeImage() { // 取得したAPIキーをここに入力 var apiKey = "your-api-key-here"; // OpenAIの制御用クライアントを作成 OpenAIClient client = new OpenAIClient(new ApiKeyCredential(apiKey)); // 利用したいモデルを指定(細かい判断をするにはgpt-4oがお勧めです) var model = "gpt-4o-mini"; // Chat用のClientを取得 ChatClient chat = client.GetChatClient(model);nt(); List<ChatMessage> chatMessages = new List<ChatMessage>(); // AIに送るメッセージ string message = "画像の中の風景を教えて"; chatMessages.Add(new UserChatMessage(message)); // 画像ファイルのバイナリデータを取得 string path = "images/test.jpg"; byte[] imageData = File.ReadAllBytes(path); var data = new BinaryData(imageData); // 送信する画像データをContentに登録 userMessage.Content.Add(ChatMessageContentPart.CreateImagePart(data, "image/jpeg")); // チャットの送信 var response = await chat.CompleteChatAsync(chatMessages); // ChatGPTの返答 var responseText = response.Value.Content[0].Text; Console.WriteLine($"ChatGPTの応答:{message}"); }
これで画像を送って解析することが出来ます。
試しにこの画像を使って『画像の中の風景を教えて』という指示で解析してみました。
出力結果
画像には、自転車が前景にあり、バックグラウンドには多くの人々とテントが立ち並んでいる憩いの風景が見えます。自転車は道路の脇に置かれており、その後ろには川と広い緑地が広がっています。人々が楽しんでいる様子や、ピクニックのような集まりが見受けられます。全体的に、晴れた日で賑やかな雰囲気のアウトドアシーンです。
画像の送信処理
今回追加した重要な処理は下記です。
// 画像ファイルのバイナリデータを取得 string path = "images/test.jpg"; byte[] imageData = File.ReadAllBytes(path); var data = new BinaryData(imageData); // 送信する画像データをContentに登録 userMessage.Content.Add(ChatMessageContentPart.CreateImagePart(data, "image/jpeg"));
pngやjpegといった画像ファイルのバイナリとフォーマットをContentに追加するだけで解析が出来ました!
このようにC#でも簡単に行えますので、必要に応じて是非活用してみてください。
画像の解析を使いこなせばAIの世界がまた1つ広がっていきます!
補足
URLでの送信
画像ファイルは直接バイナリを渡さずにURL経由で送る事も可能です。
// URLで画像を指定 var url = new Uri("https://gameworkslab.jp/wp-content/uploads/2025/01/test.jpg"); // 送信する画像リンクをContentに登録 userMessage.Content.Add(ChatMessageContentPart.CreateImagePart(url));
データ量が大きい場合はURLで送り付ける方法もあります。
どちらにしろ画像は適切なサイズにした方が良いですが、こういった方法も1つの手段です。
Base64での送信
画像ファイルはBase64形式でURLにして送る事も可能です。
string base64String = Convert.ToBase64String(data); // URL形式でbase64をを作成 var base64Url = new Uri($"data:image/{file.Extension};base64,{base64String}");
最もデータの送信に制限がある方法なので、個人的にはお勧めしません。