55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Analyse une image avec l'API Gemini et écrit le résultat dans un fichier.
|
|
Usage: python3 gemini_analyze_frame.py <image_path> <output_path>
|
|
|
|
La clé API Google doit être dans /tmp/gkey.txt (écrite par l'utilisateur
|
|
car Hermes masque les clés API dans tous les outils).
|
|
"""
|
|
import subprocess, base64, json, sys, os
|
|
|
|
IMAGE_PATH = sys.argv[1]
|
|
OUTPUT_PATH = sys.argv[2]
|
|
|
|
# Lire la clé depuis le fichier (contourne le masking Hermes)
|
|
with open("/tmp/gkey.txt") as f:
|
|
API_KEY = f.read().strip()
|
|
|
|
# Encoder l'image
|
|
with open(IMAGE_PATH, "rb") as f:
|
|
img_b64 = base64.b64encode(f.read()).decode()
|
|
|
|
# Construire la requête Gemini
|
|
body = {
|
|
"contents": [{
|
|
"parts": [
|
|
{"text": "Décris précisément cette image. Interface, texte, boutons, cases cochées, rôles, menus — tout ce qui est visible. Réponds en français."},
|
|
{"inline_data": {"mime_type": "image/png", "data": img_b64}}
|
|
]
|
|
}]
|
|
}
|
|
|
|
# Appeler Gemini (curl pour éviter les timeouts Python HTTP)
|
|
result = subprocess.run([
|
|
"curl", "-s",
|
|
"--max-time", "30",
|
|
"-H", "Content-Type: application/json",
|
|
"-d", json.dumps(body),
|
|
f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={API_KEY}"
|
|
], capture_output=True, text=True, timeout=35)
|
|
|
|
data = json.loads(result.stdout)
|
|
|
|
if "error" in data:
|
|
print(f"API ERROR: {data['error']}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
text = data["candidates"][0]["content"]["parts"][0]["text"]
|
|
|
|
# Écrire dans le fichier de sortie (contourne CCR)
|
|
with open(OUTPUT_PATH, "w") as f:
|
|
f.write(text)
|
|
|
|
print(f"✅ {len(text)} chars → {OUTPUT_PATH}")
|
|
print(text[:300])
|