ImageGen / gemini.py
huchiahsi's picture
Update gemini.py
95645e7 verified
raw
history blame
1.71 kB
import os
from io import BytesIO
from PIL import Image
import gradio as gr
import google.generativeai as genai
from google.generativeai import types
import logging
# ่จญๅฎš logging
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# ่จญๅฎš Gemini API ้‡‘้‘ฐ
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY")
genai.configure(api_key=GEMINI_API_KEY)
client = genai.Client()
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()