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))
Вернуться на верх