基于海康门禁的人员计数系统
2026/6/9 1:29:18 网站建设 项目流程

项目地址: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— 图片服务说明

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询