kruthikaC07/Sentinel-AI
GitHub: kruthikaC07/Sentinel-AI
Sentinel AI 利用 Google Gemini AI 自动分析市民提交的紧急与社区事件报告的严重程度并智能路由至对应响应部门。
Stars: 2 | Forks: 0
# Sentinel AI
### 🔗市民仪表板
### 🔗事件报告
### 🔗AI 事件分析
### 🔗响应人员仪表板
## ➡️AI 能力
- 事件严重程度预测
- 紧急情况分类
- 部门推荐
- 公共公告生成
- 安全建议
- 置信度评分
- 基于图像辅助的事件分析
- Gemini 不可用时的本地兜底方案
## ➡️技术栈
### 前端
- React
- Vite
- JavaScript
- Tailwind CSS
### 后端
- FastAPI
- Python
### 数据库
- Neon PostgreSQL
### 人工智能
- Google Gemini 2.5 Flash
### 部署
- Vercel
- Render
## ➡️系统架构
```
Citizen
│
▼
React + Vite Frontend
│
▼
FastAPI Backend
│
├── Google Gemini 2.5 Flash
├── Neon PostgreSQL
└── Emergency Routing Engine
│
▼
Responder Dashboard
```
## 后端环境
创建 `backend/.env`:
```
APP_SECRET=replace-with-a-long-random-secret
DATABASE_URL=postgresql://username:password@your-neon-host.neon.tech/neondb?sslmode=require
GEMINI_API_KEY=your_google_ai_studio_key
GEMINI_MODEL=gemini-2.5-flash
FRONTEND_ORIGIN=http://localhost:5173
```
部署时,请将 `FRONTEND_ORIGIN` 设置为你的 Vercel URL。多个源地址使用逗号分隔:
```
FRONTEND_ORIGIN=http://localhost:5173,https://your-app.vercel.app
```
## 前端环境
创建 `frontend/.env`:
```
VITE_API_URL=http://localhost:8000
```
对于 Vercel:
```
VITE_API_URL=https://your-render-backend.onrender.com
```
## ➡️Gemini API 设置
1. 打开 [Google AI Studio](https://aistudio.google.com/app/apikey)。
2. 创建一个 API key。
3. 将其添加到 `backend/.env` 中作为 `GEMINI_API_KEY`。
4. 除非您有意更改模型,否则请保留 `GEMINI_MODEL=gemini-2.5-flash`。
后端会直接加载 `backend/.env`,因此无论您是从项目根目录还是从 backend 文件夹启动 FastAPI,Gemini 都能正常工作。如果 key 缺失、保留为占位符值,或者 Gemini 抛出错误,应用将使用本地兜底方案,以确保报告功能仍然可用。
## ➡️ Neon PostgreSQL 数据库设置
1. 在 **Neon** (https://neon.com) 创建一个免费项目。
2. 创建一个新的 PostgreSQL 数据库。
3. 打开您的项目仪表板并导航至 **Connection Details**。
4. 复制 PostgreSQL 连接字符串。
5. 将其添加到 `backend/.env` 中作为 `DATABASE_URL`。
6. 运行 `backend/schema.sql` 中的所有 SQL 语句以创建所需的表。
7. 要以干净的数据库状态启动,请运行 `backend/reset_database.sql`。
在配置好 `DATABASE_URL` 后,您也可以通过 PowerShell 重置数据库:
```
cd backend
.\.venv\Scripts\python reset_database.py
```
这会删除 `users`、`incidents` 和 `responder_assignments` 表中的所有应用数据,同时保持数据库 schema 完整。
## ➡️本地运行
后端:
```
cd backend
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
python -m uvicorn app.main:app --reload
```
前端:
```
cd frontend
npm install
copy .env.example .env
npm run dev
```
本地 URL:
```
Backend: http://localhost:8000
Frontend: http://localhost:5173
```
## ➡️事件流程
1. 市民提交紧急或社区事件报告。
2. 报告可包含描述、图片、音频和位置信息。
3. Google Gemini 分析报告以确定严重程度、类别和建议的部门。
4. 事件被存储在 Neon PostgreSQL 中。
5. 相关的响应部门接收到该任务。
6. 紧急 SOS 报告会自动标记为“危急”(Critical),并被路由至每位可用的紧急响应人员。
7. 市民和响应人员可通过各自的仪表板监控事件进展。
## 🚀 部署指南
## ➡️后端部署 (Render)
1. 将项目推送到 GitHub。
2. 打开 [Render](https://render.com)。
3. 创建 **New Web Service**。
4. 连接您的 GitHub 仓库。
5. 将根目录设置为 `backend`。
6. 构建命令:`pip install -r requirements.txt`
7. 启动命令:`uvicorn app.main:app --host 0.0.0.0 --port $PORT`
8. 添加环境变量:
```
APP_SECRET=replace-with-a-long-random-secret
DATABASE_URL=your_neon_postgres_connection_string
GEMINI_API_KEY=your_google_ai_studio_key
GEMINI_MODEL=gemini-2.5-flash
FRONTEND_ORIGIN=https://your-vercel-app.vercel.app
```
部署完成后,在 Render URL 上打开 `/health` 以确认 API 是否正在运行。
## ➡️前端部署 (Vercel)
1. 打开 [Vercel](https://vercel.com)。
2. 导入您的 GitHub 仓库。
3. 将根目录设置为 `frontend`。
4. 构建命令:`npm run build`
5. 输出目录:`dist`
6. 添加环境变量:
```
VITE_API_URL=https://your-render-backend.onrender.com
```
在后端 URL 上线后部署前端。
## ➡️最终测试清单
1. 在 Neon 中运行 `backend/schema.sql`。
2. 运行一次 `backend/reset_database.sql` 以清除旧数据。
3. 注册一名市民。
4. 为环卫、水务、道路、电力、消防、医疗和警察部门注册响应人员。
5. 提交一份普通市民报告,并确认只有匹配的部门能看到它。
6. 提交一份 SOS 警报,并确认每位响应人员都能在顶部看到它。
7. 从响应人员账户接受、更新并解决一个事件。
8. 刷新两个仪表板,确认数据已持久化到 Neon 中。
## ➡️团队
- [Kruthika C](https://github.com/kruthikaC07)
- [Rakshitha R S](https://github.com/rakshithaagowda)
AI 驱动的突发事件报告与决策智能平台,专为紧急情况和社区响应设计。
## ➡️概述 ## 概述 Sentinel AI 是一个 AI 驱动的突发事件报告与决策智能平台,旨在帮助市民通过单一智能系统报告紧急情况、公共安全问题以及社区基础设施问题。 该平台允许市民提交实时事件报告,同时利用 Google Gemini AI 分析严重程度、对事件进行分类、推荐合适的响应机构,并生成公共安全公告。 除了紧急响应外,Sentinel AI 还支持社区问题报告,允许市民报告诸如垃圾溢出、漏水、道路破损、路灯故障、卫生问题以及其他与基础设施相关的市政问题。每份报告都会被智能路由到相应的响应部门,以便高效解决。 对于危急情况,Sentinel AI 包含紧急 SOS 功能,可立即创建高优先级事件,捕获用户的当前位置,并向响应人员发出警报,以促进快速的紧急响应。 - 前端:React + Vite - 后端:FastAPI - 数据库:Neon PostgreSQL 免费版 - AI:Google Gemini API - 部署:Vercel 前端,Render 后端 ## ➡️ 项目更新 Sentinel AI 正在不断演进,通过功能增强、UI/UX 改进、性能优化和新功能来提升整体用户体验和紧急响应工作流程。 ## ➡️功能 - 市民和响应人员身份验证 - 紧急情况和社区问题报告 - 事件报告支持可选的图片和音频上传 - 一键紧急 SOS 并自动获取位置 - 使用 Google Gemini 的 AI 驱动事件分析 - 自动严重程度评估和事件优先级排序 - 智能部门分类和响应人员路由 - 社区问题路由至相关市政部门 - SOS 路由至所有可用的紧急响应部门 - 带有事件跟踪功能的市民仪表板 - 带有任务分配管理和状态更新功能的响应人员仪表板 - AI 生成的公共安全公告 - 基于图像辅助的事件分析 - Gemini 不可用时的本地 AI 兜底方案 - 集成 Neon 的 PostgreSQL 数据库 ## ➡️支持的事件类别 ## 紧急 SOS 紧急 SOS 功能专为需要立即处理的危急情况而设计。 激活后,Sentinel AI 将: - 立即创建高优先级事件报告。 - 自动捕获用户当前位置。 - 向响应人员发出警报以实现快速紧急响应。 - 在响应人员仪表板上以“危急”(Critical)优先级显示该事件。 - 在紧急情况下实现更快的协调。 ### 紧急事件 - 火灾紧急情况 - 医疗紧急情况 - 犯罪与公共安全 - 自然灾害 - 妇女安全 - 儿童安全 - 老人援助 ### 社区与市政问题 - 垃圾溢出 - 漏水 - 道路破损与坑洼 - 路灯故障 - 卫生问题 - 公共基础设施问题 Sentinel AI 会自动分析每份提交的报告,确定其严重程度,并将其路由到最合适的紧急服务或市政部门。 ## ➡️截图 ### 🔗注册
### 🔗市民仪表板
### 🔗事件报告
### 🔗AI 事件分析
### 🔗响应人员仪表板
## ➡️AI 能力
- 事件严重程度预测
- 紧急情况分类
- 部门推荐
- 公共公告生成
- 安全建议
- 置信度评分
- 基于图像辅助的事件分析
- Gemini 不可用时的本地兜底方案
## ➡️技术栈
### 前端
- React
- Vite
- JavaScript
- Tailwind CSS
### 后端
- FastAPI
- Python
### 数据库
- Neon PostgreSQL
### 人工智能
- Google Gemini 2.5 Flash
### 部署
- Vercel
- Render
## ➡️系统架构
```
Citizen
│
▼
React + Vite Frontend
│
▼
FastAPI Backend
│
├── Google Gemini 2.5 Flash
├── Neon PostgreSQL
└── Emergency Routing Engine
│
▼
Responder Dashboard
```
## 后端环境
创建 `backend/.env`:
```
APP_SECRET=replace-with-a-long-random-secret
DATABASE_URL=postgresql://username:password@your-neon-host.neon.tech/neondb?sslmode=require
GEMINI_API_KEY=your_google_ai_studio_key
GEMINI_MODEL=gemini-2.5-flash
FRONTEND_ORIGIN=http://localhost:5173
```
部署时,请将 `FRONTEND_ORIGIN` 设置为你的 Vercel URL。多个源地址使用逗号分隔:
```
FRONTEND_ORIGIN=http://localhost:5173,https://your-app.vercel.app
```
## 前端环境
创建 `frontend/.env`:
```
VITE_API_URL=http://localhost:8000
```
对于 Vercel:
```
VITE_API_URL=https://your-render-backend.onrender.com
```
## ➡️Gemini API 设置
1. 打开 [Google AI Studio](https://aistudio.google.com/app/apikey)。
2. 创建一个 API key。
3. 将其添加到 `backend/.env` 中作为 `GEMINI_API_KEY`。
4. 除非您有意更改模型,否则请保留 `GEMINI_MODEL=gemini-2.5-flash`。
后端会直接加载 `backend/.env`,因此无论您是从项目根目录还是从 backend 文件夹启动 FastAPI,Gemini 都能正常工作。如果 key 缺失、保留为占位符值,或者 Gemini 抛出错误,应用将使用本地兜底方案,以确保报告功能仍然可用。
## ➡️ Neon PostgreSQL 数据库设置
1. 在 **Neon** (https://neon.com) 创建一个免费项目。
2. 创建一个新的 PostgreSQL 数据库。
3. 打开您的项目仪表板并导航至 **Connection Details**。
4. 复制 PostgreSQL 连接字符串。
5. 将其添加到 `backend/.env` 中作为 `DATABASE_URL`。
6. 运行 `backend/schema.sql` 中的所有 SQL 语句以创建所需的表。
7. 要以干净的数据库状态启动,请运行 `backend/reset_database.sql`。
在配置好 `DATABASE_URL` 后,您也可以通过 PowerShell 重置数据库:
```
cd backend
.\.venv\Scripts\python reset_database.py
```
这会删除 `users`、`incidents` 和 `responder_assignments` 表中的所有应用数据,同时保持数据库 schema 完整。
## ➡️本地运行
后端:
```
cd backend
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
python -m uvicorn app.main:app --reload
```
前端:
```
cd frontend
npm install
copy .env.example .env
npm run dev
```
本地 URL:
```
Backend: http://localhost:8000
Frontend: http://localhost:5173
```
## ➡️事件流程
1. 市民提交紧急或社区事件报告。
2. 报告可包含描述、图片、音频和位置信息。
3. Google Gemini 分析报告以确定严重程度、类别和建议的部门。
4. 事件被存储在 Neon PostgreSQL 中。
5. 相关的响应部门接收到该任务。
6. 紧急 SOS 报告会自动标记为“危急”(Critical),并被路由至每位可用的紧急响应人员。
7. 市民和响应人员可通过各自的仪表板监控事件进展。
## 🚀 部署指南
## ➡️后端部署 (Render)
1. 将项目推送到 GitHub。
2. 打开 [Render](https://render.com)。
3. 创建 **New Web Service**。
4. 连接您的 GitHub 仓库。
5. 将根目录设置为 `backend`。
6. 构建命令:`pip install -r requirements.txt`
7. 启动命令:`uvicorn app.main:app --host 0.0.0.0 --port $PORT`
8. 添加环境变量:
```
APP_SECRET=replace-with-a-long-random-secret
DATABASE_URL=your_neon_postgres_connection_string
GEMINI_API_KEY=your_google_ai_studio_key
GEMINI_MODEL=gemini-2.5-flash
FRONTEND_ORIGIN=https://your-vercel-app.vercel.app
```
部署完成后,在 Render URL 上打开 `/health` 以确认 API 是否正在运行。
## ➡️前端部署 (Vercel)
1. 打开 [Vercel](https://vercel.com)。
2. 导入您的 GitHub 仓库。
3. 将根目录设置为 `frontend`。
4. 构建命令:`npm run build`
5. 输出目录:`dist`
6. 添加环境变量:
```
VITE_API_URL=https://your-render-backend.onrender.com
```
在后端 URL 上线后部署前端。
## ➡️最终测试清单
1. 在 Neon 中运行 `backend/schema.sql`。
2. 运行一次 `backend/reset_database.sql` 以清除旧数据。
3. 注册一名市民。
4. 为环卫、水务、道路、电力、消防、医疗和警察部门注册响应人员。
5. 提交一份普通市民报告,并确认只有匹配的部门能看到它。
6. 提交一份 SOS 警报,并确认每位响应人员都能在顶部看到它。
7. 从响应人员账户接受、更新并解决一个事件。
8. 刷新两个仪表板,确认数据已持久化到 Neon 中。
## ➡️团队
- [Kruthika C](https://github.com/kruthikaC07)
- [Rakshitha R S](https://github.com/rakshithaagowda)标签:AV绕过, FastAPI, React, Syscalls, 事件上报, 决策智能, 应急响应平台, 数据可视化, 社区服务, 逆向工具