gojok / gemini.py
burhansyam's picture
Update gemini.py
c877d69 verified
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):
"""
Menggunakan Gemini API untuk menghasilkan gambar berdasarkan prompt,
dan mengembalikan objek gambar 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("Gambar berhasil dihasilkan.")
return image
logging.warning("Gagal menghasilkan gambar. Coba prompt lain.")
return None
# 建立 Gradio 介面
with gr.Blocks() as demo:
gr.Markdown("## 🖼️ Gemini Gambar Generator")
prompt_input = gr.Textbox(label="Masukkan Prompt", placeholder="Contoh: Seekor kucing memakai kacamata hitam di pantai")
generate_button = gr.Button("Hasilkan Gambar")
image_output = gr.Image(label="Gambar yang Dihasilkan")
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()