cuziycloud commited on
Commit
c18c336
·
verified ·
1 Parent(s): 4f6be63

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -0
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # --- Phần 1: Nhập khẩu các thư viện cần thiết ---
2
+ import gradio as gr
3
+ from transformers import AutoImageProcessor, SiglipForImageClassification
4
+ from PIL import Image
5
+ import torch
6
+
7
+ # --- Phần 2: Tải mô hình AI và bộ xử lý ảnh từ Hugging Face ---
8
+ # (Chỉ chạy một lần khi ứng dụng khởi động)
9
+ model_name = "prithivMLmods/Dog-Breed-120"
10
+ print("Bắt đầu tải model và processor... Quá trình này có thể mất vài phút.")
11
+ processor = AutoImageProcessor.from_pretrained(model_name)
12
+ model = SiglipForImageClassification.from_pretrained(model_name)
13
+ print("Tải model và processor thành công!")
14
+
15
+ # Chuyển mô hình sang "chế độ dự đoán" để tối ưu hóa hiệu suất
16
+ model.eval()
17
+
18
+ # --- Phần 3: Định nghĩa hàm dự đoán chính ---
19
+ # (Hàm này sẽ được gọi mỗi khi người dùng nhấn nút Submit)
20
+ def predict(image):
21
+ # Dùng processor để xử lý ảnh đầu vào thành định dạng mà mô hình có thể hiểu
22
+ inputs = processor(images=image, return_tensors="pt")
23
+
24
+ # Đưa ảnh đã xử lý vào mô hình để nhận kết quả
25
+ # torch.no_grad() giúp chạy nhanh hơn vì không cần tính toán cho việc training
26
+ with torch.no_grad():
27
+ outputs = model(**inputs)
28
+
29
+ # Lấy ra điểm số thô (logits) từ kết quả của mô hình
30
+ logits = outputs.logits
31
+
32
+ # Tìm ra VỊ TRÍ của giống chó có điểm số (logit) cao nhất
33
+ predicted_class_idx = logits.argmax(-1).item()
34
+
35
+ # Dùng vị trí đó để tra cứu TÊN THẬT của giống chó trong "cuốn sổ" của mô hình
36
+ breed_name = model.config.id2label[predicted_class_idx]
37
+
38
+ # Tính toán ĐIỂM TIN CẬY (xác suất) cho giống chó đó
39
+ # Bằng cách áp dụng hàm softmax rồi lấy ra giá trị tại vị trí đã dự đoán
40
+ confidence_score = torch.nn.functional.softmax(logits, dim=1)[0][predicted_class_idx].item()
41
+
42
+ # Định dạng kết quả trả về dưới dạng chuỗi văn bản đẹp mắt, ví dụ: "beagle (17.7%)"
43
+ return f"{breed_name} ({confidence_score:.1%})"
44
+
45
+ # --- Phần 4: Tạo và khởi chạy giao diện người dùng với Gradio ---
46
+ iface = gr.Interface(
47
+ fn=predict,
48
+ inputs=gr.Image(type="pil", label="Tải ảnh chú chó của bạn lên đây"),
49
+ outputs=gr.Textbox(label="Kết quả dự đoán"),
50
+ title="AI Nhận Diện Giống Chó 🐶",
51
+ description="Ứng dụng này sử dụng mô hình AI 'Dog-Breed-120' để nhận diện 120 giống chó khác nhau. Hãy thử tải một bức ảnh lên!",
52
+ )
53
+
54
+ iface.launch()