海康威视人脸、指纹一体机SDK封装 for PowerBuilder 说明

海康威视人脸、指纹一体机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

      1. 函数声明

////将文件装载到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"

      1. 加载数据文件代码

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

      1. 加载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

      1. 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

猜你喜欢

转载自blog.csdn.net/lxbin2003/article/details/106185954