3riy/Road-Incident-Detection-and-SMS-Alert-System
GitHub: 3riy/Road-Incident-Detection-and-SMS-Alert-System
基于计算机视觉和T5大模型的实时道路事故检测系统,通过YOLO/MobileNet识别碰撞、火灾、拥堵等事件,自动生成自然语言报告并通过Twilio发送短信告警。
Stars: 1 | Forks: 0
# 🚨 实时道路事故/危险检测与 SMS 预警通知系统
### 一个使用 Computer Vision (MobileNet/YOLO)、基于 AI 的事故报告 (T5) 以及通过 Flask 仪表板进行即时 SMS 预警 (Twilio) 的实时道路事故检测系统。
# 目录
* [📝 概述](#overview)
* [🧩 核心功能](#core-features)
* [💥 CV/YOLO 模型可检测的事故](#incidents-the-cvyolo-model-detects)
* [📹 项目演示图片](#project-demo-images)
* [⚙️ 技术栈](#technology-stack)
* [🔄 流程](#flow)
* [🖧 图表](#diagram)
* [📝 步骤](#steps)
* [📁 项目结构](#project-structure)
* [🐍 Root Python 模块](#root-python-modules)
* [📹 Mobilenet 模型文件夹](#model-folder)
* [🎨 UI 层](#ui-layer)
* [🧪 依赖项](#dependencies)
* [🔧 配置指南](#configuration-guide)
* [💬 创建免费 Twilio 账户](#step-1---create-a-free-twilio-account)
* [⛁ 创建免费 MongoDB Atlas 账户](#step-2---create-a-free-mongodb-atlas-account)
* [🚀 运行应用程序的步骤](#steps-to-run-the-application)
* [💪 开发挑战](#development-challenges)
* [✅ 结语](#final-notes)
* [许可证](#license)
## 概述
该系统持续监控视频源,检测危险,使用 T5 生成自然语言事故报告,并通过 SMS 向响应人员发出警报。
### 核心功能
* 📹 **实时视频分析** (OpenCV + MobileNet SSD + 可选 YOLO)
* 🧠 **自动事故报告** 使用 T5 模型
* 🕹️ **控制员验证界面**
* ✉️ **通过 Twilio 发送 SMS/WhatsApp**
* 📱 **移动应用通知**
* 🌐 **Flask 仪表板** 用于实时监控
### CV/YOLO 模型可检测的事故
YOLO 模型经过预训练,可以检测各种物体,例如汽车、公共汽车、机动三轮车、建筑物、树木以及狗和猫。
* 车辆碰撞 💥 (车辆边界框接触/重叠逻辑)
* 交通拥堵 🚧 (邻近度和聚类逻辑)
* 火灾 🔥 (HSV 颜色检测逻辑)
* 行人被车辆撞击 💥 (近似邻近度逻辑)
## 项目演示图片
对于我们的黑客马拉松演示,我们使用玩具车来模拟真实的汽车碰撞。可以看到汽车周围有边界框以及置信度分数。
- 目标检测中的 置信度分数 是一个数值(通常在 0 到 1 之间),表示机器学习模型对预测物体存在及其分类正确性的确定程度
同时发生或重叠的多个事故也将显示,如下所示:
检测到事故(在本例中为火灾)后,将通过 Twilio API 触发 SMS 警报。
事故数据将记录到 MongoDB 数据库中。
## 技术栈
### Web 与后端框架


**- flask**: Web 服务器、路由、仪表板、控制员 UI
**- gunicorn**: 生产环境 WSGI 服务器 (部署)
### 计算机视觉 (CV) 技术栈


**- opencv-python**: 带有 GUI 支持的 OpenCV (本地测试)
**- opencv-python-headless**: 用于服务器/Docker 的无头 OpenCV
**- ultralytics**: YOLOv8 (可选的实时目标检测)
### 深度学习 / AI 组件




**- torch**: T5 的 PyTorch 后端 + 模型推理
**- transformers**: HuggingFace Transformers (T5 模型)
**- sentencepiece**: T5 的分词器依赖
**- tokenizers**: 快速分词器库 (HF)
**- scikit-learn**: ML 实用工具 (聚类逻辑、指标)
**- datasets**: HuggingFace 数据集加载器 (可选)
**- pandas**: 日志和表格的数据处理
### 数据库层

**- pymongo[srv]**: MongoDB Atlas 连接器 (SRV 协议)
### 消息传递 / API 集成

**- twilio**: SMS 通知 API
### 实用工具 (可选)


**- numpy**: 用于 CV + ML 的数值运算
**- matplotlib**: 调试视觉效果、热图、绘图
### AI 工具
**- ChatGPT**: 用于生成 'ResQ' 标志
## 流程
### 图表
```
Camera → OpenCV Detection → Incident? → T5 Report → Twilio SMS Dispatch
```
### 步骤
1. 📡 捕获视频源。
2. 🧠 运行 CV 事故检测。
3. 📝 生成 AI 叙述。
4. 📤 SMS/WhatsApp 分发。
5. 🚑 通知响应人员 (救护车/警察/消防站)。
## 项目结构
```
resq/
├── app.py
├── main.py
├── detector.py
├── t5_generator.py
├── db_utils.py
├── sms_utils.py
├── resources.py
├── config.py
├── requirements.txt
├── mobilenet/
│ ├── MobileNetSSD_deploy.prototxt
│ └── MobileNetSSD_deploy.caffemodel
├── templates/
│ ├── index.html
│ └── history.html
└── static/
```
### Root Python 模块
#### `app.py` — Flask 后端与分发引擎
管理 Web 仪表板、路由、视频源、T5 pipeline、Twilio SMS、MongoDB 日志记录和资源分配。
#### `detector.py` — 实时 CV Pipeline
处理 MobileNet SSD 检测、火灾检测、碰撞逻辑、拥堵聚类、边界框以及 AI 报告触发。
#### `main.py` — 事故分类
实现聚类、重叠检测、事件合并和优先级评分。
#### `t5_generator.py`
生成叙述性事故报告和后续事件预测。
#### `db_utils.py`
MongoDB 日志记录实用工具。
#### `sms_utils.py`
最小的 Twilio SMS 发送器。
#### `resources.py`
定义紧急接收号码。
#### `config.py`
包含 Twilio/MongoDB 凭证、模型名称、服务器设置。
### 模型文件夹
MobileNet SSD 预训练模型文件。
### UI 层
#### `index.html`
仪表板(视频源 + 实时生成的事故数据)
#### `history.html`
日志历史(从 MongoDB 动态获取)
### 依赖项
#### `requirements.txt`
```
## --- Web & Backend 框架 --- ##
flask # Web server, routes, dashboard, controller UI
gunicorn # Production WSGI server (deployment)
## --- Computer Vision (CV) 技术栈 --- ##
opencv-python # OpenCV with GUI support (local testing)
opencv-python-headless # Headless OpenCV for servers / Docker
ultralytics # YOLOv8 (optional real-time object detection)
## --- Deep Learning / AI 组件 --- ##
torch # PyTorch backend for T5 + model inference
transformers # HuggingFace Transformers (T5 model)
sentencepiece # Tokenizer dependency for T5
tokenizers # Fast tokenizer library (HF)
scikit-learn # ML utilities (clustering logic for jams, metrics)
datasets # HuggingFace dataset loader (optional)
pandas # Data handling for logs and tables
## --- Database 层 --- ##
pymongo[srv] # MongoDB Atlas connector (SRV protocol)
## --- Messaging / API 集成 --- ##
twilio # SMS / WhatsApp notifications API
## --- Utilities (可选) --- ##
numpy # Numerical operations used across CV + ML
matplotlib # Debug visuals, heatmaps, plotting
```
## 配置指南
以下是运行应用程序前所需的 **所有设置步骤**。
### 步骤 1 - 创建免费 Twilio 账户
**URL:** [SMS Messaging, Built to Scale](https://login.twilio.com/u/signup?state=hKFo2SBPN0VrQ0R3LTBaQTBKRG5MdTZWVjZmdjlQbThwWGxmTKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDdQUkRqTjFPVHY5VlRQM09Ncm1naWFaaUFTTXYtU0FCo2NpZNkgTW05M1lTTDVSclpmNzdobUlKZFI3QktZYjZPOXV1cks) 💬
注册免费账户 → 验证手机 → 获取一个 **Twilio 电话号码**。
您将需要:
* **Account SID**
* **Auth Token**
* **Twilio 电话号码** (格式如 `+15551234567`)
您需要将这些插入到 `config.py` 中。
### 步骤 2 - 创建免费 MongoDB Atlas 账户
**URL:** [https://www.mongodb.com/cloud/atlas/register](https://www.mongodb.com/cloud/atlas/register)
创建集群 → 创建数据库 → 创建集合。
您需要:
* **MongoDB URI** (例如 `mongodb+srv://username:password@cluster.mongodb.net/`)
* **数据库名称** ('resq')
* **集合名称** ('reports')
您需要将这些插入到 `config.py` 中。
### 步骤 3: 您的 `config.py` (填入您的详情)
```
# Twilio 凭证
TWILIO_ACCOUNT_SID = "your_account_sid"
TWILIO_AUTH_TOKEN = "your_auth_token"
TWILIO_FROM_NUMBER = "your_from_number"
# MongoDB 设置
MONGO_URI = "your_uri"
MONGO_DB_NAME = "resq"
MONGO_COLLECTION = "reports"
# T5 模型
T5_MODEL_NAME = "t5-small"
# Video 源
VIDEO_SOURCE = 0
# Flask
FLASK_HOST = "0.0.0.0"
FLASK_PORT = 5000
```
#### 替换为:
* `your_account_sid` → 来自 Twilio 控制面板
* `your_auth_token` → 来自 Twilio 控制面板
* `your_from_number` → 您的 Twilio 电话号码
* `your_uri` → MongoDB 连接字符串
* `"resq"` → 数据库名称 (或更改)
* `"reports"` → 您的集合名称
### 您的 `resources.py` (填入您的详情)
```
# 资源类型到默认接收者手机号的映射
RESOURCE_RECEIVERS = {
"Ambulance": ["no."],
"Fire Truck": ["no.", "no."],
"Police": ["no.", "no."],
}
```
#### 替换:
* `"no."` → **国际格式**的真实电话号码,例如:
"+15551234567"
您可以为每个紧急单元添加多个号码。
## 运行应用程序的步骤
### 🔹 1. 导航到所需位置
使用 `cd` 命令移动到您想要存储项目的目录:
```
cd ~/your/desired/path
```
### 🔹 2. 克隆仓库
```
git clone https://github.com/3riy/Road-Incident-Detection-and-SMS-Alert-System/tree/main
```
### 🔹 3. 导航到仓库文件夹
```
cd Road-Incident-Detection-and-SMS-Alert-System
```
### 🔹 4. 创建虚拟环境
```
python3 -m venv env
```
### 激活:
```
source env/bin/activate
```
### 🔹 5. 安装依赖项
```
pip install -r requirements.txt
```
### 🔹 6. 运行 Flask 服务器
```
python3 app.py
```
然后打开 url:
```
http://127.0.0.1:5000
```
## 开发挑战
* 由于 Twilio API 为每个免费层级账户提供的积分非常有限,我的团队最初难以对 SMS 通知功能进行全面测试,但在黑客马拉松评委面前的现场演示中,我们借用了一位俱乐部成员的手机,使用他们的号码创建账户并测试了 SMS。
* 总体而言,这是一次很好的体验。
## 结语
* 切勿提交诸如您的 MongoDB 或 Twilio 账户密码或电话号码之类的机密信息。
* 在生产环境中使用环境变量。
* 确保您的 PC 上配置了网络摄像头或 RTSP 源。
## 许可证
本项目采用 MIT 许可证,可在适当署名的前提下自由复制、修改和分发。请在 [LICENSE.md](LICENSE.md) 阅读许可证。
# 目录
* [📝 概述](#overview)
* [🧩 核心功能](#core-features)
* [💥 CV/YOLO 模型可检测的事故](#incidents-the-cvyolo-model-detects)
* [📹 项目演示图片](#project-demo-images)
* [⚙️ 技术栈](#technology-stack)
* [🔄 流程](#flow)
* [🖧 图表](#diagram)
* [📝 步骤](#steps)
* [📁 项目结构](#project-structure)
* [🐍 Root Python 模块](#root-python-modules)
* [📹 Mobilenet 模型文件夹](#model-folder)
* [🎨 UI 层](#ui-layer)
* [🧪 依赖项](#dependencies)
* [🔧 配置指南](#configuration-guide)
* [💬 创建免费 Twilio 账户](#step-1---create-a-free-twilio-account)
* [⛁ 创建免费 MongoDB Atlas 账户](#step-2---create-a-free-mongodb-atlas-account)
* [🚀 运行应用程序的步骤](#steps-to-run-the-application)
* [💪 开发挑战](#development-challenges)
* [✅ 结语](#final-notes)
* [许可证](#license)
## 概述
该系统持续监控视频源,检测危险,使用 T5 生成自然语言事故报告,并通过 SMS 向响应人员发出警报。
### 核心功能
* 📹 **实时视频分析** (OpenCV + MobileNet SSD + 可选 YOLO)
* 🧠 **自动事故报告** 使用 T5 模型
* 🕹️ **控制员验证界面**
* ✉️ **通过 Twilio 发送 SMS/WhatsApp**
* 📱 **移动应用通知**
* 🌐 **Flask 仪表板** 用于实时监控
### CV/YOLO 模型可检测的事故
YOLO 模型经过预训练,可以检测各种物体,例如汽车、公共汽车、机动三轮车、建筑物、树木以及狗和猫。
* 车辆碰撞 💥 (车辆边界框接触/重叠逻辑)
* 交通拥堵 🚧 (邻近度和聚类逻辑)
* 火灾 🔥 (HSV 颜色检测逻辑)
* 行人被车辆撞击 💥 (近似邻近度逻辑)
## 项目演示图片
对于我们的黑客马拉松演示,我们使用玩具车来模拟真实的汽车碰撞。可以看到汽车周围有边界框以及置信度分数。
- 目标检测中的 置信度分数 是一个数值(通常在 0 到 1 之间),表示机器学习模型对预测物体存在及其分类正确性的确定程度
同时发生或重叠的多个事故也将显示,如下所示:
事故数据将记录到 MongoDB 数据库中。
Some other pictures from the development process:
## 技术栈
### Web 与后端框架


**- flask**: Web 服务器、路由、仪表板、控制员 UI
**- gunicorn**: 生产环境 WSGI 服务器 (部署)
### 计算机视觉 (CV) 技术栈


**- opencv-python**: 带有 GUI 支持的 OpenCV (本地测试)
**- opencv-python-headless**: 用于服务器/Docker 的无头 OpenCV
**- ultralytics**: YOLOv8 (可选的实时目标检测)
### 深度学习 / AI 组件




**- torch**: T5 的 PyTorch 后端 + 模型推理
**- transformers**: HuggingFace Transformers (T5 模型)
**- sentencepiece**: T5 的分词器依赖
**- tokenizers**: 快速分词器库 (HF)
**- scikit-learn**: ML 实用工具 (聚类逻辑、指标)
**- datasets**: HuggingFace 数据集加载器 (可选)
**- pandas**: 日志和表格的数据处理
### 数据库层

**- pymongo[srv]**: MongoDB Atlas 连接器 (SRV 协议)
### 消息传递 / API 集成

**- twilio**: SMS 通知 API
### 实用工具 (可选)


**- numpy**: 用于 CV + ML 的数值运算
**- matplotlib**: 调试视觉效果、热图、绘图
### AI 工具
**- ChatGPT**: 用于生成 'ResQ' 标志
## 流程
### 图表
```
Camera → OpenCV Detection → Incident? → T5 Report → Twilio SMS Dispatch
```
### 步骤
1. 📡 捕获视频源。
2. 🧠 运行 CV 事故检测。
3. 📝 生成 AI 叙述。
4. 📤 SMS/WhatsApp 分发。
5. 🚑 通知响应人员 (救护车/警察/消防站)。
## 项目结构
```
resq/
├── app.py
├── main.py
├── detector.py
├── t5_generator.py
├── db_utils.py
├── sms_utils.py
├── resources.py
├── config.py
├── requirements.txt
├── mobilenet/
│ ├── MobileNetSSD_deploy.prototxt
│ └── MobileNetSSD_deploy.caffemodel
├── templates/
│ ├── index.html
│ └── history.html
└── static/
```
### Root Python 模块
#### `app.py` — Flask 后端与分发引擎
管理 Web 仪表板、路由、视频源、T5 pipeline、Twilio SMS、MongoDB 日志记录和资源分配。
#### `detector.py` — 实时 CV Pipeline
处理 MobileNet SSD 检测、火灾检测、碰撞逻辑、拥堵聚类、边界框以及 AI 报告触发。
#### `main.py` — 事故分类
实现聚类、重叠检测、事件合并和优先级评分。
#### `t5_generator.py`
生成叙述性事故报告和后续事件预测。
#### `db_utils.py`
MongoDB 日志记录实用工具。
#### `sms_utils.py`
最小的 Twilio SMS 发送器。
#### `resources.py`
定义紧急接收号码。
#### `config.py`
包含 Twilio/MongoDB 凭证、模型名称、服务器设置。
### 模型文件夹
MobileNet SSD 预训练模型文件。
### UI 层
#### `index.html`
仪表板(视频源 + 实时生成的事故数据)
#### `history.html`
日志历史(从 MongoDB 动态获取)
### 依赖项
#### `requirements.txt`
```
## --- Web & Backend 框架 --- ##
flask # Web server, routes, dashboard, controller UI
gunicorn # Production WSGI server (deployment)
## --- Computer Vision (CV) 技术栈 --- ##
opencv-python # OpenCV with GUI support (local testing)
opencv-python-headless # Headless OpenCV for servers / Docker
ultralytics # YOLOv8 (optional real-time object detection)
## --- Deep Learning / AI 组件 --- ##
torch # PyTorch backend for T5 + model inference
transformers # HuggingFace Transformers (T5 model)
sentencepiece # Tokenizer dependency for T5
tokenizers # Fast tokenizer library (HF)
scikit-learn # ML utilities (clustering logic for jams, metrics)
datasets # HuggingFace dataset loader (optional)
pandas # Data handling for logs and tables
## --- Database 层 --- ##
pymongo[srv] # MongoDB Atlas connector (SRV protocol)
## --- Messaging / API 集成 --- ##
twilio # SMS / WhatsApp notifications API
## --- Utilities (可选) --- ##
numpy # Numerical operations used across CV + ML
matplotlib # Debug visuals, heatmaps, plotting
```
## 配置指南
以下是运行应用程序前所需的 **所有设置步骤**。
### 步骤 1 - 创建免费 Twilio 账户
**URL:** [SMS Messaging, Built to Scale](https://login.twilio.com/u/signup?state=hKFo2SBPN0VrQ0R3LTBaQTBKRG5MdTZWVjZmdjlQbThwWGxmTKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDdQUkRqTjFPVHY5VlRQM09Ncm1naWFaaUFTTXYtU0FCo2NpZNkgTW05M1lTTDVSclpmNzdobUlKZFI3QktZYjZPOXV1cks) 💬
注册免费账户 → 验证手机 → 获取一个 **Twilio 电话号码**。
您将需要:
* **Account SID**
* **Auth Token**
* **Twilio 电话号码** (格式如 `+15551234567`)
您需要将这些插入到 `config.py` 中。
### 步骤 2 - 创建免费 MongoDB Atlas 账户
**URL:** [https://www.mongodb.com/cloud/atlas/register](https://www.mongodb.com/cloud/atlas/register)
创建集群 → 创建数据库 → 创建集合。
您需要:
* **MongoDB URI** (例如 `mongodb+srv://username:password@cluster.mongodb.net/`)
* **数据库名称** ('resq')
* **集合名称** ('reports')
您需要将这些插入到 `config.py` 中。
### 步骤 3: 您的 `config.py` (填入您的详情)
```
# Twilio 凭证
TWILIO_ACCOUNT_SID = "your_account_sid"
TWILIO_AUTH_TOKEN = "your_auth_token"
TWILIO_FROM_NUMBER = "your_from_number"
# MongoDB 设置
MONGO_URI = "your_uri"
MONGO_DB_NAME = "resq"
MONGO_COLLECTION = "reports"
# T5 模型
T5_MODEL_NAME = "t5-small"
# Video 源
VIDEO_SOURCE = 0
# Flask
FLASK_HOST = "0.0.0.0"
FLASK_PORT = 5000
```
#### 替换为:
* `your_account_sid` → 来自 Twilio 控制面板
* `your_auth_token` → 来自 Twilio 控制面板
* `your_from_number` → 您的 Twilio 电话号码
* `your_uri` → MongoDB 连接字符串
* `"resq"` → 数据库名称 (或更改)
* `"reports"` → 您的集合名称
### 您的 `resources.py` (填入您的详情)
```
# 资源类型到默认接收者手机号的映射
RESOURCE_RECEIVERS = {
"Ambulance": ["no."],
"Fire Truck": ["no.", "no."],
"Police": ["no.", "no."],
}
```
#### 替换:
* `"no."` → **国际格式**的真实电话号码,例如:
"+15551234567"
您可以为每个紧急单元添加多个号码。
## 运行应用程序的步骤
### 🔹 1. 导航到所需位置
使用 `cd` 命令移动到您想要存储项目的目录:
```
cd ~/your/desired/path
```
### 🔹 2. 克隆仓库
```
git clone https://github.com/3riy/Road-Incident-Detection-and-SMS-Alert-System/tree/main
```
### 🔹 3. 导航到仓库文件夹
```
cd Road-Incident-Detection-and-SMS-Alert-System
```
### 🔹 4. 创建虚拟环境
```
python3 -m venv env
```
### 激活:
```
source env/bin/activate
```
### 🔹 5. 安装依赖项
```
pip install -r requirements.txt
```
### 🔹 6. 运行 Flask 服务器
```
python3 app.py
```
然后打开 url:
```
http://127.0.0.1:5000
```
## 开发挑战
* 由于 Twilio API 为每个免费层级账户提供的积分非常有限,我的团队最初难以对 SMS 通知功能进行全面测试,但在黑客马拉松评委面前的现场演示中,我们借用了一位俱乐部成员的手机,使用他们的号码创建账户并测试了 SMS。
* 总体而言,这是一次很好的体验。
## 结语
* 切勿提交诸如您的 MongoDB 或 Twilio 账户密码或电话号码之类的机密信息。
* 在生产环境中使用环境变量。
* 确保您的 PC 上配置了网络摄像头或 RTSP 源。
## 许可证
本项目采用 MIT 许可证,可在适当署名的前提下自由复制、修改和分发。请在 [LICENSE.md](LICENSE.md) 阅读许可证。标签:Flask, MobileNet, MongoDB, OpenCV, Python, SMS报警, SSD, T5模型, Twilio, Web仪表盘, YOLO, 事件检测, 人工智能, 凭据扫描, 应急响应系统, 异常检测, 无后门, 智慧交通, 深度学习, 用户模式Hook绕过, 目标检测, 系统调用监控, 自动报告生成, 自然语言生成, 视频分析, 计算机视觉, 逆向工具, 道路交通安全