AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
96/100 第十週:📌 部署、壓縮與邊緣 AI 應用(Edge AI & Deployment)📦
96.用 Flask/Gradio 做模型 API 📡 把你的 AI 變成雲端服務!
_______________________________________
🔧 為什麼要做 API?
一個模型如果只能在本機執行,就像金子埋在地底下。你需要一個方式讓別人能「呼叫」它,這就需要用到「API」或「介面平台」。
• Flask API:讓你用 HTTP POST/GET 傳輸資料,適合與 App、網站、IoT 串接。
• Gradio UI:快速打造一個互動網頁,讓用戶上傳資料、看到模型結果。
________________________________________
🧱 第一步:準備好你的 AI 模型
這裡以一個簡單的 sklearn 類別分類模型為例(可換成你自己的模型):
python
# model_train.py
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import joblib
X, y = load_iris(return_X_y=True)
clf = LogisticRegression()
clf.fit(X, y)
joblib.dump(clf, "iris_model.pkl")
這段程式碼是用來訓練並儲存 Iris 花朵分類模型的腳本。它使用 scikit-learn 內建的 Iris 資料集,以 LogisticRegression 模型進行訓練,學習如何根據花萼與花瓣的長寬來分類花的品種。訓練完成後,透過 joblib.dump() 將模型儲存成檔案 iris_model.pkl,方便後續在 Gradio 或 Flask 的應用中直接載入使用,無需重複訓練。這是一個典型的機器學習訓練→部署流程中的「模型建立與保存」步驟。
________________________________________
🚀 第二步:用 Flask 建立 API
python
# flask_api.py
from flask import Flask, request, jsonify
import joblib
import numpy as np
app = Flask(__name__)
model = joblib.load("iris_model.pkl")
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json(force=True)
input_data = np.array(data['input']).reshape(1, -1)
prediction = model.predict(input_data)
return jsonify({'prediction': int(prediction[0])})
if __name__ == '__main__':
app.run(port=5000)
使用方式:
curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" -d '{"input": [5.1, 3.5, 1.4, 0.2]}'
這段程式碼使用 Flask 建立一個簡易的 RESTful API,讓你可以透過 POST 請求對訓練好的 iris_model.pkl 進行預測。API 的 /predict 路徑接收 JSON 格式的輸入,包含 4 個特徵(花萼長度、花萼寬度、花瓣長度、花瓣寬度),並將其轉換為 NumPy 陣列,餵給模型預測分類結果。
________________________________________
🖼 第三步:用 Gradio 打造互動網頁
python
# gradio_ui.py
import gradio as gr
import joblib
import numpy as np
model = joblib.load("iris_model.pkl")
def predict_species(sepal_length, sepal_width, petal_length, petal_width):
input_data = np.array([[sepal_length, sepal_width, petal_length, petal_width]])
prediction = model.predict(input_data)
return f"預測結果:第 {prediction[0]} 類"
interface = gr.Interface(
fn=predict_species,
inputs=[
gr.Number(label="花萼長度"),
gr.Number(label="花萼寬度"),
gr.Number(label="花瓣長度"),
gr.Number(label="花瓣寬度"),
],
outputs="text",
title="Iris 花朵分類模型",
description="輸入花朵的 4 項特徵,預測其所屬種類"
)
interface.launch()
執行方式:
python gradio_ui.py
將會自動開啟瀏覽器頁面。
這段程式碼利用 Gradio 快速打造出一個互動式網頁介面,讓使用者只需輸入 花萼長度、花萼寬度、花瓣長度、花瓣寬度,就能透過事先訓練好的 iris_model.pkl 模型進行分類預測。執行 python gradio_ui.py 後,Gradio 會自動啟動本地伺服器並在瀏覽器中開啟網頁,呈現一個簡單易用的輸入介面,讓模型部署與測試變得直觀而高效,適合快速原型開發與模型展示。
________________________________________
🧠 延伸思考與應用
• ✅ 可結合 Streamlit、FastAPI、Docker 擴充服務。
• ✅ 可部署到雲端(如 Heroku、Railway、AWS EC2)。
• ✅ 可加入 JWT 驗證、上傳圖片、語音、CSV 檔案等功能。
________________________________________
🎓 結語
無論是用 Flask 打造後端 API,或是用 Gradio 製作直觀介面,都能讓你的 AI 模型從本地跑測試,躍升為真正的「雲端智慧服務」!記住,模型不是開發的終點,而是應用的起點。