海康威视人脸、指纹一体机SDK封装
for PowerBuilder 说明
- 概述
ACS 封装,用C++实现DLL开发,由PowerBuilder(9.0以上版本) 调用,基于海康威视 SDK,《设备网络SDK使用手册.chm》、《设备网络SDK编程指南(门禁&人证).pdf》、《HCNetSDK.h》,相关标准,参考这两个文档。所提供参数和返回值,均基于 json 传递。支持一机控制多台设备,以acsid 编号唯一指定每台设备,编号和保存方式由程序员自己管理。
- 功能清单:
注:以下功能表述中,“下发”指把数据由电脑传送到海康威视设备中。
- 设备登录和退出
1、函数声明:
function boolean AcsLogin(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsLogin"
subroutine AcsLogout(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsLogout"
2、登录代码:
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("ip","192.168.3.66")
json.set("port",8000)
json.set("user","admin")
json.set("password","123456")
if luo_hk.AcsLogin(json) then
MessageBox("","connect success")
this.enabled = false
cb_disconnect.enabled = true
else
MessageBox("","connect fail")
end if
of_showjson(json)
destroy json
3、退出代码:
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号,如果指定编号,则退出指定设备,如果为0,则退出管理的所有设备
luo_hk.acsLogout(json)
of_showjson(json)
destroy json
this.enabled = false
cb_connect.enabled = true
(二)建卡管理(人员档案管理)。人脸识别、指纹识别均基于建卡。
1、下发卡功能。数据标准参考NET_DVR_CARD_CFG_V50 结构。
(1)函数声明:
//增人员
function boolean AcsSendUser(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsSendUser"
//检索人员
function boolean AcsGetUser(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsGetUser"
//删除人员
function boolean AcsDeleteUser(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsDeleteUser"
//清除所有人员
function boolean AcsClearUser(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsClearUse
(2)下发卡代码:
uo_json json,jsonValid
json = create uo_json
json.set("CARD_PARAM_CARD_VALID" ,true) //卡是否有效参数
json.set("CARD_PARAM_VALID" ,true) //有效期参数
json.set("CARD_PARAM_CARD_TYPE" ,true) //卡类型参数
json.set("CARD_PARAM_DOOR_RIGHT" ,true) //门权限参数
json.set("CARD_PARAM_LEADER_CARD" ,true) //首卡参数
json.set("CARD_PARAM_SWIPE_NUM" ,true) //最大刷卡次数参数
json.set("CARD_PARAM_GROUP" ,true) //所属群组参数
json.set("CARD_PARAM_PASSWORD" ,true) //卡密码参数
json.set("CARD_PARAM_RIGHT_PLAN" ,true) //卡权限计划参数
json.set("CARD_PARAM_SWIPED_NUM" ,true) //已刷卡次数
json.set("CARD_PARAM_EMPLOYEE_NO" ,true) //工号
json.set("CARD_PARAM_NAME" ,true) //姓名
//acs终端编号
json.set("acsid",1)
//卡号
json.set("byCardNo","101")
//卡密码
json.set("byCardPassword","123456")
//工号(用户ID)
json.set("dwEmployeeNo",101);
//姓名
json.set("byName","老李")
//卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1)
json.set("byCardValid",1)
//卡类型,1-普通卡,2-残疾人卡,3-黑名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,9-员工卡,10-应急卡,11-应急管理卡(用于授权临时卡权限,本身不能开门),默认普通卡
json.set("byCardType",1)
//是否为首卡,1-是,0-否
json.set("byLeaderCard",0)
// 0 – 普通用户1 - 管理员用户;
json.set("byUserType",0)
//门权限(楼层权限、锁权限),按位表示,1为有权限,0为无权限,从低位到高位表示对门(锁)1-N是否有权限
json.set("byDoorRight",1)
//所属群组,按字节表示,1-属于,0-不属于
json.set("byBelongGroup",1)
//卡权限计划,取值为计划模板编号,同个门(锁)不同计划模板采用权限或的方式处理
json.set("wCardRightPlan",1)
//最大刷卡次数,0为无次数限制(开锁次数)
json.set("dwMaxSwipeTime",0)
//已刷卡次数
json.set("dwSwipeTime",0)
//房间号
json.set("wRoomNumber",0)
//层号
json.set("wFloorNumber",0)
//部门编号
json.set("wDepartmentNo",0)
//排班计划编号
json.set("wSchedulePlanNo",0)
//排班计划类型:0-无意义、1-个人、2-部门
json.set("bySchedulePlanType",0)
//下发权限类型:0-普通发卡权限、1-二维码权限、2-蓝牙权限(可视对讲设备二维码权限配置项:房间号、卡号(虚拟卡号)、最大刷卡次数(开锁次数)、有效期参数;蓝牙权限:卡号(萤石APP账号)、其他参数配置与普通发卡权限一致)
json.set("byRightType",0)
//锁ID
json.set("dwLockID",0)
//锁代码
json.set("byLockCode","")
//房间代码
json.set("byRoomCode","")
//卡权限
//第0位表示:弱电报警
json.set("dwCardRight_0",false)
//第1位表示:开门提示音
json.set("dwCardRight_1",false)
//第2位表示:限制客卡
json.set("dwCardRight_2",false)
//第3位表示:通道
json.set("dwCardRight_3",false)
//第4位表示:反锁开门
json.set("dwCardRight_4",false)
//第5位表示:巡更功能
json.set("dwCardRight_5",false)
//如果直接在外面设置好了,就以设置好的值覆盖dwCardRight_0 - dwCardRight_5
//json.set("dwCardRight",255) //按位计算的结果,255 是所有位都置1
//计划模板(每天)各时间段是否启用,按位表示,0--不启用,1-启用
json.set("dwPlanTemplate",0)
//持卡人ID
json.set("dwCardUserId",0)
//0-空,1- MIFARE S50,2- MIFARE S70,3- FM1208 CPU卡,4- FM1216 CPU卡,5-国密CPU卡,6-身份证,7- NFC
json.set("byCardModelType",0)
//SIM卡号(手机号)
json.set("bySIMNum","")
//有效期参数 NET_DVR_VALID_PERIOD_CFG ,另一个 json
jsonValid = create uo_json
//使能有效期,0-不使能,1使能
jsonvalid.set("byEnable",1)
//是否限制起始时间的标志,0-不限制,1-限制
jsonvalid.set("byBeginTimeFlag",0)
//是否限制终止时间的标志,0-不限制,1-限制
jsonvalid.set("byEnableTimeFlag",0)
//有效期索引,从0开始(时间段通过SDK设置给锁,后续在制卡时,只需要传递有效期索引即可,以减少数据量)
jsonvalid.set("byTimeDurationNo",0)
//有效期起始时间 , 结构 NET_DVR_TIME_EX ,在字符串传入,再做转换
jsonValid.set("struBeginTime","2018-02-03 01:05:06")
//有效期结束时间
jsonValid.set("struEndTime","2025-12-31 23:59:59")
//时间类型:0-设备本地时间(默认),1-UTC时间(对于struBeginTime,struEndTime字段有效)
jsonValid.set("byTimeType",0)
//将有效期json添加进主 json
json.set("struValid",jsonValid)
destroy jsonValid
///
// 数据设置结束,下面开始调用
///
if not luo_hk.acsSendUser(json) then
json.Get("return",ls_ret)
MessageBox("",ls_ret)
end if
//json.WritejsonFile("UserCard.json",true,false)
of_showjson(json)
destroy json
2、获取设备已发卡人员,结果保存在 json 里返回:
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
luo_hk.acsGetUser(json)
of_showjson(json)
destroy json
3、删除指定卡
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("CARD_PARAM_CARD_VALID",true) //卡是否有效参数
//卡号
json.set("byCardNo","101")
//卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1)
json.set("byCardValid",0)
luo_hk.AcsDeleteUser(json)
of_showjson(json)
destroy json
4、删除设备里的所有卡:
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
luo_hk.AcsClearUser(json)
of_showjson(json)
destroy json
-
- 数据装卸工具函数
设备限制:每个人可以拥有2张不超过200K大小的人脸照片,或者 1-10个指纹数据。在数据交换过程中,以单个数据存储显得很零乱,因此采用 sqlite3 数据库作为中间交换方式。中间数据库名称:acs.db
-
-
- 函数声明
-
将文件装载到acs.db
function boolean AcsLoadFile(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsLoadFile"
//将blob装载到acs.db
function boolean AcsLoadBlob(uo_json json,blob data) system library "AcsInterfaceA.dll" alias for "AcsLoadBlob"
//从 acs.db 将数据取出,得到一个 blob
function blob AcsUnLoadFile(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsUnLoadFile"
-
-
- 加载数据文件代码
-
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
json.set("byFileName","image\timg.jpg")
json.set("bType",1) //1 脸,2指纹
json.set("bFaceID",1) //第1张,ID号可取 1-2
//如果是指纹数据,json.set("bFingerID",1),ID号可取 1- 10
luo_hk.AcsLoadFile(json)
of_showjson(json)
destroy json
-
-
- 加载BLOB代码
-
uo_json json
blob lb_data //BLOB从数据库取出来,或者从文件读出来
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
json.set("bType",1) //1 脸,2指纹
json.set("bFaceID",1) //第1张
//如果是指纹数据,json.set("bFingerID",1),ID号可取 1- 10
luo_hk.AcsLoadBlob(json,lb_data)
of_showjson(json)
destroy json
-
-
- 从 acs.db 取人脸或指纹代码
-
blob data
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
json.set("bType",1) //1 脸,2指纹
json.set("bFaceID",1) //第1张
//如果是指纹数据,json.set("bFingerID",1),ID号可取 1- 10
data = luo_hk.AcsUnLoadFile(json) //取到 data 后,可以自己处理,比如存到数据库,或者写入文件,如果是人脸图片,可以 p_1.SetPicture(data)显示
of_showjson(json)
destroy json
(四)人脸图片管理。人脸图片可以上传照片,也可以直接在机器上采集照片。规定:人脸图片小于200K,bFaceID为1-2。
1、函数声明
//发送一张人脸照片,可以将文件直接发送,也可以通过指定rowid从 acs.db 取数据发送
function boolean AcsSendFace(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsSendFace"
//获取人脸照片,结果存在 acs.db
function boolean AcsGetFace(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsGetFace"
//删除照片
function boolean AcsDeleteFace(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsDeleteFace"
2、下发人脸照片代码(也可以不下发,直接在机器上采集)
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.Set("byCardNo","101")
//注意下面注释起来的2句,如果直接从文件下发,就把这两句打开。如果直接把已存在 acs.db 里的人脸照片数据下发,就把这两句注释起来
//json.Set("byFaceID",1)
//json.Set("byFace","image\face.jpg")
luo_hk.acsSendFace(json)
of_showjson(json)
destroy json
3、从设备获取人脸图片代码。获取的图片存在 acs.db 里,如果需要取出来,请使用AcsUnLoadFile函数
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
luo_hk.acsGetFace(json)
of_showjson(json)
destroy json
4、从设备删除人脸图片
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
luo_hk.acsDeleteFace(json)
of_showjson(json)
destroy json
(五)指纹数据管理。指纹数据从设备采集,bFingerID可取值范围 1 - 10
1、函数声明
//通过指定rowid从 acs.db 取数据发送
function boolean AcsSendFinger(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsSendFinger"
//获取指纹数据,结果存在 acs.db
function boolean AcsGetFinger(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsGetFinger"
//删除指纹
function boolean AcsDeleteFinger(uo_json json) system library "AcsInterfaceA.dll" alias for "AcsDeleteFinger"
2、下发指纹代码。指纹直接在设备上采集。但为了保存起来,可将采集的指纹获取到 acs.db中,然后再通过 acsUnloadFile 取得BLOB,存到数据库里。对新设备或多台设备的情况下,可以直接从 acs.db 中将已采集的指纹下发到设备中去。
uo_json json
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
luo_hk.acsSendFinger(json)
of_showjson(json)
destroy json
3、从设备获取指纹到 acs.db中。
uo_json json,
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
luo_hk.acsGetFinger(json)
of_showjson(json)
destroy json
4、删除设备中的指纹数据
uo_json json,
json = create uo_json
json.set("acsid",1) //acs终端编号
json.set("byCardNo","101")
luo_hk.acsDeleteFinger(json)
of_showjson(json)
destroy json
(六)布防。布防就是将设备的刷脸和刷指纹事件,与PB的事件关联起来。当有刷脸或刷指纹事件触发时,PB做出相应响应,可用于判断有效性合法性,或者做数据库记录等等。
支持多套设备布防,往同一个管理程序发事件。
当用户登录海康威视设备后,会自动布防。PB程序需要响应uo_haikang的ue_alarm(uo_json json)事件。在json 参数中,提供了布防的相关信息,诸如设备的IP地址,设备号,刷脸或刷指纹者的卡号等等。
该封装已有多个应用稳定运行中。
大自在 QQ:781770213
QQ群
2019/12/14