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
- Host: GitHub
- URL: https://github.com/farimah20/cctv-security-system
- Owner: Farimah20
- Created: 2025-11-22T09:31:38.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-11-22T14:29:37.000Z (7 months ago)
- Last Synced: 2025-11-22T16:25:08.922Z (7 months ago)
- Topics: 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
- Language: Python
- Homepage:
- Size: 329 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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)
---
**⭐ اگر این پروژه به کار شما آمد، لطفاً یک ست