海康明眸测温及身份证SDK接口C#编程小结
因为疫情一些医院使用海康明眸测温设备测体温并且登记身份证,因此开发了一个登记程序,接收设备的体温和身份证信息。
设备型号:DS-KAB671-I,图片如下:
首先从海康官网下载SDK,但是里面没有体温和身份证接口信息,发邮件很快得到回复,在文末有下载。海康的很多设备应该都是用这一套SDK。
解压后能找到C#示例程序,根据自己的项目是32位还是64位选择对应的dll文件复制到程序所在文件夹。
下图是SDK里的示例程序,有完整的源代码。测试设备接口的时候可以直接用这个软件连接设备接收数据,能看到是哪种类型的数据,用于后面选择对应的功能模块。输入IP、端口、用户名、密码点添加,然后点全部布防。
示例代码里有两个文件:CHCNet.cs和CHCNetSDK.cs复制到自己的项目里使用。CHCNetSDK.cs里定义了各种监控视频、车牌识别、门禁等接口的定义,可以直接用。CHCNet.cs里有全部功能的使用示例,我根据需要对其中一部分进行了改写,方便获取数据。
连接设备流程:第一步使用IP、端口、账号、密码连接设备,第二步执行布防。然后用HikNet_GetMessage事件获取信息。
调用方法:
CHCNet hikNet = new CHCNet();
hikNet.GetError += HikNet_GetError;//获取出错信息
hikNet.GetMessage += HikNet_GetMessage;//获取体温、身份证信息
hikNet.Init();//初始化
hikNet.AddDevice("IP", "Port", "ID", "PW");//连接设备
hikNet.SetAlarm();//布防
从事件获取体温、身份证信息:
public void HikNet_GetMessage(object sender, HikEventArgs e)
{
if (e.HikMessage == null ||
(Cvt.IsNull(e.HikMessage.IDCard) && Cvt.ToDouble(e.HikMessage.Temperature) == 0))
{//跳过与体温无关的消息
return;
}
if (Cvt.IsNull(e.HikMessage.IDCard) && Cvt.ToDouble(e.HikMessage.Temperature) > 0)
{//只有体温,无身份证信息
txtRegDate.Text = e.HikMessage.DateTime;
pic0.Image = e.HikMessage.Image;//抓拍图像
pic1.Image = e.HikMessage.ImageThermal;//热成像图像
txtTemperature.Text = e.HikMessage.Temperature;//体温
}
else
{
txtName.Text = e.HikMessage.Name;
txtTemperature.Text = e.HikMessage.Temperature;
txtRegDate.Text = e.HikMessage.DateTime;
txtIDCard.Text = e.HikMessage.IDCard;
if (txtIDCard.Text.Length > 16)
txtBirthDay.Text = txtIDCard.Text.Substring(6, 4) + "-" + txtIDCard.Text.Substring(10, 2) + "-" + txtIDCard.Text.Substring(12, 2);
txtIDCardAddress.Text = e.HikMessage.Address;
cmbSex.Text = e.HikMessage.Sex;
pic0.Image = e.HikMessage.Image;
pic1.Image = e.HikMessage.ImageThermal;
pic2.Image = e.HikMessage.ImageIDCard;
}
}
获取错误信息:
private void HikNet_GetError(object sender, HikEventArgs e)
{
txtLog.Text = e.Message + "[" + e.IP + "]" + DateTime.Now + "\r\n" + txtLog.Text;
}
程序退出时关闭接口:
private void fMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (hikNet != null)
{
if (hikNet.IsListen)
hikNet.StopListen();//停止监听,这里用不上
hikNet.CloseAlarm();//关闭布防
hikNet.Close();//关闭连接
}
}
CHCNet.cs简单说明:接收信息时在AlarmMessageHandle方法中根据信息类型选择对应的方法,比如ProcessCommAlarm_AcsAlarm、ProcessCommAlarm_ThermAlarm和ProcessCommAlarm_ISAPIAlarm(体温),ProcessCommAlarm_IDInfoAlarm(身份证加体温),这几个方法对应不同的消息类型。其他详细内容可以下载源代码自行研究。
注意:
1.SDK的32位或者64位是跟自己的项目对应,否则出错;
2.一个设备只能有一个软件布防,否则会提示连接失败;
3.需要用示例程序接收数据来判断是哪种类型,然后改写对应的方法;
4.程序布防成功后会接收设备内未传送的所有记录,而且大约1秒/条,如果记录太多可以在设备里清除;
5.先刷身份证再测体温才能让两组数据在一条信息里。
源代码及SDK开发包下载:
改写的海康接口源代码
海康设备SDK及文档(含体温及身份证)
海康示例程序及代码