Spaces:
Sleeping
Sleeping
| 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 # 開啟偵錯模式 | |
| ) # |