Tenho várias imagens de animais no mesmo diretório do script. Como posso modificar o script a seguir para processar uma imagem, mas forçar a saída a ser apenas uma seleção única de uma lista:
from pathlib import Path
import base64
import requests
def encode_image_to_base64(image_path):
"""Convert an image file to base64 string."""
return base64.b64encode(image_path.read_bytes()).decode('utf-8')
def extract_text_from_image(image_path):
"""Send image to local Llama API and get text description."""
base64_image = encode_image_to_base64(image_path)
payload = {
"model": "llama3.2-vision",
"stream": False,
"messages": [
{
"role": "user",
"content": (
"With just one word, classify this image into one of these exact categories:\n"
"- dog\n"
"- cat\n"
"- butterfly\n"
),
"images": [base64_image]
}
]
}
response = requests.post(
"http://localhost:11434/api/chat",
json=payload,
headers={"Content-Type": "application/json"}
)
return response.json().get('message', {}).get('content', 'No text extracted')
def process_directory():
"""Process all images in current directory and create text files."""
for image_path in Path('.').glob('*'):
if image_path.suffix.lower() in {'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp'}:
print(f"\nProcessing {image_path}...")
text = extract_text_from_image(image_path)
image_path.with_suffix('.txt').write_text(text, encoding='utf-8')
print(f"Created {image_path.with_suffix('.txt')}")
process_directory()
No entanto, apesar da engenharia de prompt diferente, recebo algumas respostas que farão mais do que apenas selecionar de uma lista. Por exemplo, pode ocasionalmente gerar " Da imagem, há um inseto alado, portanto meu palpite é "borboleta". RESPOSTA: Borboleta. " Se eu definir a lista como allowed_options = ['dog', 'cat', 'butterfly']
eu quero que ela produza apenas uma única string dessa lista e nada mais.