指纹采集器Live 20R

最近有个项目需要使用指纹采集器Live 20R,买来这个小玩意后不知道怎么用,看了一些教程和自己摸索了一下,才初步掌握了用的方法。

环境:

  • 硬件:联想 小新
  • 操作系统:Win 10
  • IDE:VS2019

下载SDK包 运行Demo

首先插上Live 20R后,电脑没什么反应,可以在“设备和打印机”中看到Live 20R是已经连接到了电脑上来,但是由于缺少驱动程序,因此当你双击Live 20R的图标时,电脑会提醒你该设备没有驱动程序,这个驱动程序需要我们自己去官网上进行安装。

接着需要去官网上下载开发包,链接如下:

https://www.zkteco.com/cn/download_catgory.html

可以看到下面的SDK开发包,分为Windows和Android,由于我的环境是Win 10,因此下载红框圈主的windows开发包。

下载下来后首先运行setup.exe安装驱动程序

当安装完毕后,我们再次打开“设备与打印机”。

发现已经不提示缺少驱动程序了,而是该设备运转正常。

之后再次进入官网下载的开发包里面,这里面提供了几种不同语言写的demo程序和一些依赖库文件,我们打开C语言的示例程序,可以看到是MFC程序,非常老了(为了运行,我又在自己的VS2019里面重新装了一下对MFC的支持),可以看到大概运行起来就是下图这个样子,手指按上去,可以获得手指的灰度图(出于安全考虑打了一部分码 🤣)。同时Demo还提供了验证指纹图像是否一致等功能,里面代码还是值得好好研究的😀。

分析代码 自主创业

第一步添加头文件和库文件

在代码中将include的头文件都包含进来

#include "libzkfp/include/zkinterface.h"
#include "libzkfp/include/libzkfperrdef.h"
#include "libzkfp/include/libzkfptype.h"
#include "libzkfp/include/libzkfp.h"

可以看到库文件有两个x64为64位的库文件,x86为32位的库文件,因此我们通过添加下面这句,来添加库文件

#ifdef _WIN64
#pragma comment(lib, "libzkfp/x64lib/libzkfp.lib")
#else
#pragma comment(lib, "libzkfp/x86lib/libzkfp.lib")
#endif

第二步 编写代码

  1. 定义设备句柄

    HANDLE device_handle;
    
  2. 初始化设备

    if (ZKFP_ERR_OK != ZKFPM_Init()) {	//initialize resource
    		cout << "error in zkfpm_init\n";
    }
    
  3. 打开设备

    if ((device_handle = ZKFPM_OpenDevice(0)) == NULL)	{//open the device
    
    		cout <<  "error in zkfpm_openDevice\n";
    		ZKFPM_Terminate();
    		return 0;
    }
    
  4. 获取参数:指纹图像的宽和高

    	int m_imgFPWidth;
    	int m_imgFPHeight;
    	unsigned char szTemplate[MAX_TEMPLATE_SIZE];
    	unsigned int tempLen = MAX_TEMPLATE_SIZE;
    
    	unsigned int size = 4;
    	ZKFPM_GetParameters(device_handle, 1, (unsigned char*)&m_imgFPWidth, &size);
    	size = 4;
    	ZKFPM_GetParameters(device_handle, 2, (unsigned char*)&m_imgFPHeight, &size);
    
  5. 获取指纹

    unsigned char* m_pImgBuf = new unsigned char[m_imgFPWidth * m_imgFPHeight];
    int ret = ZKFPM_AcquireFingerprint(device_handle, m_pImgBuf, m_imgFPWidth * m_imgFPHeight, szTemplate, &tempLen);
    while (ZKFP_ERR_OK != ret)	
    {
        ret = ZKFPM_AcquireFingerprint(device_handle, m_pImgBuf, m_imgFPWidth * m_imgFPHeight, szTemplate, &tempLen);
    }
    for (int i = 0; i < m_imgFPHeight * m_imgFPHeight; i++) {
        cout << m_pImgBuf[i] << " ";
    }
    

第三步 转为TIFF图像显示[1]

我们采用LibTiff库实现创建Tiff图像。具体细节不进行介绍,因为我也不是很清楚内部原理如何。

最后成功实现了生成tif图像。

参考资料

[1] 用LibTIFF绘制TIFF图像

代码下载链接

链接:https://pan.baidu.com/s/1EPrDz7NVJ_LLp5gp_dNHeg
提取码:kksz
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V1的分享

posted @ 2021-02-14 10:34  扶磐  阅读(2592)  评论(0编辑  收藏  举报