画像生成AI 2026.05.22
AI生成画像の見分け方【2026年版】無料ツール5選+Claude Vision自動判定コード
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 Moderation | AIモデル | 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