import gradio as gr from groq import Groq import base64 import io from PIL import Image def encode_image(image): """將圖片編碼為base64格式""" buffered = io.BytesIO() image.save(buffered, format="JPEG") return base64.b64encode(buffered.getvalue()).decode("utf-8") def analyze_image(api_key, image, prompt): """分析圖片的主要函數""" try: # 檢查輸入 if not api_key: return "請輸入有效的 Groq API Key" if image is None: return "請上傳一張圖片" if not prompt: return "請輸入分析提示詞" # 編碼圖片 base64_image = encode_image(image) image_content = { "type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"} } # 初始化 Groq 客戶端 client = Groq(api_key=api_key) # 發送請求 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 界面 with gr.Blocks(title="多模態API圖片分析工具", theme=gr.themes.Soft()) as demo: gr.Markdown(""" # 🔍 Groq 圖片分析工具 使用 Groq 的 Llama 4 Scout 模型來分析圖片內容 """) with gr.Row(): with gr.Column(scale=1): # API Key 輸入 api_key_input = gr.Textbox( label="Groq API Key", placeholder="輸入您的 Groq API Key (gsk_...)", type="password", info="您的 API Key 將保密處理" ) # 圖片上傳 image_input = gr.Image( label="上傳圖片", type="pil", sources=["upload", "clipboard"], height=300 ) # Prompt 輸入 prompt_input = gr.Textbox( label="分析提示詞", placeholder="請輸入您想要分析的內容...", lines=4, value="""幫我算出有幾個人和大象,同時說明 這可能是什麼儀式? 天氣和季節在某個時段? 在什麼國家?""" ) # 分析按鈕 analyze_btn = gr.Button("🚀 開始分析", variant="primary", size="lg") with gr.Column(scale=1): # 結果顯示 result_output = gr.Textbox( label="分析結果", lines=15, max_lines=20, show_copy_button=True, placeholder="分析結果將顯示在這裡..." ) # 範例區域 with gr.Row(): gr.Examples( examples=[ ["分析這張圖片中的物體和場景"], ["描述這張圖片的顏色、構圖和視覺元素"], ["識別圖片中的文字內容"], ["分析這張圖片的情感和氛圍"], ["統計圖片中的人數和動物數量"] ], inputs=[prompt_input], label="範例提示詞" ) # 綁定事件 analyze_btn.click( fn=analyze_image, inputs=[api_key_input, image_input, prompt_input], outputs=[result_output] ) # 使用說明 with gr.Accordion("📖 使用說明", open=False): gr.Markdown(""" ### 如何使用: 1. **取得 API Key**: 前往 [Groq Console](https://console.groq.com/) 註冊並取得 API Key 2. **輸入 API Key**: 在上方欄位輸入您的 Groq API Key 3. **上傳圖片**: 點擊上傳區域選擇圖片,或直接拖拽圖片到上傳區域 4. **輸入提示詞**: 描述您想要分析的內容 5. **開始分析**: 點擊「開始分析」按鈕 ### 支援的圖片格式: - JPEG, PNG, GIF, WebP - 建議圖片大小不超過 10MB ### 注意事項: - API Key 僅在當前會話中使用,不會被保存 - 請確保您的 Groq 帳戶有足夠的使用額度 - 分析時間取決於圖片大小和網路狀況 """) # 啟動應用 if __name__ == "__main__": demo.launch( server_name="0.0.0.0", server_port=7860, share=False, debug=True )