Summary: Tạo ứng dụng Gradio phân loại giống (hoặc nhận dạng cá thể) và triển khai lên Hugging Face Spaces. Tối ưu tốc độ, bật queue, cấu hình thẻ SEO cơ bản và custom domain.
Mục lục
Kiến trúc app
Cấu trúc dự án
Gradio Blocks + hàng đợi
Dùng ONNX Runtime trên CPU
SEO metadata cơ bản cho Spaces
Custom domain (khái niệm)
Đo lường với UTM & Analytics
Further reading
- Kiến trúc app
Tệp app.py chạy Gradio UI
Model ONNX chạy bằng onnxruntime CPU
requirements.txt khai báo phụ thuộc
Thêm vài ảnh mẫu để dùng thử
- Cấu trúc dự án
/pet-app/
app.py
petbreed.onnx
classes.txt
requirements.txt
sample/
corgi.jpg
poodle.jpg
requirements.txt:
gradio==4.44.0
onnxruntime==1.18.0
opencv-python-headless==4.10.0
numpy
- Gradio Blocks + queue
import gradio as gr
import onnxruntime as ort
import numpy as np, cv2
sess = ort.InferenceSession("petbreed.onnx", providers=["CPUExecutionProvider"])
CLASSES = open("classes.txt").read().splitlines()
def preprocess(img):
x = cv2.resize(img, (224,224))[:,:,::-1].astype(np.float32)/255.0
x = np.transpose(x, (2,0,1))[None]
return x
def predict(img):
x = preprocess(img)
logits = sess.run(None, {"input": x})[0][0]
logits -= logits.max()
p = np.exp(logits); p /= p.sum()
topk = p.argsort()[-3:][::-1]
return {CLASSES[i]: float(p[i]) for i in topk}
with gr.Blocks(title="Pet Breed Classifier") as demo:
gr.Markdown("# Pet Breed Classifier\nUpload an image to get top-3 predictions.")
with gr.Row():
inp = gr.Image(type="numpy", label="Upload")
out = gr.Label(num_top_classes=3, label="Prediction")
btn = gr.Button("Predict")
btn.click(fn=predict, inputs=inp, outputs=out)
gr.Examples(
examples=["sample/corgi.jpg", "sample/poodle.jpg"],
inputs=inp
)
demo.queue(concurrency_count=2, max_size=16).launch()
- Dùng ONNX Runtime trên CPU
Với model nhẹ, CPU đủ nhanh.
Nếu cần GPU, chọn Space type GPU và cài onnxruntime-gpu.
- SEO metadata cơ bản cho Spaces
Trong Blocks(title=...) đã có title. Có thể thêm mô tả ngắn bằng Markdown đầu trang: 1–2 câu nêu tác dụng app + từ khóa tự nhiên (pet breed classifier, dog/cat, demo). Tránh nhồi từ khóa.
- Custom domain (khái niệm)
Spaces hỗ trợ gắn domain tuỳ chọn (tùy điều kiện hiện hành).
Lợi ích: thương hiệu nhất quán, dễ chia sẻ.
Thao tác: cấu hình DNS → xác thực → trỏ tới Space (xem doc hiện thời của Hugging Face).
- Đo lường với UTM & Analytics
Khi chia sẻ link trên X/Reddit/Pinterest, thêm UTM (?utm_source=qiita&utm_medium=post).
Có thể gắn Google Analytics theo hướng dẫn của Spaces (nếu hỗ trợ ở thời điểm bạn triển khai).
- Further reading
Gradio Docs
Hugging Face Spaces Docs
ONNX Runtime Docs