Skip to content

vanhdep/SecurityCam_v2

Repository files navigation

🎓 AI Security Camera — Camera An Ninh Thông Minh

— 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


📋 Mục lục


🎯 Giới thiệu

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.

Bối cảnh ứng 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

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

🏗️ Kiến trúc hệ thống

┌─────────────────────────────────────────────────────────────┐
│                     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     │
└─────────────────┘      └──────────────────┘

Luồng xử lý chính

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)

🛠️ Công nghệ sử dụng

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

🚀 Cài đặt & Chạy

Yêu cầu hệ thống

  • 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)

Bước 1 — Clone repository

git clone https://github.com/[username]/ai-security-camera.git
cd ai-security-camera

Bước 2 — Tạo môi trường ảo

python -m venv venv

# Windows
venv\Scripts\activate

# Linux / macOS
source venv/bin/activate

Bước 3 — Cài đặt thư viện

pip install -r requirements.txt

⚠️ Nếu gặp lỗi khi cài deepface, dùng lệnh:

pip install deepface -i https://mirrors.aliyun.com/pypi/simple --timeout 300

Bước 4 — Cấu hình ngrok (cho Telegram Webhook)

# Cài ngrok: https://ngrok.com/download
ngrok http 5000

Sau đó cập nhật NGROK_URL trong app.py:

NGROK_URL = "https://your-ngrok-url.ngrok-free.app"

Bước 5 — Chạy ứng dụng

python app.py

Mở trình duyệt tại: http://localhost:5000


📁 Cấu trúc thư mục

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

📖 Hướng dẫn sử dụng

1. Khởi tạo model AI

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

2. Kết nối camera

Webcam thường:

  • Chọn Camera 0 trong mục kết nối

iPhone qua Camo (USB):

  1. Cài Camo trên iPhone và Windows
  2. Cắm iPhone vào máy tính qua cáp USB
  3. Nhập URL: http://localhost:1234/video → nhấn Kết nối

3. Cấu hình vùng giám sát

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ẻ

4. Cấu hình Telegram

  1. Tạo bot qua @BotFather → lấy Token
  2. Lấy Chat ID qua @userinfobot
  3. Nhập vào tab Telegram trên web → nhấn Lưu & Test

5. Thêm người quen

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

6. Xem thống kê

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

📡 API Documentation

Camera & Detection

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

Alert

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

Người quen

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

Thống kê

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

Telegram Webhook

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

Ví dụ request /api/detect

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
}

Ví dụ response

{
  "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": []
}

📊 Kết quả thực nghiệm

Hiệu năng phát hiện người (YOLOv8n, imgsz=320)

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

Độ chính xác nhận diện khuôn mặt (DeepFace + FaceNet)

Đ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.


🔮 Hướng phát triển

  • 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)

📦 requirements.txt

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

⚠️ Lưu ý bảo mật

  • 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__/
    

🧑‍💻 Tác giả

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]
Email [tranvanh2612@gmail.com]
GitHub @username

📄 Giấy phép

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.

About

Camera an ninh AI phát hiện xâm nhập

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors