DigiP-AI's picture
Update app.py
5489ddf verified
raw
history blame
3.27 kB
import gradio as gr
from PIL import Image
from io import BytesIO
import base64
import requests
import os
import random
import torch
import subprocess
import numpy as np
import cv2
from transformers import AutoProcessor, AutoModelForCausalLM
from diffusers import DiffusionPipeline
from datetime import datetime
from mistralai import Mistral
from theme import theme
from fastapi import FastAPI
app = FastAPI()
api_key = os.getenv("MISTRAL_API_KEY")
Mistralclient = Mistral(api_key=api_key)
def flip_image(x):
return np.fliplr(x)
def encode_image(image_path):
"""Encode the image to base64."""
try:
# Open the image file
image = Image.open(image_path).convert("RGB")
# Resize the image to a height of 512 while maintaining the aspect ratio
base_height = 512
h_percent = (base_height / float(image.size[1]))
w_size = int((float(image.size[0]) * float(h_percent)))
image = image.resize((w_size, base_height), Image.LANCZOS)
# Convert the image to a byte stream
buffered = BytesIO()
image.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
return img_str
except FileNotFoundError:
print(f"Error: The file {image_path} was not found.")
return None
except Exception as e: # Add generic exception handling
print(f"Error: {e}")
return None
def feifeichat(image):
try:
model = "pixtral-large-2411"
# Define the messages for the chat
base64_image = encode_image(image)
messages = [{
"role":
"user",
"content": [
{
"type": "text",
"text": "Please provide a detailed description of this photo"
},
{
"type": "image_url",
"image_url": f"data:image/jpeg;base64,{base64_image}"
},
],
"stream": False,
}]
partial_message = ""
for chunk in Mistralclient.chat.stream(model=model, messages=messages):
if chunk.data.choices[0].delta.content is not None:
partial_message = partial_message + chunk.data.choices[
0].delta.content
yield partial_message
except Exception as e: # Add common exception handling
print(f"Error: {e}")
return "Please upload a photo"
with gr.Blocks(theme=theme, elem_id="app-container") as app:
gr.Markdown("Image To Flux Prompt")
with gr.Tab(label="Image To Prompt"):
with gr.Row():
with gr.Column():
input_img = gr.Image(label="Input Picture",height=320,type="filepath")
submit_btn = gr.Button(value="Submit", variant='primary')
with gr.Column():
output_text = gr.Textbox(label="Flux Prompt", show_copy_button = True)
clr_button =gr.Button("Clear",variant="primary", elem_id="clear_button")
clr_button.click(lambda: gr.Textbox(value=""), None, output_text)
submit_btn.click(feifeichat, [input_img], [output_text])
if __name__ == "__main__":
app.launch()