当前位置: 首页 > news >正文

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

项目地址: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/health

2. 启动前端

新开一个终端:

cdfrontendyarnyarndev

浏览器打开http://localhost:5173即可查看看板。

Vite 开发服务器会将/api/events/images/config/health等请求代理到http://localhost:8081.env.localVITE_API_BASE_URL留空即可。

3. 生产部署(可选)

# 构建前端静态资源cdfrontendyarnbuild# 预览构建结果yarnpreview

后端保持运行ACSEventConsole.exe;前端可将frontend/dist/部署到任意静态文件服务器,并通过环境变量指定 API 地址(见下文)。

运行顺序

  1. 启动后端dotnet run --project ACSEventConsole.csproj
  2. 启动前端yarn dev
  3. 打开浏览器访问 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.json

DeviceConfig.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–1)
alarmScanSecondsnumber5报警扫描间隔(秒)
mqttEnabledbooleantrue是否启用门禁事件 MQTT
mqttHost/mqttPortstring / numberMQTT Broker 地址与端口
mqttTopicstringacs/alarm/event门禁事件主题
mqttClientIdstringMQTT 客户端 ID
mqttUsername/mqttPasswordstringMQTT 认证(可选)
personInfoMqttEnabledbooleantrue是否发布刷脸信息
personInfoMqttHost/personInfoMqttPortstring / number刷脸 MQTT 地址
personInfoMqttTopicstringpersoninfo刷脸默认主题
personInMqttTopicstringperson_in进门事件主题
personOutMqttTopicstringperson_out出门事件主题
areaAlertMqttEnabledbooleantrue是否订阅区域报警
areaAlertMqttTopicstringarea_alert区域报警主题
abnormalMqttEnabledbooleantrue是否订阅异常消息
abnormalMqttTopicstringabnormal异常消息主题
peopleCountMqttEnabledbooleantrue是否订阅人数统计
peopleCountMqttTopicstringpeople_count人数统计主题

各 MQTT 块均包含对应的*ClientId字段,用于区分客户端连接。

devices — 门禁设备

devices为数组,每项代表一台门禁设备:

字段类型必填说明
ipstring设备 IP
userNamestring登录用户名
passwordstring登录密码
portnumberSDK 端口,通常为8000
enabledboolean是否启用该设备
namestring设备简称
deviceNamestring设备显示名称
deviceIDstring设备唯一 ID
areaIDstring所属区域 ID
remarkstring备注
directionstring默认进出方向:/
controlDoorNonumber门控门号,默认1
doorsarray多门方向配置,项含doorNodirection

配置示例:

{"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备注

后端会按employeeIdemployeeNocard_idname等字段与刷脸事件关联。门禁设备返回的员工号需与表中employeeIdemployeeNo一致,才能正确显示姓名。

配置示例:

[{"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_URL=http://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.jsonconfig.webPort
  • 前端端口:修改frontend/vite.config.tsserver.port

MQTT 相关功能不可用

  • 检查DeviceConfig.jsonconfig中 MQTT 主机地址与端口
  • 若暂不需要 MQTT,可将对应*MqttEnabled设为false

相关文档

  • backend/README.md— 后端独立项目说明
  • backend/GetACSEvent/事件API说明.md— 事件 API 详细文档
  • backend/GetACSEvent/图片服务器使用说明.md— 图片服务说明
http://www.gsyq.cn/news/1489888.html

相关文章:

  • 2026年大件货国际货运公司排行及选型推荐:整柜国际物流公司/整柜国际货运公司/海运国际货运公司/优选指南 - 优质品牌商家
  • 别再手动写Loading了!用Vue 3的Composition API封装一个全局加载动画(附完整代码)
  • 电商物流追踪完全指南:从手动查单到批量查询,一套方案解决所有痛点
  • 告别数据不平衡:用CTGAN的‘条件生成器’为你的表格数据生成高质量合成样本
  • Stable Baselines3:5分钟掌握PyTorch强化学习框架
  • 2021年量产的时间窗口:曲速科技在推理赛道形成先发积累
  • 期末论文复习双重压力?百考通AI帮你高效搞定课业写作难题
  • 避开这些坑!用立创EDA手动拼板PCB的完整流程与注意事项
  • 2026年Q2四川地区优秀管理体系认证咨询机构排行 - 优质品牌商家
  • 2026扇形淋浴房技术解析:宜宾卫生间隔断品牌推荐/宜宾卫生间隔断定制/宜宾淋浴房品牌推荐/材质与空间适配全推荐 - 优质品牌商家
  • 智能锡膏柜选购亲测分享:技术好的厂家推荐
  • 2026年评价高的质量管理体系认证top5机构盘点:成都iso27017认证/成都iso27701认证/实力盘点 - 优质品牌商家
  • 2026波纹补偿器推荐榜:河南压盖式松套伸缩器/河南双法兰传力伸缩器/河南双法兰限位伸缩器/适配多场景耐腐蚀需求 - 优质品牌商家
  • 数据库(基础):
  • 保姆级教程:手把手教你搞定华三AC与绿洲平台的无线认证对接(含微信认证优化)
  • 告别启动文件冲突:手把手教你修正ThreadX在MDK-AC5下的移植难题
  • 【AI】认识Multica-本地运行时与云端编排的多智能体平台
  • 定制泡沫包装头部供应商综合实力排行 - 优质品牌商家
  • 微信聊天记录永久保存指南:3步免费导出聊天数据,掌握你的数字记忆
  • LogSieve:基于RCA感知的智能日志过滤技术解析
  • Effective C++ 条款04:确定对象被使用前已先被初始化
  • 【CUDA】MNNVL和NVLink SHARP的关系
  • Claude Code Codex 高阶面试题及答案解析(真题)
  • ESP32/ESP8266外挂W25QXX闪存,手把手教你从零写驱动(附完整代码)
  • 成都神经损伤康复转行律师团队评测:实战能力维度对比 - 优质品牌商家
  • 原神FPS解锁器终极指南:从内存操作到.NET 8架构的完整解析
  • C语言进化与关键字扩展全梳理
  • 【课程设计/毕业设计】基于springboot+微信小程序的旅游线路定制微信小程序【附源码、数据库、万字文档】
  • Flink入门避坑指南:从Checkpoint配置到State管理,新手最容易踩的5个坑
  • 5分钟掌握九大网盘直链下载终极方案:告别客户端束缚,一键获取真实下载链接