English page   ▶AIアート トップ   ▶AIアート ブログ   ▶画像トップ  

🤖🖼 AI アート ブログ 🅰🅸 🅰🆁🆃

オリジナル AI アートに関するブログです.AIアートをつくるときは通常,英語でこまかい記述をプロンプト (呪文) としてあたえますが,そうせずに,みじかい造語や絵文字だけをつかって,AI に自由にアートをつくらせています.


ChatGPT に AI アートを分類させてみた

2024-10-14 14:00

このプロジェクトをはじめた初期には絵をみてそれに描かれたものによって絵を分類していました. しかし,絵の枚数や描画数がふえてからはつづけられませんでした. しかし,絵に描かれたものや絵の種類によって分類することは,とくに絵をみるひとにとっては重要です. そこで,ChatGPT によって分類させてみようとかんがえました.

ChatGPT4o に絵を読ませて,あらかじめあたえた分類項目のなかから,1 項目または複数項目をえらばせます.つぎの分類項目をあたえて,ランキングの高い絵 (現在 5617 枚) を分類させました (ここにはそれらの絵へのリンクを貼っています).

これらの絵すべては「★ChatGPT による分類」からアクセスできます.

ChatGPT4o の API を使用し,絵はこのサイトにある縮小版をみせました. 1 枚を解析するのに実時間で 2〜5 秒ほどかかりました. 応答のログから ChatGPT が分類したカテゴリを抽出して画像データベースに追加しています. 抽出時は下記の Hu, An, Pa などのカテゴリ略称をキーとして使用しています. 重複してえらぶことをみとめたので,半分以上の絵は抽象画に分類されています. これをさらに分類する方法もかんがえているので,ちかいうちにためしたいとおもいます.

最後に,参考のためにプログラムの主要部分をしめします.

from openai import OpenAI
import base64, requests, pprint, time, sys

MODEL = "gpt-4o"

Client = OpenAI(api_key = ʼsk-proj-xxxxxxxxxxxxxxxxʼ)

def run(ImageIDList):
    for id in ImageIDList:
        base64_image = encode_image(f"https://dasyn.com/aiart/image/{id}e.jpg")

        print(fʼ# {id}ʼ)
        question = (
            f"この絵 ({id}) はつぎのカテゴリーのうちのいずれに該当するでしょうか? "
            "複数のカテゴリーに該当する場合もありますし,いずれにも該当しないという場合もあります: "
            "Hu: 人の全身または半身の絵,An: 人以外の動物の全身または半身の絵,Pa: 人や動物の顔や目だけの絵,"
            "Pl: 生えているか活けられた植物の絵,Na: 自然の風景の絵,AS: 人工の風景の絵,"
            "Ar: 風景以外の人工物の絵,Ab: 人,動物,風景,具象的な人工物が描かれていない抽象画."
        )
        initial_time = time.time()
        response = Client.chat.completions.create(
            model = MODEL,
            messages = [
                {"role": "system", "content":
                 "あなたは絵画の解釈の専門家です.私がつくらせた AI アート作品について,おしえてください."},
                {"role": "user", "content": [
                    {"type": "text", "text": question},
                    {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}}
                ]}
            ],
            temperature = 0.0,
        )
        print(fʼ# {time.time() - initial_time}ʼ)

        content = response.choices[0].message.content

        pprint.pprint({
            "id": id,
            "question": question,
            "reply": content.replace(ʼ。ʼ, ʼ.\nʼ).replace(ʼ、ʼ, ʼ,ʼ),
        })

Dasyn.com デイシン
Created: 2024-10-14 14:00   Edited: 2024-10-16