— Học phần: Thành phố thông minh và Nông nghiệp thông minh Sinh viên thực hiện: [Đào Trần Lê Việt Anh] MSSV: [1671020009] | Lớp: [CNTT 16-02] | Năm học: 2025–2026
- Giới thiệu
- Tính năng
- Kiến trúc hệ thống
- Công nghệ sử dụng
- Cài đặt & Chạy
- Cấu trúc thư mục
- Hướng dẫn sử dụng
- API Documentation
- Kết quả thực nghiệm
- Hướng phát triển
- Tác giả
AI Security Camera là hệ thống camera an ninh thông minh ứng dụng trí tuệ nhân tạo, được xây dựng trong khuôn khổ đề tài học phần Thành phố thông minh và Nông nghiệp thông minh.
Hệ thống sử dụng mô hình YOLOv8 để phát hiện người xâm nhập theo thời gian thực, kết hợp DeepFace để nhận diện khuôn mặt người quen/người lạ, và tích hợp Telegram Bot để gửi cảnh báo tức thời đến người dùng.
Trong xu thế phát triển của thành phố thông minh (Smart City), hệ thống an ninh thông minh đóng vai trò quan trọng trong việc giám sát và bảo vệ an toàn cho các khu vực công cộng, nhà ở và cơ sở hạ tầng. Dự án này mô phỏng một node camera an ninh AI có thể triển khai trong mạng lưới IoT của thành phố thông minh.
| Tính năng | Mô tả | Trạng thái |
|---|---|---|
| 🧍 Phát hiện người | YOLOv8 real-time, độ chính xác cao | ✅ Hoàn thành |
| 👤 Nhận diện mặt | Phân biệt người quen / người lạ (DeepFace) | ✅ Hoàn thành |
| 😷 Phát hiện khẩu trang | Phát hiện người đeo/không đeo khẩu trang | ✅ Hoàn thành |
| 🗺️ Phân vùng giám sát | Vẽ zone (hình chữ nhật / đa giác / đường line) | ✅ Hoàn thành |
| 📱 Cảnh báo Telegram | Gửi ảnh + thông báo ngay khi phát hiện | ✅ Hoàn thành |
| ➕ Thêm người quen qua Telegram | Xác nhận & lưu trực tiếp từ chat Telegram | ✅ Hoàn thành |
| 📊 Thống kê theo ngày | Đếm người, giờ cao điểm, log xâm nhập | ✅ Hoàn thành |
| 📅 Báo cáo tự động | Gửi báo cáo hàng ngày lúc 20:00 qua Telegram | ✅ Hoàn thành |
| 📷 Kết nối iPhone (Camo) | Dùng iPhone làm camera qua USB/WiFi | ✅ Hoàn thành |
| 🌐 Giao diện Web | Dashboard điều khiển toàn bộ hệ thống | ✅ Hoàn thành |
┌─────────────────────────────────────────────────────────────┐
│ NGUỒN CAMERA │
│ 📷 Webcam / 📱 iPhone (Camo) / 🌐 IP Camera (RTSP) │
└─────────────────────┬───────────────────────────────────────┘
│ Video stream
▼
┌─────────────────────────────────────────────────────────────┐
│ FLASK BACKEND (app.py) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ detect.py │ │ face_db.py │ │ mask_detector.py │ │
│ │ YOLOv8 │ │ DeepFace │ │ OpenCV Haar │ │
│ │ Person Det. │ │ Face Recog. │ │ Cascade │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬──────────┘ │
│ └─────────────────┴──────────────────┘ │
│ │ │
│ ┌────────────────────────▼────────────────────────────┐ │
│ │ stats.py (Thống kê) │ │
│ │ Đếm người | Giờ cao điểm | Log xâm nhập │ │
│ └────────────────────────┬────────────────────────────┘ │
│ │ │
│ ┌────────────────────────▼────────────────────────────┐ │
│ │ telegram_alert.py (Cảnh báo) │ │
│ │ Gửi ảnh | Inline Keyboard | Webhook handler │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
│ REST API / WebSocket
┌───────────┴────────────┐
▼ ▼
┌─────────────────┐ ┌──────────────────┐
│ Web Dashboard │ │ Telegram Bot │
│ (index.html) │ │ 📲 Cảnh báo │
│ Zone config │ │ ✅ Xác nhận │
│ Stats charts │ │ 📊 Báo cáo │
└─────────────────┘ └──────────────────┘
Frame từ camera
│
▼
YOLOv8 detect người (imgsz=320, ~30ms/frame trên CPU)
│
├─── Không có người → Tiếp tục
│
▼
DeepFace nhận diện khuôn mặt
│
├─── Người quen → Thông báo nhẹ (không cảnh báo)
│
▼
Kiểm tra zone xâm nhập
│
├─── Không trong zone → Tiếp tục
│
▼
Phát hiện khẩu trang (Haar Cascade)
│
▼
Gửi cảnh báo Telegram (ảnh + nút ✅/❌)
│
▼
Ghi log thống kê (stats_log/YYYY-MM-DD.json)
| Thành phần | Công nghệ | Phiên bản |
|---|---|---|
| AI Detection | YOLOv8 (Ultralytics) | 8.x |
| Face Recognition | DeepFace + FaceNet | Latest |
| Backend | Python Flask | 3.x |
| Computer Vision | OpenCV | 4.x |
| Camera Interface | OpenCV VideoCapture + Camo | — |
| Notification | Telegram Bot API | — |
| Frontend | HTML5 + CSS3 + Vanilla JS | — |
| Model | yolov8n.pt (COCO, class: person) | nano |
- Python 3.9+
- RAM tối thiểu 4GB (khuyến nghị 8GB)
- Webcam hoặc iPhone có cài Camo (Windows)
- Tài khoản Telegram + ngrok (cho webhook)
git clone https://github.com/[username]/ai-security-camera.git
cd ai-security-camerapython -m venv venv
# Windows
venv\Scripts\activate
# Linux / macOS
source venv/bin/activatepip install -r requirements.txt
⚠️ Nếu gặp lỗi khi càideepface, dùng lệnh:pip install deepface -i https://mirrors.aliyun.com/pypi/simple --timeout 300
# Cài ngrok: https://ngrok.com/download
ngrok http 5000Sau đó cập nhật NGROK_URL trong app.py:
NGROK_URL = "https://your-ngrok-url.ngrok-free.app"python app.pyMở trình duyệt tại: http://localhost:5000
ai-security-camera/
│
├── app.py # Flask backend chính
├── detect.py # YOLOv8 person detector
├── face_db.py # Quản lý database người quen (DeepFace)
├── mask_detector.py # Phát hiện khẩu trang (Haar Cascade)
├── stats.py # Thống kê & báo cáo hàng ngày
├── telegram_alert.py # Gửi cảnh báo & xử lý webhook Telegram
├── requirements.txt # Danh sách thư viện
├── yolov8n.pt # Model YOLOv8 nano (tự động tải)
│
├── utils/
│ └── zone.py # Logic kiểm tra xâm nhập vùng
│
├── templates/
│ └── index.html # Giao diện web dashboard
│
├── known_faces/ # Database ảnh người quen
│ └── Nguyen_Van_A/
│ └── 20260101_120000.jpg
│
├── intruder_images/ # Ảnh người lạ đã phát hiện
├── stats_log/ # Log thống kê theo ngày (JSON)
│ └── 2026-06-03.json
│
├── zones.json # Cấu hình vùng giám sát
├── tg_config.json # Token & Chat ID Telegram (git-ignored)
├── pending_callbacks.json # Pending Telegram callbacks
└── pending_add.json # Hàng đợi thêm người quen
Vào tab Cài đặt trên web → chọn model (yolov8n.pt) → nhấn Khởi tạo.
| Model | Tốc độ | Độ chính xác | Khuyến nghị |
|---|---|---|---|
| yolov8n.pt | ⚡ Nhanh nhất | ★★★☆☆ | CPU không GPU |
| yolov8s.pt | ⚡⚡ Nhanh | ★★★★☆ | CPU mạnh |
| yolov8m.pt | ⚡⚡⚡ Trung bình | ★★★★★ | Có GPU |
Webcam thường:
- Chọn
Camera 0trong mục kết nối
iPhone qua Camo (USB):
- Cài Camo trên iPhone và Windows
- Cắm iPhone vào máy tính qua cáp USB
- Nhập URL:
http://localhost:1234/video→ nhấn Kết nối
Vào tab Zone → vẽ vùng giám sát lên hình ảnh camera:
- Hình chữ nhật: kéo thả để tạo vùng cấm
- Đa giác: click nhiều điểm để tạo vùng tùy ý
- Đường line: phát hiện người vượt qua đường kẻ
- Tạo bot qua @BotFather → lấy Token
- Lấy Chat ID qua @userinfobot
- Nhập vào tab Telegram trên web → nhấn Lưu & Test
Cách 1 — Upload ảnh trực tiếp:
Tab Người quen → Upload ảnh → Nhập tên → Lưu
Cách 2 — Từ cảnh báo Telegram (khuyến nghị):
Khi nhận cảnh báo người lạ → Bấm ✅ Có → Nhập tên vào chat → Hệ thống tự lưu
Tab Thống kê hiển thị:
- Tổng lượt phát hiện trong ngày
- Biểu đồ theo giờ (giờ cao điểm)
- Danh sách người quen/người lạ xuất hiện
- Nút Gửi báo cáo để gửi ngay lên Telegram
| Method | Endpoint | Mô tả |
|---|---|---|
POST |
/api/init |
Khởi tạo model YOLOv8 |
POST |
/api/detect |
Phát hiện người trong frame |
GET |
/api/ipcam/frame |
Lấy frame hiện tại từ IP camera |
POST |
/api/ipcam/connect |
Kết nối IP camera / Camo |
GET |
/ipcam/stream |
MJPEG stream |
| Method | Endpoint | Mô tả |
|---|---|---|
POST |
/api/alert |
Gửi cảnh báo người lạ lên Telegram |
POST |
/api/alert/known |
Thông báo người quen xuất hiện |
| Method | Endpoint | Mô tả |
|---|---|---|
GET |
/api/known/list |
Danh sách người quen |
POST |
/api/known/add |
Thêm người quen từ ảnh base64 |
POST |
/api/known/delete |
Xoá người quen |
POST |
/api/known/add_from_intruder |
Thêm từ ảnh người lạ đã lưu |
| Method | Endpoint | Mô tả |
|---|---|---|
GET |
/api/stats/today |
Thống kê hôm nay |
GET |
/api/stats/day/<YYYY-MM-DD> |
Thống kê ngày cụ thể |
GET |
/api/stats/report |
Tạo báo cáo dạng text |
POST |
/api/stats/send_report |
Gửi báo cáo qua Telegram |
| Method | Endpoint | Mô tả |
|---|---|---|
POST |
/api/telegram/webhook |
Nhận update từ Telegram |
POST |
/api/telegram/test |
Test kết nối bot |
GET |
/api/telegram/check_webhook |
Kiểm tra trạng thái webhook |
POST /api/detect
{
"image": "<base64_string>",
"zones": [
{
"type": "rect",
"name": "Zone A",
"x": 0.1, "y": 0.1,
"width": 0.5, "height": 0.6
}
],
"auto_zone": false,
"check_mask": true
}{
"detections": [
{
"x": 0.45, "y": 0.5, "w": 0.2, "h": 0.4,
"conf": 0.92,
"intruding": true,
"zone": "Zone A",
"is_known": false,
"known_name": "",
"masked": false
}
],
"triggered_zones": ["Zone A"],
"count": 1,
"masked_count": 0,
"known_faces": [],
"known_detected": []
}| Môi trường | FPS xử lý | Độ trễ trung bình | Ghi chú |
|---|---|---|---|
| CPU AMD Ryzen 5 | ~8–12 FPS | ~80–120ms | Laptop không GPU |
| CPU Intel i5 | ~10–15 FPS | ~65–100ms | |
| GPU NVIDIA GTX | ~25–30 FPS | ~30–40ms |
| Điều kiện | Precision | Recall |
|---|---|---|
| Ánh sáng tốt, nhìn thẳng | ~92% | ~89% |
| Ánh sáng yếu | ~78% | ~74% |
| Đeo khẩu trang | ~45% | ~40% |
📌 Ghi chú: Kết quả thực nghiệm được đo trên tập dữ liệu 50 ảnh tự thu thập trong điều kiện phòng thí nghiệm.
- Tích hợp CUDA để tăng tốc trên GPU NVIDIA
- Thêm mô hình face anti-spoofing chống giả mạo ảnh
- Triển khai lên Raspberry Pi / thiết bị nhúng
- Tích hợp cơ sở dữ liệu (SQLite/PostgreSQL) thay JSON
- Thêm xác thực đăng nhập cho web dashboard
- Hỗ trợ nhiều camera cùng lúc (multi-stream)
- Export báo cáo ra file PDF / Excel
- Tích hợp với nền tảng IoT Smart City (MQTT / Node-RED)
flask>=2.3.0
opencv-python>=4.8.0
ultralytics>=8.0.0
deepface>=0.0.79
numpy>=1.24.0
requests>=2.31.0
Pillow>=10.0.0
- Không commit file
tg_config.json(chứa token Telegram) lên GitHub - Thêm vào
.gitignore:tg_config.json known_faces/ intruder_images/ stats_log/ pending_*.json *.pt venv/ __pycache__/
| Họ tên | [Đào Trần Lê Việt Anh] |
| MSSV | [1671020009] |
| Lớp | [CNTT 16-02] |
| Trường | [Đại học Đại Nam] |
| GVHD | [Nguyễn Văn Nhân] |
| [tranvanh2612@gmail.com] | |
| GitHub | @username |
Dự án này được thực hiện cho mục đích học thuật trong khuôn khổ đồ án tốt nghiệp. © 2026 — [Đào Trần Lê Việt Anh]. All rights reserved.