groqAPI0816 / app.py
Roberta2024's picture
Update app.py
f08045a verified
import gradio as gr
from groq import Groq
import base64
import io
from PIL import Image
def encode_image(image):
"""將PIL圖片轉換為base64編碼"""
buffered = io.BytesIO()
image.save(buffered, format="JPEG")
return base64.b64encode(buffered.getvalue()).decode("utf-8")
def analyze_image(api_key, image, prompt):
"""使用Groq API分析圖片"""
try:
# 檢查輸入
if not api_key:
return "錯誤:請輸入 API Key"
if image is None:
return "錯誤:請上傳圖片"
if not prompt.strip():
return "錯誤:請輸入提示詞"
# 初始化 Groq 客戶端
client = Groq(api_key=api_key)
# 將圖片轉換為base64
base64_image = encode_image(image)
# 建立圖片內容
image_content = {
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}
}
# 呼叫 API
completion = client.chat.completions.create(
model="meta-llama/llama-4-scout-17b-16e-instruct",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": prompt},
image_content
]
}],
temperature=1,
max_completion_tokens=512,
top_p=1,
stream=False,
stop=None,
)
# 回傳結果
return completion.choices[0].message.content
except Exception as e:
return f"發生錯誤:{str(e)}"
# 建立 Gradio 介面
def create_interface():
with gr.Blocks(title="Multidata_API_圖片分析器", theme=gr.themes.Soft()) as iface:
gr.Markdown("# 🖼️ Groq 圖片分析器")
gr.Markdown("使用 Groq API 和 Llama 模型來分析和描述圖片內容")
with gr.Row():
with gr.Column(scale=1):
# 輸入區域
api_key_input = gr.Textbox(
label="🔑 Groq API Key",
placeholder="請輸入您的 Groq API Key",
type="password"
)
image_input = gr.Image(
label="📸 上傳圖片",
type="pil",
sources=["upload", "clipboard"]
)
prompt_input = gr.Textbox(
label="💭 提示詞",
placeholder="請輸入您想要的分析要求,例如:幫我說明這張圖片,使用繁體中文",
lines=3,
value="幫我說明這張圖片,使用繁體中文"
)
analyze_btn = gr.Button("🔍 分析圖片", variant="primary")
with gr.Column(scale=1):
# 輸出區域
output_text = gr.Textbox(
label="📝 分析結果",
lines=15,
max_lines=20,
interactive=False
)
# 範例區域
with gr.Accordion("💡 使用說明", open=False):
gr.Markdown("""
### 如何使用:
1. **輸入 API Key**:在上方輸入您的 Groq API Key
2. **上傳圖片**:點擊圖片區域上傳您想分析的圖片
3. **輸入提示詞**:描述您希望 AI 如何分析這張圖片
4. **點擊分析**:點擊「分析圖片」按鈕開始分析
### 提示詞範例:
- `幫我說明這張圖片,使用繁體中文`
- `描述這張圖片中的人物、場景和活動`
- `分析這張圖片的構圖和色彩運用`
- `這張圖片可能在哪裡拍攝的?`
### 注意事項:
- 請確保您的 Groq API Key 有效且有足夠額度
- 支援的圖片格式:JPG, PNG, WEBP 等常見格式
- 圖片大小建議不超過 10MB
""")
# 綁定按鈕事件
analyze_btn.click(
fn=analyze_image,
inputs=[api_key_input, image_input, prompt_input],
outputs=output_text
)
# 也可以按 Enter 鍵觸發分析
prompt_input.submit(
fn=analyze_image,
inputs=[api_key_input, image_input, prompt_input],
outputs=output_text
)
return iface
# 啟動應用程式
if __name__ == "__main__":
app = create_interface()
app.launch(
server_name="0.0.0.0", # 允許外部訪問
server_port=7860, # 指定端口
share=False, # 設為 True 可獲得公開連結
debug=True # 開啟偵錯模式
) #