Gemini 2.0 экспериментальная генерация изображений в django
Я работаю над веб-приложением с бэкендом django. Это связано с генерацией изображений с последовательностью персонажей, у нас наконец-то есть модель, которая хорошо работает для этого, gemini 2.0 flash experimental. Я генерирую персонажа с помощью openAI, а затем передаю его в качестве ссылки на gemini через API с запросом на генерацию изображения. Код отлично работает в jupyter notebook, однако в django он выдает ошибку. Я не уверен, как ее исправить. Вот код, который работает в jupyter notebook:
А вот код в django, который выдает ошибку:
def generate_image_gemini(prompt, reference_image=None):
"""
Generate images using Google's Gemini API.
Parameters:
- prompt (str): Text description of the desired image
- reference_image (PIL.Image, optional): Reference image for character consistency
Returns:
- Generated image as PIL Image object and response text
"""
try:
print(f"Generating image with Gemini: {prompt[:100]}...")
if reference_image:
# Save the reference image temporarily
temp_image_path = 'temp_reference_image.png'
reference_image.save(temp_image_path)
print(f"Reference image saved to {temp_image_path}")
# Reload the image to ensure correct format
pil_image = Image.open(temp_image_path)
# Create content with both text and image
contents = [
f"Generate an illustration based on this description: '{prompt}'. Include this character in the scene.",
pil_image
]
else:
# Text-only prompt
contents = [f"Generate an illustration based on this description: '{prompt}'"]
# Make the API call
response = gemini_client.models.generate_content(
model="gemini-2.0-flash-exp",
contents=contents,
config=types.GenerateContentConfig(
response_modalities=['Text', 'Image']
)
)
# Process the response
generated_image = None
response_text = ""
for part in response.candidates[0].content.parts:
if part.text is not None:
response_text += part.text
elif part.inline_data is not None:
# Decode the base64 image data
image_data = base64.b64decode(part.inline_data.data)
# Open the image
generated_image = Image.open(BytesIO(image_data))
# Save the image
image_path = f'gemini_image_{int(time.time())}.png'
generated_image.save(image_path)
print(f"Gemini image saved to {image_path}")
return generated_image, response_text
except Exception as e:
print(f"Error generating image with Gemini: {e}")
return None, f"Error: {str(e)}"
И следующая ошибка:
Gemini image generation failed: cannot identify image file <_io.BytesIO object at 0x000001DDD95A2D90>
Я перепробовал множество решений, предоставленных ChatGPT и Claude, но я хожу по кругу. Файл ссылки сохраняется и загружается без проблем, но Gemini не возвращает изображение или то, что он возвращает, не сохраняется. Буду очень признателен за любые идеи/предложения.
genai
библиотека использует необработанные байты данных в качестве формата данных ответа для изображений, поэтому вы можете опустить декодирование base64.
Вместо
image_data = base64.b64decode(part.inline_data.data)
# Open the image
generated_image = Image.open(io.BytesIO(image_data))
сделать
# Open the image
generated_image = Image.open(io.BytesIO(part.inline_data.data))