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代理, 公共安全, 区块链身份认证, 地理围栏, 实时定位, 库, 应急响应, 智慧旅游, 自定义脚本