An open API service indexing awesome lists of open source software.

https://github.com/farimah20/cctv-security-system

AI-Powered CCTV Security Monitor with Theft Detection
https://github.com/farimah20/cctv-security-system

ai cctv computer-vision cross-platform deep-learning fastapi flutter jwt machine-learning mobile-app object-detection opencv python-3 real-time rest-api security sqlalchemy surveillance yolo

Last synced: 2 months ago
JSON representation

AI-Powered CCTV Security Monitor with Theft Detection

Awesome Lists containing this project

README

          

# 🎥 سیستم نظارت هوشمند دوربین مداربسته با تشخیص دزدی

یک سیستم نظارت پیشرفته با قابلیت تشخیص خودکار رفتارهای مشکوک و دزدی با استفاده از هوش مصنوعی (YOLO) و ارسال اعلان به اپلیکیشن موبایل.

---

## 📋 فهرست مطالب

- [ویژگی‌های پروژه](#ویژگی‌های-پروژه)
- [تکنولوژی‌های استفاده شده](#تکنولوژی‌های-استفاده-شده)
- [ساختار پروژه](#ساختار-پروژه)
- [نصب و راه‌اندازی](#نصب-و-راه‌اندازی)
- [راهنمای استفاده](#راهنمای-استفاده)
- [توضیحات فنی](#توضیحات-فنی)
- [API Documentation](#api-documentation)
- [Screenshots](#screenshots)
- [مشارکت](#مشارکت)
- [لایسنس](#لایسنس)

---

## 🌟 ویژگی‌های پروژه

### Backend (سرور)
- ✅ **تشخیص اشیا و افراد** با استفاده از YOLO v8
- ✅ **تحلیل رفتار** و تشخیص موارد مشکوک:
- حرکت سریع (فرار احتمالی)
- توقف طولانی‌مدت (پارک مشکوک)
- حرکات نامنظم
- ✅ **سیستم احراز هویت** کامل با JWT Token
- ✅ **بازیابی رمز عبور** از طریق ایمیل
- ✅ **ذخیره خودکار** تصاویر رویدادها
- ✅ **API RESTful** کامل با FastAPI
- ✅ **پایگاه داده** با SQLAlchemy
- ✅ **سیستم اعلان** (Push Notification + Email)

### Frontend (اپلیکیشن موبایل)
- ✅ **رابط کاربری زیبا** با Flutter
- ✅ **صفحه ورود و ثبت‌نام**
- ✅ **داشبورد** با نمایش آمار
- ✅ **لیست رویدادها** با قابلیت فیلتر
- ✅ **نمایش جزئیات** هر رویداد
- ✅ **مدیریت پروفایل** کاربر
- ✅ **Pull to Refresh** برای به‌روزرسانی

---

## 🛠 تکنولوژی‌های استفاده شده

### Backend
- **Python 3.10+**
- **FastAPI** - وب فریمورک مدرن و سریع
- **YOLOv8 (Ultralytics)** - تشخیص اشیا با یادگیری عمیق
- **OpenCV** - پردازش تصویر و ویدیو
- **SQLAlchemy** - ORM برای مدیریت دیتابیس
- **SQLite/PostgreSQL** - پایگاه داده
- **PyTorch** - فریمورک یادگیری عمیق
- **Pydantic** - اعتبارسنجی داده
- **Passlib & python-jose** - امنیت و JWT

### Frontend
- **Flutter 3.x** - فریمورک UI کراس‌پلتفرم
- **Dart** - زبان برنامه‌نویسی
- **Provider** - مدیریت State
- **HTTP** - ارتباط با API
- **SharedPreferences** - ذخیره‌سازی محلی

### Tools
- **Anaconda** - مدیریت محیط‌های Python
- **Git** - کنترل نسخه
- **Docker** (اختیاری) - containerization

---

## 📁 ساختار پروژه

```
cctv_security_system/
├── backend/ # سرور Python
│ ├── app/
│ │ ├── api/ # API Endpoints
│ │ │ ├── __init__.py
│ │ │ ├── auth.py # Authentication APIs
│ │ │ ├── events.py # Event Management APIs
│ │ │ ├── users.py # User Management APIs
│ │ │ └── files.py # File Upload/Download APIs
│ │ │
│ │ ├── core/ # تنظیمات اصلی
│ │ │ ├── __init__.py
│ │ │ ├── config.py # تنظیمات برنامه
│ │ │ ├── database.py # اتصال به دیتابیس
│ │ │ ├── security.py # توابع امنیتی (JWT, Hash)
│ │ │ └── dependencies.py # Dependencies برای FastAPI
│ │ │
│ │ ├── models/ # مدل‌های دیتابیس
│ │ │ ├── __init__.py
│ │ │ ├── user.py # مدل کاربر
│ │ │ ├── event.py # مدل رویداد
│ │ │ └── password_reset.py # مدل بازیابی رمز
│ │ │
│ │ ├── schemas/ # Pydantic Schemas
│ │ │ ├── __init__.py
│ │ │ ├── user.py # Schema های کاربر
│ │ │ └── event.py # Schema های رویداد
│ │ │
│ │ ├── services/ # Business Logic
│ │ │ ├── __init__.py
│ │ │ ├── auth_service.py # سرویس احراز هویت
│ │ │ ├── event_service.py # سرویس مدیریت رویدادها
│ │ │ └── notification_service.py # سرویس اعلان‌رسانی
│ │ │
│ │ ├── detection/ # سیستم تشخیص AI
│ │ │ ├── __init__.py
│ │ │ ├── object_detector.py # تشخیص اشیا با YOLO
│ │ │ ├── behavior_analyzer.py # تحلیل رفتار
│ │ │ ├── surveillance_system.py # سیستم نظارت یکپارچه
│ │ │ └── integrated_surveillance.py # یکپارچه‌سازی با DB
│ │ │
│ │ └── main.py # نقطه شروع برنامه
│ │
│ ├── database/ # فایل‌های دیتابیس
│ │ └── cctv_security.db # SQLite database
│ │
│ ├── uploads/ # فایل‌های آپلود شده
│ │ ├── detections/ # تصاویر رویدادهای تشخیص داده شده
│ │ └── users/ # فایل‌های کاربران
│ │
│ ├── logs/ # لاگ‌های سیستم
│ │
│ ├── requirements.txt # وابستگی‌های Python
│ ├── test_database.py # تست پایگاه داده
│ ├── test_auth.py # تست احراز هویت
│ ├── test_detection.py # تست سیستم تشخیص
│ └── test_api.py # تست APIها

├── mobile_app/ # اپلیکیشن موبایل Flutter
│ ├── lib/
│ │ ├── config/ # تنظیمات اپلیکیشن
│ │ │ └── app_config.dart # URL های API و ثابت‌ها
│ │ │
│ │ ├── models/ # مدل‌های داده
│ │ │ └── event_model.dart # مدل رویداد
│ │ │
│ │ ├── providers/ # State Management
│ │ │ ├── auth_provider.dart # مدیریت احراز هویت
│ │ │ └── event_provider.dart # مدیریت رویدادها
│ │ │
│ │ ├── services/ # سرویس‌های اپلیکیشن
│ │ │ ├── api_service.dart # ارتباط با Backend API
│ │ │ └── storage_service.dart # ذخیره‌سازی محلی
│ │ │
│ │ ├── screens/ # صفحات اپلیکیشن
│ │ │ ├── login_screen.dart # صفحه ورود
│ │ │ ├── register_screen.dart # صفحه ثبت‌نام
│ │ │ └── home_screen.dart # صفحه اصلی/داشبورد
│ │ │
│ │ └── main.dart # نقطه شروع اپلیکیشن
│ │
│ ├── android/ # تنظیمات Android
│ ├── ios/ # تنظیمات iOS (اختیاری)
│ ├── linux/ # تنظیمات Linux Desktop
│ ├── pubspec.yaml # وابستگی‌های Flutter
│ └── README.md

├── test_videos/ # ویدیوهای تست
│ └── people_test.mp4

├── .gitignore
└── README.md # این فایل
```

---

## 🚀 نصب و راه‌اندازی

### پیش‌نیازها

- Python 3.10 یا بالاتر
- Anaconda
- Flutter SDK 3.x
- Git
- (اختیاری) Android Studio برای Build کردن APK

### مرحله ۱: کلون کردن پروژه

```bash
git clone https://github.com/YOUR_USERNAME/cctv-security-system.git
cd cctv-security-system
```

### مرحله ۲: راه‌اندازی Backend

```bash
# ایجاد محیط مجازی Anaconda
conda create -n cctv_monitor python=3.10 -y
conda activate cctv_monitor

# نصب وابستگی‌ها
cd backend
pip install -r requirements.txt

# ایجاد دیتابیس و تست
python test_database.py

# اجرای سرور
python -m app.main
```

سرور روی `http://localhost:8000` اجرا می‌شود.

**API Documentation:** `http://localhost:8000/docs`

### مرحله ۳: راه‌اندازی اپلیکیشن موبایل

```bash
cd mobile_app

# نصب وابستگی‌ها
flutter pub get

# تنظیم IP سرور
# فایل lib/config/app_config.dart را ویرایش کنید
# baseUrl را به IP کامپیوتر خود تغییر دهید

# اجرا روی Linux Desktop
flutter run -d linux

# یا اجرا روی Chrome
flutter run -d chrome

# یا Build کردن APK
flutter build apk --release
```

---

## 📖 راهنمای استفاده

### 1️⃣ ثبت‌نام و ورود

#### از طریق اپلیکیشن موبایل:
1. اپلیکیشن را باز کنید
2. روی **Register** کلیک کنید
3. اطلاعات خود را وارد کنید:
- Username: حداقل 3 کاراکتر
- Email: یک ایمیل معتبر
- Password: حداقل 8 کاراکتر (شامل حروف بزرگ، کوچک و عدد)
4. **Create Account** را بزنید
5. با اطلاعات وارد شوید

#### از طریق API:
```bash
curl -X POST "http://localhost:8000/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "Test1234"
}'
```

### 2️⃣ راه‌اندازی سیستم نظارت

```bash
cd backend
conda activate cctv_monitor

# اجرای سیستم نظارت با دوربین
python app/detection/integrated_surveillance.py

# یا با ویدیوی تست
python app/detection/integrated_surveillance.py
# وارد کنید: ../test_videos/people_test.mp4
```

**User ID:** ID کاربری که رویدادها به آن تخصیص داده می‌شود (پیش‌فرض: 1)

### 3️⃣ مشاهده رویدادها

در اپلیکیشن موبایل:
- داشبورد نمایش می‌دهد: تعداد کل رویدادها، رویدادهای خوانده نشده
- روی هر رویداد کلیک کنید برای مشاهده جزئیات
- **Mark as Read** برای علامت‌گذاری به عنوان خوانده شده
- Pull to Refresh برای به‌روزرسانی

### 4️⃣ بازیابی رمز عبور

1. در صفحه Login روی **Forgot Password** کلیک کنید
2. ایمیل خود را وارد کنید
3. لینک بازیابی به ایمیل شما ارسال می‌شود
4. روی لینک کلیک کنید و رمز جدید وارد کنید

---

## 🔧 توضیحات فنی

### معماری سیستم

```
┌─────────────────┐
│ Mobile App │
│ (Flutter) │
└────────┬────────┘
│ HTTP/REST

┌────────▼────────┐ ┌──────────────┐
│ FastAPI │◄─────┤ Database │
│ Backend │ │ (SQLite) │
└────────┬────────┘ └──────────────┘


┌────────▼────────┐
│ AI Detection │
│ (YOLO v8) │
└────────┬────────┘

┌────────▼────────┐
│ Camera/Video │
│ Input │
└─────────────────┘
```

### سیستم تشخیص

#### 1. Object Detection (تشخیص اشیا)
- مدل: YOLOv8 Nano (سبک و سریع)
- کلاس‌های قابل تشخیص: 80 کلاس COCO Dataset
- اصلی‌ترین کلاس‌ها: person, backpack, handbag, suitcase
- Confidence Threshold: 0.5 (قابل تنظیم)

#### 2. Object Tracking (ردیابی اشیا)
- الگوریتم: Nearest Neighbor Matching
- تاریخچه موقعیت: 30 فریم اخیر
- محاسبه سرعت، جهت حرکت، فاصله طی شده

#### 3. Behavior Analysis (تحلیل رفتار)

**رفتارهای قابل تشخیص:**

1. **Fast Movement (حرکت سریع)**
- شرط: سرعت > 15 پیکسل در فریم
- کاربرد: تشخیص فرار بعد از دزدی

2. **Loitering (توقف مشکوک)**
- شرط: ایستادن بیش از 150 فریم (5 ثانیه)
- کاربرد: شناسایی افراد مشکوک

3. **Erratic Movement (حرکت نامنظم)**
- شرط: بیش از 5 تغییر جهت در 15 فریم
- کاربرد: رفتار غیرعادی

#### 4. Event Storage (ذخیره رویداد)

هر رویداد شامل:
- نوع رویداد
- توضیحات
- میزان اطمینان (0-1)
- تصویر رویداد
- زمان وقوع
- موقعیت مکانی (اختیاری)

### سیستم احراز هویت

#### JWT Token Structure:
```json
{
"sub": "username",
"user_id": 1,
"email": "user@example.com",
"exp": 1234567890
}
```

#### Password Security:
- Hash Algorithm: Bcrypt
- Salt Rounds: خودکار
- Password Requirements:
- حداقل 8 کاراکتر
- شامل حروف بزرگ و کوچک
- شامل عدد

### Database Schema

#### Users Table
```sql
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
is_superuser BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP
);
```

#### Events Table
```sql
CREATE TABLE events (
id INTEGER PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
event_type VARCHAR(50) NOT NULL,
description TEXT,
image_path VARCHAR(500),
confidence FLOAT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_read BOOLEAN DEFAULT FALSE,
camera_id VARCHAR(50),
latitude FLOAT,
longitude FLOAT
);
```

---

## 🌐 API Documentation

### Authentication Endpoints

#### POST `/auth/register`
ثبت‌نام کاربر جدید

**Request Body:**
```json
{
"username": "string",
"email": "string",
"password": "string"
}
```

**Response: 201 Created**
```json
{
"id": 1,
"username": "testuser",
"email": "test@example.com",
"is_active": true,
"created_at": "2024-01-01T12:00:00"
}
```

---

#### POST `/auth/login`
ورود کاربر

**Request Body:**
```json
{
"username": "testuser",
"password": "Test1234"
}
```

**Response: 200 OK**
```json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer"
}
```

---

### User Endpoints (نیاز به Authentication)

#### GET `/users/me`
دریافت اطلاعات کاربر فعلی

**Headers:**
```
Authorization: Bearer
```

**Response: 200 OK**
```json
{
"id": 1,
"username": "testuser",
"email": "test@example.com",
"is_active": true
}
```

---

### Event Endpoints

#### GET `/events/user/{user_id}`
دریافت رویدادهای یک کاربر

**Query Parameters:**
- `page`: شماره صفحه (پیش‌فرض: 1)
- `page_size`: تعداد آیتم در هر صفحه (پیش‌فرض: 20)
- `unread_only`: فقط رویدادهای خوانده نشده (پیش‌فرض: false)

**Response: 200 OK**
```json
{
"total": 100,
"unread": 5,
"events": [...],
"page": 1,
"page_size": 20
}
```

---

#### GET `/events/user/{user_id}/statistics`
دریافت آمار رویدادها

**Query Parameters:**
- `days`: تعداد روزهای گذشته (پیش‌فرض: 7)

**Response: 200 OK**
```json
{
"total_events": 50,
"by_type": {
"fast_movement": 20,
"loitering": 15,
"erratic_movement": 15
},
"by_day": {...},
"average_confidence": 0.75
}
```

### مستندات کامل API:

بعد از اجرای سرور، به آدرس زیر مراجعه کنید:
- Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`

---

## 📸 Screenshots

### صفحه ورود
```
┌─────────────────────────────┐
│ 🔒 Security Icon │
│ CCTV Security Monitor │
│ │
│ ┌─────────────────────┐ │
│ │ Username/Email │ │
│ └─────────────────────┘ │
│ ┌─────────────────────┐ │
│ │ Password 👁️ │ │
│ └─────────────────────┘ │
│ │
│ [ Login ] │
│ │
│ Don't have account? │
│ Register | Forgot? │
└─────────────────────────────┘
```

### داشبورد
```
┌─────────────────────────────┐
│ Welcome back, User 🔔 3 │
│ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ 50 │ │ 3 │ │ 12 │ │
│ │Total│ │Unrd │ │Week │ │
│ └─────┘ └─────┘ └─────┘ │
│ │
│ Recent Events │
│ ┌─────────────────────┐ │
│ │ 🏃 Fast Movement │ │
│ │ 2 hours ago • 87% │ │
│ └─────────────────────┘ │
└─────────────────────────────┘
```

---

## 🧪 تست

### تست Backend

```bash
cd backend
conda activate cctv_monitor

# تست پایگاه داده
python test_database.py

# تست احراز هویت
python test_auth.py

# تست سیستم تشخیص
python test_detection.py

# تست APIها
python test_api.py
```

### تست اپلیکیشن موبایل

```bash
cd mobile_app

# تست واحد
flutter test

# اجرا در حالت دیباگ
flutter run -d linux --debug

# بررسی کیفیت کد
flutter analyze
```

---

## 🐛 عیب‌یابی مشکلات رایج

### مشکل: سرور اجرا نمی‌شود

```bash
# بررسی پورت 8000
lsof -i :8000

# Kill کردن پروسه قبلی
kill -9 $(lsof -t -i:8000)

# اجرای مجدد
python -m app.main
```

### مشکل: دوربین کار نمی‌کند

```bash
# بررسی دوربین‌های موجود
v4l2-ctl --list-devices

# تست با OpenCV
python -c "import cv2; print(cv2.VideoCapture(0).isOpened())"
```

### مشکل: YOLO مدل دانلود نمی‌شود

```bash
# دانلود دستی
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

# قرار دادن در پوشه پروژه
mv yolov8n.pt backend/
```

### مشکل: اپلیکیشن به Backend متصل نمی‌شود

1. IP را بررسی کنید: `hostname -I`
2. فایروال را غیرفعال کنید: `sudo ufw allow 8000`
3. CORS را بررسی کنید در `main.py`

---

## 📈 بهبودهای آینده

- [ ] افزودن Firebase Push Notification
- [ ] پشتیبانی از چند دوربین همزمان
- [ ] تشخیص چهره (Face Recognition)
- [ ] گزارش‌گیری و نمودارها
- [ ] نقشه برای نمایش موقعیت دوربین‌ها
- [ ] ضبط ویدیو در زمان رویداد
- [ ] تنظیمات حساسیت تشخیص
- [ ] پشتیبانی از Dark Mode
- [ ] نسخه Web Panel
- [ ] یکپارچگی با سیستم‌های اسمارت هوم

---

## 👨‍💻 توسعه‌دهنده

**نام:** [farimah]
**ایمیل:** [farimah001199@gmail.com]
**GitHub:** [@farimah20](https://github.com/farimah20)
**لینکدین:** [www.linkedin.com/in/fatemeh-dadkhah-ml

]

---

## 🤝 مشارکت

مشارکت شما در بهبود این پروژه استقبال می‌شود!

### نحوه مشارکت:

1. Fork کنید
2. Branch جدید بسازید (`git checkout -b feature/AmazingFeature`)
3. تغییرات خود را Commit کنید (`git commit -m 'Add some AmazingFeature'`)
4. Push کنید (`git push origin feature/AmazingFeature`)
5. Pull Request باز کنید

### گزارش باگ:

از طریق [Issues](https://github.com/farimah20/cctv-security-system/issues) گزارش دهید.

---

## 📄 لایسنس

این پروژه تحت لایسنس MIT منتشر شده است - فایل [LICENSE](LICENSE) را برای جزئیات بیشتر مشاهده کنید.

---

## 🙏 تشکر و قدردانی

- [FastAPI](https://fastapi.tiangolo.com/) - فریمورک وب
- [Ultralytics](https://ultralytics.com/) - YOLO مدل
- [Flutter](https://flutter.dev/) - فریمورک موبایل
- [OpenCV](https://opencv.org/) - کتابخانه پردازش تصویر

---

## 📞 پشتیبانی

اگر سوالی دارید یا به کمک نیاز دارید:

- 📧 ایمیل: [farimah001199@gmail.com]

- 🐛 Issues: [GitHub Issues](https://github.com/farimah20/cctv-security-system/issues)

---

**⭐ اگر این پروژه به کار شما آمد، لطفاً یک ست