基于海康门禁的人员计数系统

基于海康门禁的人员计数系统 项目地址YQisme/hik_people_count我的小站Ean7的小站基于海康门禁 SDK 的人员进出监控与看板系统。后端采集门禁事件并对外提供 HTTP API前端 Vue 看板实时展示在场人数、进出记录、报警与异常信息。效果图门禁设备项目结构├── backend/# 后端C# / .NET│ ├── config/# 本地配置*.json 不纳入 Git见 *.example 模板│ ├── ACSEventConsole.sln# 解决方案入口│ └── GetACSEvent/ │ ├── ACSEventConsole.csproj# 控制台服务推荐│ ├── GetACSEvent.csproj# 带界面的 SDK 示例程序│ └── bin/Debug/net8.0/# dotnet 编译输出目录└── frontend/# 前端看板Vue 3 Vite TypeScript├── src/ └── dist/# 生产构建产物环境要求组件要求操作系统Windows x64后端运行时.NET 8后端 SDK.NET SDK 8前端运行时Node.js 18推荐 20包管理器Yarn 1.x网络能访问门禁设备 IP如需 MQTT 功能需连接 MQTT Broker快速开始开发模式1. 启动后端cdbackend/GetACSEvent dotnet run--projectACSEventConsole.csproj首次运行前请从模板复制配置文件并按实际环境修改cpbackend/config/DeviceConfig.json.example backend/config/DeviceConfig.jsoncpbackend/config/EmployeeConfig.json.example backend/config/EmployeeConfig.json启动成功后后端默认监听8081端口。可通过浏览器访问健康检查接口验证http://localhost:8081/health2. 启动前端新开一个终端cdfrontendyarnyarndev浏览器打开http://localhost:5173即可查看看板。Vite 开发服务器会将/api、/events、/images、/config、/health等请求代理到http://localhost:8081.env.local中VITE_API_BASE_URL留空即可。3. 生产部署可选# 构建前端静态资源cdfrontendyarnbuild# 预览构建结果yarnpreview后端保持运行ACSEventConsole.exe前端可将frontend/dist/部署到任意静态文件服务器并通过环境变量指定 API 地址见下文。运行顺序启动后端dotnet run --project ACSEventConsole.csproj启动前端yarn dev打开浏览器访问 http://localhost:5173配置说明配置文件位于backend/config/目录。修改后需重启后端生效。文件是否纳入 Git说明DeviceConfig.json否见.gitignore门禁设备、Web 端口、限员与 MQTT 等含设备密码EmployeeConfig.json否见.gitignore本地员工档案含姓名、工号、部门等DeviceConfig.json.example是设备配置模板EmployeeConfig.json.example是员工配置模板首次部署从模板复制并编辑cpbackend/config/DeviceConfig.json.example backend/config/DeviceConfig.jsoncpbackend/config/EmployeeConfig.json.example backend/config/EmployeeConfig.jsonDeviceConfig.json也可通过 Web 接口在线查看/编辑EmployeeConfig.json需手动编辑文件后重启GET /config— 查看当前设备配置GET /config/edit— 在线编辑设备配置DeviceConfig.json门禁与系统运行参数顶层分为config全局和devices设备列表。该文件已加入.gitignore不会提交到仓库。含设备密码、MQTT 凭证等敏感信息请在各环境自行维护。config — 全局参数字段类型默认值说明apiBaseUrlstring—预留外部 API 根地址当前未用于员工同步webPortnumber8081后端 Web 服务端口limitCountnumber500区域限制人数上限stayWarningMinutesnumber30停留超时报警分钟recentRecordCountnumber10看板最近进出记录条数exitGraceSecondsnumber8出门宽限时间秒capacityWarningRationumber0.9人数接近上限时的预警比例0–1alarmScanSecondsnumber5报警扫描间隔秒mqttEnabledbooleantrue是否启用门禁事件 MQTTmqttHost/mqttPortstring / number—MQTT Broker 地址与端口mqttTopicstringacs/alarm/event门禁事件主题mqttClientIdstring—MQTT 客户端 IDmqttUsername/mqttPasswordstring—MQTT 认证可选personInfoMqttEnabledbooleantrue是否发布刷脸信息personInfoMqttHost/personInfoMqttPortstring / number—刷脸 MQTT 地址personInfoMqttTopicstringpersoninfo刷脸默认主题personInMqttTopicstringperson_in进门事件主题personOutMqttTopicstringperson_out出门事件主题areaAlertMqttEnabledbooleantrue是否订阅区域报警areaAlertMqttTopicstringarea_alert区域报警主题abnormalMqttEnabledbooleantrue是否订阅异常消息abnormalMqttTopicstringabnormal异常消息主题peopleCountMqttEnabledbooleantrue是否订阅人数统计peopleCountMqttTopicstringpeople_count人数统计主题各 MQTT 块均包含对应的*ClientId字段用于区分客户端连接。devices — 门禁设备devices为数组每项代表一台门禁设备字段类型必填说明ipstring是设备 IPuserNamestring是登录用户名passwordstring是登录密码portnumber是SDK 端口通常为8000enabledboolean是是否启用该设备namestring—设备简称deviceNamestring—设备显示名称deviceIDstring—设备唯一 IDareaIDstring—所属区域 IDremarkstring—备注directionstring—默认进出方向进/出controlDoorNonumber—门控门号默认1doorsarray—多门方向配置项含doorNo、direction等配置示例{config:{webPort:8081,limitCount:500,stayWarningMinutes:30,recentRecordCount:10,exitGraceSeconds:8,capacityWarningRatio:0.9,mqttEnabled:true,mqttHost:192.168.0.12,mqttPort:1883},devices:[{ip:192.168.0.164,userName:admin,password:your-password,port:8000,enabled:true,name:门禁1,deviceName:测试门禁164,direction:进,controlDoorNo:1,doors:[]}]}EmployeeConfig.json员工信息 JSON数组启动时从本地加载用于将门禁事件中的工号/卡号映射为姓名、部门等展示字段。该文件已加入.gitignore不会提交到仓库。请在各环境自行维护勿将含真实身份证、手机号等敏感信息的文件推送到 Git。常用字段字段说明employeeId员工主键与门禁事件员工号匹配employeeNo/workNo工号别名同样参与匹配name姓名看板展示card_id卡号参与匹配department部门position岗位phone电话gender性别status在职状态type人员类型如内部职工、外协permission权限/区域remarks备注后端会按employeeId、employeeNo、card_id、name等字段与刷脸事件关联。门禁设备返回的员工号需与表中employeeId或employeeNo一致才能正确显示姓名。配置示例[{employeeId:10001,employeeNo:10001,name:张三,card_id:CARD001,department:技术部,position:工程师,status:在职}]可通过GET /api/employee查看当前已加载的员工列表。前端 API 地址复制环境变量示例文件并按需修改cdfrontendcp.env.example .env.local.env.local示例# 留空则开发模式走 Vite 代理生产环境可填写完整后端地址VITE_API_BASE_URLhttp://192.168.0.29:8081直接运行已编译版本可选若无需修改后端代码可跳过dotnet run直接运行已有产物cdbackend/GetACSEvent/bin/Debug/net8.0 ./ACSEventConsole.exe主要 API 接口接口说明GET /api/dashboard人员看板聚合数据前端主接口GET /events原始门禁事件列表GET /config当前设备配置GET /config/edit在线编辑配置GET /images事件关联图片GET /health健康检查默认服务地址http://localhost:8081更详细的接口说明见backend/GetACSEvent/事件API说明.md。常见问题前端页面无数据确认后端ACSEventConsole.exe已启动且/health可访问确认DeviceConfig.json中门禁设备 IP、账号配置正确设备网络可达开发模式下确认前端运行在 5173 端口Vite 代理依赖此端口端口冲突后端端口修改DeviceConfig.json中config.webPort前端端口修改frontend/vite.config.ts中server.portMQTT 相关功能不可用检查DeviceConfig.json的config中 MQTT 主机地址与端口若暂不需要 MQTT可将对应*MqttEnabled设为false相关文档backend/README.md— 后端独立项目说明backend/GetACSEvent/事件API说明.md— 事件 API 详细文档backend/GetACSEvent/图片服务器使用说明.md— 图片服务说明