ImageGen / gemini.py
huchiahsi's picture
Update gemini.py
9cb4e4d verified
raw
history blame contribute delete
1.71 kB
import os
from io import BytesIO
from PIL import Image
import gradio as gr
from google import genai
from google.genai import types
import logging
# ่จญๅฎš logging
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# ่จญๅฎš Gemini API ้‡‘้‘ฐ
# === ๅˆๅง‹ๅŒ– Google Gemini ===
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY")
client = genai.Client(api_key=GEMINI_API_KEY)
def generate_image(prompt):
"""
ไฝฟ็”จ Gemini API ๆ นๆ“šๆ็คบ่ฉž็”Ÿๆˆๅœ–็‰‡๏ผŒไธฆ่ฟ”ๅ›ž PIL ๅœ–ๅƒ็‰ฉไปถใ€‚
"""
response = client.models.generate_content(
model="gemini-2.0-flash-exp-image-generation",
contents=prompt,
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"]
),
)
# ่™•็†ๅ›žๆ‡‰ไธญ็š„ๅœ–็‰‡
for part in response.candidates[0].content.parts:
if part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
logging.info("ๆˆๅŠŸ็”Ÿๆˆๅœ–็‰‡ใ€‚")
return image
logging.warning("ๆœช่ƒฝ็”Ÿๆˆๅœ–็‰‡๏ผŒ่ซ‹ๅ˜—่ฉฆๅ…ถไป–ๆ็คบ่ฉžใ€‚")
return None
# ๅปบ็ซ‹ Gradio ไป‹้ข
with gr.Blocks() as demo:
gr.Markdown("## ๐Ÿ–ผ๏ธ Gemini ๅœ–็‰‡็”Ÿๆˆๅ™จ")
prompt_input = gr.Textbox(label="่ผธๅ…ฅๆ็คบ่ฉž", placeholder="ไพ‹ๅฆ‚๏ผšไธ€้šปๆˆด่‘—ๅขจ้ก็š„่ฒ“ๅœจๆฒ™็˜ไธŠ")
generate_button = gr.Button("็”Ÿๆˆๅœ–็‰‡")
image_output = gr.Image(label="็”Ÿๆˆ็š„ๅœ–็‰‡")
def on_generate(prompt):
image = generate_image(prompt)
return image
generate_button.click(fn=on_generate, inputs=prompt_input, outputs=image_output)
if __name__ == "__main__":
demo.launch()