画像生成AI 2026.05.22

AI生成画像の見分け方【2026年版】無料ツール5選+Claude Vision自動判定コード

タグ:AI画像 / フェイク判定 / ディープフェイク検出 / 画像検証 / 2026年

AI画像が判別しづらい理由(2026年現状)

2026年現在、DALL-E 3・Midjourney v7・Stable Diffusion 3・Adobe Fireflyの性能は格段に向上しました。特に手指・テキスト・照明の弱点が改善され、目視だけでの判定が難しくなっています。

目視チェックリスト(3分で完了)

✅ 手と指: 指の本数が5本か、関節が自然か
✅ テキスト: 看板・書籍の文字が正確に読めるか
✅ 物理法則: 影の方向、照明の当たり方が統一されているか
✅ 対称性: 顔・眼鏡・耳飾りが左右対称か
✅ 背景: 物体の境界線が不自然にボケていないか
✅ メタデータ: カメラ情報(EXIF)が存在するか

無料判定ツール5選

ツール判定方式精度目安
AIorNot(Hugging Face)機械学習分類85〜90%
Illuminarty深層学習80〜88%
Hive ModerationAIモデル85%+
FotForensicsメタデータ+ノイズ解析メタデータ依存
Google画像検索逆検索流通確認のみ

Claude Vision APIで自動判定する

# ai_image_detector.py
# Claude Vision APIでAI生成画像を自動判定する

import anthropic
import base64
from pathlib import Path

client = anthropic.Anthropic()

DETECTION_PROMPT = """この画像がAI生成(人工知能による生成)かどうかを判定してください。

以下の観点を分析してください:
1. 手と指の自然さ(本数・関節・爪)
2. テキスト・文字の読み取り可否
3. 照明と影の整合性
4. 肌・素材の質感の自然さ
5. 背景の自然なボケ具合
6. 顔の左右対称性(人物がいる場合)
7. 細部の解像度の一貫性
8. 物体の物理的整合性
9. 全体的な「作られた感」
10. プロの写真技術との比較

最後に「AI生成の可能性: 高/中/低」と理由を一文で教えてください。"""

def detect_ai_image(image_path: str) -> dict:
    """画像ファイルからAI生成かどうかを判定する"""
    image_data = base64.standard_b64encode(Path(image_path).read_bytes()).decode("utf-8")
    
    ext = Path(image_path).suffix.lower()
    media_type = {
        ".jpg": "image/jpeg", ".jpeg": "image/jpeg",
        ".png": "image/png", ".webp": "image/webp"
    }.get(ext, "image/jpeg")
    
    response = client.messages.create(
        model="claude-sonnet-4-5",  # Visionは高精度モデルで
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": media_type,
                        "data": image_data,
                    }
                },
                {"type": "text", "text": DETECTION_PROMPT}
            ]
        }]
    )
    
    analysis = response.content[0].text
    tokens_used = response.usage.input_tokens + response.usage.output_tokens
    cost_usd = (tokens_used * 3.0) / 1_000_000  # Sonnet $3/1M
    
    return {
        "analysis": analysis,
        "image": image_path,
        "tokens": tokens_used,
        "estimated_cost_usd": round(cost_usd, 4)
    }

# 使用例(1画像あたり約$0.003)
result = detect_ai_image("suspicious_photo.jpg")
print(result["analysis"])
print(f"判定コスト: ${result['estimated_cost_usd']}")

バッチで複数画像を判定する

# batch_image_checker.py
# フォルダ内の画像をまとめて判定(Batches APIで50%オフ)

import anthropic
from pathlib import Path
import base64
import time

client = anthropic.Anthropic()

def check_images_batch(image_dir: str) -> str:
    """フォルダ内の全画像をバッチで判定(通常の50%コスト)"""
    images = list(Path(image_dir).glob("*.{jpg,jpeg,png,webp}"))
    
    requests = []
    for img_path in images:
        img_data = base64.standard_b64encode(img_path.read_bytes()).decode()
        requests.append({
            "custom_id": str(img_path),
            "params": {
                "model": "claude-haiku-4-5-20251001",  # バッチは安いモデルで
                "max_tokens": 256,
                "messages": [{
                    "role": "user",
                    "content": [
                        {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": img_data}},
                        {"type": "text", "text": "AI生成画像かどうか。「AI生成の可能性: 高/中/低」の一行だけ答えて。"}
                    ]
                }]
            }
        })
    
    batch = client.beta.messages.batches.create(requests=requests)
    print(f"{len(images)}枚をバッチ送信: {batch.id}")
    print(f"推定コスト: ${len(images) * 0.0002:.4f}(通常の50%)")
    return batch.id

あわせて読みたい

参考ソース