sovarares/Smart-CCTV
GitHub: sovarares/Smart-CCTV
基于 Python 和 OpenCV 的本地智能监控系统,集成实时移动侦测、音视频录制、邮件告警与 LSB 隐写证据防篡改验证。
Stars: 0 | Forks: 0
# 智能 CCTV
一个基于 Python 的智能监控原型系统,它结合了实时移动侦测、实时 MJPEG 流媒体传输、音视频同步录制、电子邮件警报,以及用于防篡改视觉证据的 LSB 隐写术。
## 概述
Smart CCTV 是一个轻量级的监控系统,旨在本地运行,无需专用的 GPU 或云处理服务。该应用程序分析连续的摄像头帧,检测显著的移动,记录事件,发送电子邮件警报,并存储包含隐藏安全代码的受保护 PNG 证据图像。
该项目专注于三个主要领域:
- 实时多媒体处理;
- 本地边缘计算监控;
- 通过 LSB 隐写术进行证据完整性验证。
## 主要功能
- 使用 OpenCV 进行实时网络摄像头监控
- 通过帧差分和轮廓分析进行移动侦测
- 高斯滤波、阈值化和形态学膨胀
- 检测到移动时自动录制音频和视频
- 将同步的 A/V 导出为 MP4
- 通过本地 Flask Web 界面进行实时 MJPEG 流媒体传输
- 包含受保护 PNG 证据图像的电子邮件警报
- 使用 LSB 隐写术嵌入警报 ID 和时间戳
- 用于提取和验证隐藏代码的独立工具
- 多线程架构,实现非阻塞式捕获、警报、音频和多路复用
- 等待媒体处理完成的受控关机机制
## 工作原理
1. 应用程序捕获连续的两帧视频画面。
2. 它们的绝对差值被转换为灰度图。
3. 高斯模糊用于减少摄像头噪声。
4. 阈值化和膨胀操作用于隔离相关的移动区域。
5. 小于配置的最小面积的轮廓将被忽略。
6. 当检测到移动时:
- 开始音频和视频录制;
- 将第一个证据帧保存为 PNG;
- 使用 LSB 隐写术将安全字符串嵌入图像中;
- 异步发送电子邮件警报。
7. 在没有移动并经过配置的宽限期后,录制停止。
8. MoviePy 将临时的音频和视频文件合并为最终的 MP4。
9. `verifica_stegano.py` 可以从 PNG 证据中提取隐藏的安全代码。
## 技术栈
- **Python**
- **OpenCV** — 视频捕获和图像处理
- **Flask** — 本地 Web 界面和 MJPEG 流媒体传输
- **NumPy** — 矩阵和位级操作
- **SoundDevice** — 音频捕获
- **SciPy** — WAV 文件生成
- **MoviePy / FFmpeg** — 音视频同步和 MP4 导出
- **SMTP / MIME** — 电子邮件警报
- **Threading** — 并发处理
## 项目结构
```
Smart-CCTV/
├── SmartCCTV.py # Main surveillance application
├── verifica_stegano.py # LSB evidence verification utility
├── Documentatie.docx # Technical documentation
├── Prezentare CCTV.pptx # Project presentation
├── folder_video/ # Generated recordings
└── folder_stegano/ # Protected PNG evidence images
```
输出文件夹将在应用程序启动时自动创建。
## 环境要求
- Python 3.8 或更高版本
- 网络摄像头
- 麦克风
- 用于发送电子邮件警报的网络连接
- MoviePy 的 FFmpeg 支持
## 安装说明
克隆仓库:
```
git clone https://github.com/sovarares/Smart-CCTV.git
cd Smart-CCTV
```
创建并激活虚拟环境:
```
python -m venv .venv
```
Windows:
```
.venv\Scripts\activate
```
Linux/macOS:
```
source .venv/bin/activate
```
安装依赖项:
```
pip install opencv-python numpy sounddevice scipy Flask moviepy==1.0.3 imageio-ffmpeg
```
## 电子邮件配置
**不要在源代码中直接存储电子邮件密码。**
更新 `SmartCCTV.py` 以从环境变量中读取配置:
```
EMAIL_SENDER = os.getenv("EMAIL_SENDER")
EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")
EMAIL_RECEIVER = os.getenv("EMAIL_RECEIVER")
Set the variables before running the project.
```
Windows PowerShell:
```
$env:EMAIL_SENDER="sender@gmail.com"
$env:EMAIL_PASSWORD="your-app-password"
$env:EMAIL_RECEIVER="receiver@example.com"
```
Linux/macOS:
```
export EMAIL_SENDER="sender@gmail.com"
export EMAIL_PASSWORD="your-app-password"
export EMAIL_RECEIVER="receiver@example.com"
```
请使用应用专用密码,而不是主账户密码。
## 运行应用程序
```
python SmartCCTV.py
```
在浏览器中打开本地界面:
```
http://127.0.0.1:5000
```
要从连接到同一本地网络的其他设备进行访问:
```
http://:5000
```
使用 **OPREȘTE CAMERA** 按钮可安全停止系统,并允许所有正在活动的媒体处理线程完成工作。
## 生成的文件
### 视频录制
最终录制内容存储在:
```
folder_video/alertaN_COMPLET.mp4
```
每个最终文件都包含同步的视频和音频。
### 受保护的证据图像
证据图像存储在:
```
folder_stegano/dovada_alertaN.png
```
该图像包含类似以下的隐藏代码:
```
SECURED_alertaN_HHMMSS
```
由于证据存储为无损 PNG 格式,编辑或有损重新压缩可能会破坏嵌入的信息,从而表明文件已被篡改。
## 验证证据完整性
将证据图像放入 `folder_stegano`,然后运行:
```
python verifica_stegano.py
```
该实用程序会扫描所有匹配以下格式的文件:
```
folder_stegano/dovada_*.png
```
有效的图像将提取出安全代码。被修改或不受支持的图像可能会导致解码过程失败。
## 作者
**Șova Ioan-Rareș**
自动控制与计算机学院
POLITEHNICA Bucharest
科学指导:**Conf. dr. ing. Ștefan Mocanu**
标签:Python, 图像处理, 数据隐写, 无后门, 视频监控, 边缘计算, 运动检测, 逆向工具, 音频视频同步