Dự án phân loại động vật sử dụng Computer Vision với 2 phương pháp:
- Handcrafted Features (HOG + Color Histogram)
- Deep Learning (ResNet50)
Animal-Classification/
├── backend/ # Flask API Server
│ ├── app.py # Main API application
│ ├── requirements.txt # Python dependencies
│ └── README.md # Backend documentation
│
├── frontend/ # Web Interface
│ ├── index.html # Main HTML page
│ ├── css/
│ │ └── styles.css # Styles
│ └── js/
│ └── main.js # JavaScript logic
│
├── Notebook/ # Jupyter Notebooks
│ └── Demo_Animal_Classification.ipynb
│
├── models/ # Trained Models (generated)
│ ├── rf_handcrafted.pkl
│ ├── svm_handcrafted.pkl
│ ├── rf_deep.pkl
│ ├── svm_deep.pkl
│ ├── scaler_handcrafted.pkl
│ ├── pca_handcrafted.pkl
│ ├── scaler_deep.pkl
│ └── pca_deep.pkl
│
├── data/ # Data directory
│ ├── afhq-raw/ # Raw dataset
│ └── processed/ # Processed data (generated)
│ ├── config.json
│ ├── labels.json
│ └── *.npy files
│
└── README.md # This file
git clone <repository-url>
cd Animal-Classification- Download AFHQ dataset từ Kaggle
- Giải nén vào thư mục
data/afhq-raw/
- Mở
Notebook/Demo_Animal_Classification.ipynb - Chạy tất cả các cells theo thứ tự
- Notebook sẽ tự động:
- Chia dữ liệu train/test
- Trích xuất đặc trưng
- Train 4 models (RF-Hand, SVM-Hand, RF-Deep, SVM-Deep)
- Lưu models và preprocessors vào thư mục
models/ - Lưu config và data vào thư mục
data/processed/
cd backend
python -m venv venv
venv\Scripts\activate # Windows
# hoặc: source venv/bin/activate # Linux/Mac
pip install -r requirements.txt
python app.pyBackend sẽ chạy tại: http://localhost:5000
Mở file frontend/index.html trong trình duyệt hoặc sử dụng Live Server.
- Truy cập frontend
- Upload ảnh động vật
- Chọn phương pháp (Handcrafted hoặc Deep Learning)
- Chọn model (SVM hoặc Random Forest)
- Click "Thực hiện Dự đoán"
- Xem kết quả phân loại
curl http://localhost:5000/api/healthcurl -X POST http://localhost:5000/api/predict \
-H "Content-Type: application/json" \
-d '{
"image": "base64_encoded_image",
"method": "handcrafted",
"model": "svm"
}'curl -X POST http://localhost:5000/api/predict-all \
-H "Content-Type: application/json" \
-d '{
"image": "base64_encoded_image"
}'- HOG (Histogram of Oriented Gradients): Trích xuất đặc trưng hình dạng
- Color Histogram: Trích xuất đặc trưng màu sắc
- PCA: Giảm chiều dữ liệu
- ResNet50: Pre-trained trên ImageNet
- Transfer Learning: Sử dụng features từ lớp áp chót (2048 chiều)
- SVM (Support Vector Machine): RBF kernel
- Random Forest: 500 trees
- Name: AFHQ (Animal Faces-HQ)
- Classes: Cat, Dog, Wild
- Split: 80% Train, 20% Test
- Flask
- NumPy
- OpenCV
- scikit-learn
- scikit-image
- PyTorch
- torchvision
- Pillow
- joblib
- Modern browser với hỗ trợ ES6+
- JavaScript enabled
- Nguyễn Bá Long (MSSV: 20120000)
- Nguyễn Công Thiết (MSSV: 20120001)
TS. Mai Tiến Dũng
Nhập môn Thị giác Máy tính - CS231.Q11
MIT License