maniac-24/Smart-Tourist-Safety-Monitoring
GitHub: maniac-24/Smart-Tourist-Safety-Monitoring
该系统是一个融合AI地理围栏、区块链身份认证与应急响应机制的综合游客安全监控平台,旨在为旅游目的地提供实时安全管理和紧急事件处置能力。
Stars: 1 | Forks: 0
# 智能游客安全监控与事件响应系统
一个综合性的实时游客安全平台,结合了基于 AI 的地理围栏、基于区块链的数字身份和应急响应系统,旨在确保全印度游客的安全。
## 🌟 概述
该平台提供端到端的游客安全管理,具备实时位置追踪、智能地理围栏警报、紧急 SOS 功能以及集中式警察指挥中心。本项目为 Smart India Hackathon 而构建,旨在通过现代技术解决关键的游客安全挑战。
## 🌐 在线应用
**前端:** [https://smart-tourist-safety-monitoring-one.vercel.app](https://smart-tourist-safety-monitoring-one.vercel.app)
**后端 API:** [https://smart-tourist-safety-monitoring-ch2m.onrender.com](https://smart-tourist-safety-monitoring-ch2m.onrender.com)
应用程序已全面部署,随时可用!访问在线平台以探索游客安全功能、地理围栏、应急响应等。
## 🗝️ 核心功能
### 🔐 区块链数字身份
- 基于 Ethereum Sepolia 的游客 ID 注册
- 由 Smart contract 驱动的身份验证
- 生成 QR code 以实现即时验证
- 提供 PDF 格式的游客 ID 卡并通过邮件发送
- 区块链上不可篡改的身份记录
### 🗺️ 智能地理围栏系统
- 使用 Socket.io 进行实时位置追踪
- 动态安全区域(安全、中风险、高风险、受限区)
- 进入区域时自动生成警报
- 基于位置的安全评分计算
- 基于时间的区域限制
- 支持多边形和半径范围的地理围栏
### 🆘 应急响应
- 一键 SOS 按钮并附带 GPS 坐标
- 通过 Twilio 自动向紧急联系人发送 SMS 警报
- 向警察仪表板发送实时通知
- 位置历史追踪
- 警报严重性分类(低、中、高、严重)
- 事件报告管理
### 👮 警察指挥中心
- 实时游客位置监控
- 实时地理围栏警报仪表板
- 游客状态追踪(安全、警告、SOS)
- 警报确认系统
- 事件报告管理
- 历史警报分析
### 🏨 旅游服务
- 印度境内 16 个以上的精选目的地
- 印度东北部特色目的地(Tawang、Gangtok、Kohima 等)
- 酒店列表及详细信息
- 专业导游目录
- 导游咨询与预订系统
- 目的地评论和评分
### 🌐 多语言支持
- 英语、印地语、卡纳达语、孟加拉语、泰米尔语、泰卢固语
- 由 i18next 驱动的国际化
- 语言选择器组件
- 本地化的 UI 元素
### 📱 渐进式 Web 应用 (PWA)
- 离线功能
- 可作为移动应用安装
- 推送通知
- Service worker 缓存
- 地图切片缓存以供离线使用
## 🛠️ 技术栈
### 前端
- **框架:** React 18 with Vite
- **样式:** Tailwind CSS 4
- **状态管理:** Zustand
- **路由:** React Router DOM v7
- **地图:** Leaflet & React Leaflet
- **区块链:** ethers.js v6
- **实时通信:** Socket.io Client
- **动画:** Framer Motion
- **国际化 (i18n):** react-i18next
- **UI 组件:** Lucide React icons
- **PDF 生成:** jsPDF, html2canvas
- **QR Codes:** qrcode.react
### 后端
- **运行时:** Node.js with Express 5
- **数据库:** MongoDB with Mongoose
- **身份验证:** JWT (jsonwebtoken)
- **实时通信:** Socket.io
- **文件上传:** Multer, Cloudinary
- **电子邮件:** Nodemailer
- **短信 (SMS):** Twilio
- **地理空间计算:** @turf/turf, @turf/boolean-point-in-polygon
- **PDF 生成:** PDFKit
### 区块链
- **Smart Contracts:** Solidity 0.8.28
- **开发环境:** Hardhat
- **网络:** Ethereum Sepolia Testnet
- **提供商:** Infura
### DevOps
- **部署:** Vercel
- **版本控制:** Git
- **环境配置:** dotenv
## 📁 项目结构
```
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ │ ├── Navbar.jsx
│ │ │ ├── GeofenceAlert.jsx
│ │ │ ├── LanguageSelector.jsx
│ │ │ └── ...
│ │ ├── pages/ # Route pages
│ │ │ ├── LoginPage.jsx
│ │ │ ├── DashboardPage.jsx
│ │ │ ├── PoliceDashboard.jsx
│ │ │ ├── GeoFenceAdmin.jsx
│ │ │ ├── MyLocationPage.jsx
│ │ │ ├── NorthEastDestinations.jsx
│ │ │ └── ...
│ │ ├── contexts/ # React contexts
│ │ │ ├── SocketContext.jsx
│ │ │ └── usenamcontext.jsx
│ │ ├── hooks/ # Custom React hooks
│ │ │ └── useLocationTracking.js
│ │ ├── store/ # Zustand stores
│ │ │ ├── userStore.js
│ │ │ ├── tourGuideStore.js
│ │ │ └── conversionStore.js
│ │ ├── data/ # Static data
│ │ │ ├── destinations.json
│ │ │ └── issues.json
│ │ ├── contracts/ # Solidity smart contracts
│ │ ├── utils/ # Utility functions
│ │ ├── i18n.js # Internationalization config
│ │ └── main.jsx # App entry point
│ ├── hardhat.config.cjs # Hardhat blockchain config
│ ├── vite.config.js # Vite build config
│ └── package.json
│
├── server/ # Backend Node.js application
│ ├── controllers/ # Business logic
│ │ ├── user.controller.js
│ │ ├── tourGuide.controller.js
│ │ └── conversion.controller.js
│ ├── models/ # MongoDB schemas
│ │ ├── User.js
│ │ ├── GeoFence.js
│ │ ├── AlertHistory.js
│ │ ├── TourGuide.js
│ │ ├── IncidentReport.js
│ │ ├── ContactMessage.js
│ │ └── ...
│ ├── routes/ # API routes
│ │ ├── user.router.js
│ │ ├── geoFence.route.js
│ │ ├── tourGuide.route.js
│ │ ├── sendSms.js
│ │ └── ...
│ ├── middleware/ # Express middleware
│ │ ├── authMiddleware.js
│ │ ├── fecthuser.js
│ │ └── upload.js
│ ├── utils/ # Utility functions
│ │ ├── geoFenceUtils.js
│ │ ├── seedGeoFences.js
│ │ ├── apiResponse.js
│ │ └── asyncHandler.js
│ ├── config/ # Configuration
│ │ └── cloudinary.js
│ ├── index.js # Server entry point
│ ├── db.js # Database connection
│ └── package.json
│
└── README.md
```
## 🔧 安装与设置
### 前置条件
- Node.js (v18 或更高版本)
- MongoDB (本地或 Atlas)
- 包含 Sepolia testnet ETH 的 Ethereum 钱包
- Infura API key
- Twilio 账户(用于发送 SMS)
- Cloudinary 账户(用于图片上传)
### 环境变量
**客户端 (.env in client/)**
```
VITE_API_URL=http://localhost:5000
VITE_SOCKET_URL=http://localhost:5000
VITE_CONTRACT_ADDRESS=your_deployed_contract_address
INFURA_API_KEY=your_infura_api_key
PRIVATE_KEY=your_ethereum_private_key
```
**服务端 (.env in server/)**
```
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
CLIENT_URL=http://localhost:5173
# Twilio
TWILIO_ACCOUNT_SID=your_twilio_sid
TWILIO_AUTH_TOKEN=your_twilio_token
TWILIO_PHONE_NUMBER=your_twilio_phone
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# 电子邮件
EMAIL_USER=your_email
EMAIL_PASS=your_email_password
```
### 安装步骤
1. **克隆仓库**
```
git clone
cd smart-tourist-safety
```
2. **安装客户端依赖**
```
cd client
npm install
```
3. **安装服务端依赖**
```
cd ../server
npm install
```
4. **部署 Smart Contract(可选 - 如果尚未部署)**
```
cd ../client
npx hardhat compile
npx hardhat run script/deploy.js --network sepolia
```
5. **植入地理围栏数据(可选)**
```
cd ../server
npm run seed:geofences
```
6. **启动开发服务器**
终端 1(后端):
```
cd server
npm run dev
```
终端 2(前端):
```
cd client
npm run dev
```
7. **访问应用程序**
- 前端 (本地):http://localhost:5173
- 后端 API (本地):http://localhost:5000
- **前端 (在线):** https://smart-tourist-safety-monitoring-one.vercel.app
- **后端 API (在线):** https://smart-tourist-safety-monitoring-ch2m.onrender.com
## 🎯 使用说明
### 游客
1. 注册基于区块链的数字 ID
2. 下载 PDF 格式的游客 ID 卡
3. 登录以访问仪表板
4. 查看实时安全状态
5. 探索目的地、酒店和导游
6. 需要时使用紧急 SOS 按钮
7. 追踪位置历史
### 警察/相关部门
1. 通过 `/police` 访问警察仪表板
2. 实时监控所有游客
3. 查看地理围栏警报
4. 确认并响应突发事件
5. 访问警报历史和分析数据
6. 通过 `/geofence-admin` 管理地理围栏区域
### 导游
1. 通过 `/tourguide` 注册成为导游
2. 创建专业个人资料
3. 接收游客咨询
4. 管理预订
## 🗺️ API 端点
### 身份验证
- `POST /api/v2/auth/register` - 注册新用户
- `POST /api/v2/auth/login` - 用户登录
- `GET /api/v2/auth/current` - 获取当前用户
### 地理围栏
- `POST /api/v7/geofence/create` - 创建地理围栏
- `GET /api/v7/geofence/all` - 获取所有地理围栏
- `POST /api/v7/geofence/check-location` - 检查位置
- `GET /api/v7/geofence/alerts/all` - 获取所有警报
- `GET /api/v7/geofence/alerts/my-history` - 获取用户警报
### 紧急情况
- `POST /api/v3/sendalert` - 发送紧急 SMS
### 导游
- `POST /api/v5/tourguide/register` - 注册导游
- `GET /api/v5/tourguide/all` - 获取所有导游
- `POST /api/v9/guide-inquiry` - 提交咨询
### PDF 生成
- `POST /api/v1/pdfwork/generate` - 生成游客 ID PDF
## 🔒 安全功能
- 基于 JWT 的身份验证
- 区块链身份验证
- 加密的密码存储
- CORS 保护
- 输入验证与清理
- 安全的文件上传处理
- 环境变量保护
## 🌍 支持的目的地
该平台包含 16 个主要目的地,其中包括:
- 泰姬陵,阿格拉
- 喀拉拉邦水乡
- 果阿海滩
- 拉贾斯坦邦宫殿
- 瓦拉纳西河坛
- 喜马拉雅山,喜马偕尔邦
- 阿姆利则金庙
- 孟买印度门
- **印度东北部:** Tawang、Gangtok、Kohima、Loktak 湖、Aizawl、Agartala
## 📱 实时功能
- 通过 Socket.io 进行实时位置追踪
- 即时地理围栏警报
- 实时警察仪表板更新
- 紧急情况推送通知
- 实时游客状态监控
## 🚀 部署
### ✅ 在线部署
应用程序**目前已部署并正在运行**:
- **前端 (Vercel):** [https://smart-tourist-safety-monitoring-one.vercel.app](https://smart-tourist-safety-monitoring-one.vercel.app)
- **后端 (Render):** [https://smart-tourist-safety-monitoring-ch2m.onrender.com](https://smart-tourist-safety-monitoring-ch2m.onrender.com)
- **数据库:** MongoDB Atlas(已配置并运行)
### 部署您自己的实例
- **前端:** 部署到 Vercel
- **后端:** 部署到 Render 或 Railway
- **数据库:** MongoDB Atlas
### 部署指南
我们准备了全面的部署文档:
1. **[QUICK_START.md](QUICK_START.md)** - 3步快速部署(约 10 分钟)
2. **[DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md)** - 完整的逐步指南
3. **[PRE_DEPLOYMENT_CHECKLIST.md](PRE_DEPLOYMENT_CHECKLIST.md)** - 部署前验证
4. **[DEPLOYMENT_ARCHITECTURE.md](DEPLOYMENT_ARCHITECTURE.md)** - 系统架构概述
5. **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - 常见问题与解决方案
6. **[DEPLOYMENT_SUMMARY.md](DEPLOYMENT_SUMMARY.md)** - 快速概览
### 部署配置
- ✅ 已为 Vercel 配置 React Router (`client/vercel.json`)
- ✅ 已为生产环境配置 CORS
- ✅ 环境变量已文档化
- ✅ 构建命令已优化
- ✅ Socket.io 已准备好投入生产环境
**从这里开始:** 阅读 `QUICK_START.md` 以在约 15 分钟内完成部署!
## 📄 许可证
本项目是 Smart India Hackathon 提交作品的一部分。
## 👥 团队
由一支敬业的团队为 Smart India Hackathon 构建,旨在提升印度各地的游客安全。
## 🆘 支持
如有问题或疑问,请使用应用内的支持功能或联系开发团队。
**为 Smart India Hackathon 用 ❤️ 构建**
标签:MITM代理, 公共安全, 区块链身份认证, 地理围栏, 实时定位, 库, 应急响应, 智慧旅游, 自定义脚本