readme
This commit is contained in:
@@ -1,19 +1,148 @@
|
|||||||
# README
|
# CatBreed - Cat Breed Recognition Desktop Application
|
||||||
|
|
||||||
## About
|
A deep learning-based cat breed recognition desktop application built with Wails framework, supporting image upload, breed prediction, and history management.
|
||||||
|
|
||||||
This is the official Wails Preact-TS template.
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
You can configure the project by editing `wails.json`. More information about the project settings can be found
|
## Features
|
||||||
here: https://wails.io/docs/reference/project-config
|
|
||||||
|
|
||||||
## Live Development
|
- **📸 Image Upload** - Drag & drop or click to upload cat photos (JPG/PNG/JPEG)
|
||||||
|
- **🔍 Breed Recognition** - Recognizes 12 common cat breeds based on ResNet18 deep residual network
|
||||||
|
- **📊 Confidence Display** - Shows model prediction confidence percentage
|
||||||
|
- **📜 History** - Auto-saves each recognition record with pagination support
|
||||||
|
- **🗑️ Record Management** - Delete individual records or clear all history
|
||||||
|
- **💾 Local Storage** - Uses SQLite database for history data
|
||||||
|
|
||||||
To run in live development mode, run `wails dev` in the project directory. This will run a Vite development
|
## Architecture
|
||||||
server that will provide very fast hot reload of your frontend changes. If you want to develop in a browser
|
|
||||||
and have access to your Go methods, there is also a dev server that runs on http://localhost:34115. Connect
|
|
||||||
to this in your browser, and you can call your Go code from devtools.
|
|
||||||
|
|
||||||
## Building
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Wails Framework │
|
||||||
|
├──────────────────────┬──────────────────────────────┤
|
||||||
|
│ Frontend (Preact) │ Backend (Go) │
|
||||||
|
│ ───────────────── │ ────────────────────────── │
|
||||||
|
│ • Main.tsx │ • app.go (API) │
|
||||||
|
│ • History.tsx │ • types.go (Data Models) │
|
||||||
|
│ • Modal.tsx │ • ONNX Runtime Inference │
|
||||||
|
│ • Component Logic │ • GORM + SQLite │
|
||||||
|
└──────────────────────┴──────────────────────────────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ ONNX Model │
|
||||||
|
│ ResNet18 │
|
||||||
|
│ 12 Classes │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
To build a redistributable, production mode package, use `wails build`.
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
dissertation/
|
||||||
|
├── backend/ # Go backend
|
||||||
|
│ ├── app.go # Core business logic
|
||||||
|
│ └── types.go # Data structure definitions
|
||||||
|
├── core/ # Python ML module
|
||||||
|
│ ├── nets/ # Neural network definitions
|
||||||
|
│ │ ├── resnet.py # ResNet base class
|
||||||
|
│ │ └── resnet18.py # ResNet18 model
|
||||||
|
│ ├── dataloader/ # Data loading
|
||||||
|
│ ├── train/ # Training scripts
|
||||||
|
│ │ ├── train_resnet18.py # Model training
|
||||||
|
│ │ └── to_onnx.py # PyTorch → ONNX conversion
|
||||||
|
│ └── const/ # Hyperparameter configuration
|
||||||
|
├── frontend/ # Preact + TypeScript frontend
|
||||||
|
│ └── src/
|
||||||
|
│ └── components/ # React-style components
|
||||||
|
│ ├── Main.tsx # Main page (upload/recognition)
|
||||||
|
│ └── History.tsx # History page
|
||||||
|
├── static/images/ # Uploaded image storage directory
|
||||||
|
└── app.db # SQLite database
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
- Go 1.21+
|
||||||
|
- Node.js 18+
|
||||||
|
- Python 3.9+ (for model training)
|
||||||
|
- Wails CLI
|
||||||
|
|
||||||
|
### Install Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Wails CLI
|
||||||
|
go install github.com/wailsapp/wails/v2/cmd/wails@latest
|
||||||
|
|
||||||
|
# Install frontend dependencies
|
||||||
|
cd frontend
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Return to project root
|
||||||
|
cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run the Application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Development mode
|
||||||
|
wails dev
|
||||||
|
|
||||||
|
# Production build
|
||||||
|
wails build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Model Training (Optional)
|
||||||
|
|
||||||
|
To retrain the model:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd core/train
|
||||||
|
|
||||||
|
# Train ResNet18
|
||||||
|
python train_resnet18.py
|
||||||
|
|
||||||
|
# Export to ONNX format
|
||||||
|
python to_onnx.py
|
||||||
|
```
|
||||||
|
|
||||||
|
The trained model file `resnet18_epoch_50.onnx` should be placed in the `build/bin` directory of the output.
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
### Inference Pipeline
|
||||||
|
|
||||||
|
1. **Image Preprocessing** - Resize uploaded image to 224×224, apply ImageNet normalization
|
||||||
|
- Mean: `[0.485, 0.456, 0.406]`
|
||||||
|
- Std: `[0.229, 0.224, 0.225]`
|
||||||
|
2. **Tensor Format** - Convert to NCHW format `(1, 3, 224, 224)`
|
||||||
|
3. **ONNX Inference** - Execute inference via ONNX Runtime Go
|
||||||
|
4. **Post-processing** - Softmax for confidence calculation, return highest probability class
|
||||||
|
|
||||||
|
### Data Models
|
||||||
|
|
||||||
|
| Table | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| `breeds` | Cat breed table (code, name, brief description) |
|
||||||
|
| `history` | Recognition history (image, breed, confidence, timestamp) |
|
||||||
|
|
||||||
|
## UI Preview
|
||||||
|
|
||||||
|
### Main Page
|
||||||
|
- Upload area supports drag & drop
|
||||||
|
- Real-time image preview
|
||||||
|
- One-click breed recognition
|
||||||
|
- Result display with confidence progress bar
|
||||||
|
|
||||||
|
### History Page
|
||||||
|
- Paginated history records
|
||||||
|
- Click image to view details
|
||||||
|
- Single/batch delete functionality
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|||||||
Reference in New Issue
Block a user