#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdarg.h>
#include <unistd.h>
#include "WMRAPI.h"
int g_deviceHandle = 0;
unsigned char pDevSN[64] = {0};
char pCmd = 0;
int g_CaptureType = -1;
int g_CapNum = 0;
unsigned char ImageBuf[160000] = {0};
unsigned char BmpImageBuf[160000] = {0};
int ImageWidth = 0;
int ImageHeight = 0;
unsigned char pImgArray[3][160000] = {0};
unsigned char *pImgIn[3];
unsigned char pTemplate[2048] = {0};
unsigned char pFeature[1024] = {0};
char pFilePath[256]={0};
typedef enum
{
ENROLL_TYPE,
VERIFY_TYPE,
VERIFY_CID_TYPE
}CAPTURETYPE;
//保存文件
int SaveFile(char* FilePath,char* pDataBuffer,int nDataSize)
{
FILE *pFile = fopen(FilePath,"wb+");
if (pFile == NULL)
{
return -1;
}
fwrite(pDataBuffer,nDataSize,1,pFile);
fclose(pFile);
return 0;
}
void HexStr2CharStr(char* pszHexStr, unsigned char* pucCharStr, int iSize)
{
int i = 0;
unsigned char ch = 0;
for(i=0; i<iSize; i++)
{
ch = 0;
for(int j=0; j<2; j++)
{
if(*(pszHexStr+2*i + j) >='0' && *(pszHexStr+2*i + j) <= '9')
ch = (ch << 4) + (*(pszHexStr+2*i + j) - '0');
else if(*(pszHexStr+2*i + j) >='A' && *(pszHexStr+2*i + j) <= 'F')
ch = (ch << 4) + (*(pszHexStr+2*i + j) - 'A' + 10);
else
break;
}
pucCharStr[i] = ch;
}
}
int readfile(const char* name, unsigned char* pTemplate, int l)
{
FILE* fp;
int ret;
if ((fp = fopen(name, "rb")) == NULL) {
return -1;
}
//fseek(fp, 1078, SEEK_SET);
ret = fread(pTemplate, 1, l, fp);
fclose(fp);
return ret;
}
int main(int argc, char*argv[])
{
int nRet = 0;
int nCount = WM_GetDeviceCount();
if (nCount <= 0)
{
printf("No device!\r\n");
return -1;
}
printf("Device number:%d\r\n",nCount);
nRet = WM_Init();
if (WM_OK != nRet)
{
printf("Init fail!\r\n");
return -1;
}
nRet = WM_OpenDevice(0,&g_deviceHandle);
if (WM_OK != nRet)
{
printf("Open device fail!\r\n");
return -1;
}
printf("Open device success!\r\n");
memset(pDevSN,0,64);
WM_GetSerialNumber(g_deviceHandle,pDevSN);
printf("SN:%s\r\n",pDevSN);
WM_GetImageInfo(&ImageWidth,&ImageHeight);
bool bExit = false;
bool bFinished = false;
bool bGetFeature = false;
bool bIsUpFinger = true;
int TimeOut = 0;
int Size = 0;
while(!bExit)
{
if(!bGetFeature)
{
printf("Enroll puts e, Verify puts v, Verify file[./cidfinger.dat] puts c, Exit puts x: \r\n");
scanf("%c",&pCmd);
if(pCmd == 'e')
{
g_CaptureType = ENROLL_TYPE;
g_CapNum = 0;
bFinished = false;
bGetFeature = true;
}
else if(pCmd == 'v')
{
g_CaptureType = VERIFY_TYPE;
g_CapNum = 0;
bFinished = false;
bGetFeature = true;
}
else if(pCmd == 'c')
{
g_CaptureType = VERIFY_CID_TYPE;
g_CapNum = 0;
bFinished = false;
bGetFeature = true;
}
else if(pCmd == 'x')
{
bExit = true;
continue;
}
else
continue;
printf("Please press finger..\r\n");
}
if(bGetFeature)
{
if (!bFinished)
{
nRet = WM_GetImage(g_deviceHandle,TimeOut,ImageBuf,&Size);
if (nRet == WM_OK && bIsUpFinger)
{
WM_RawToBMP(ImageBuf,ImageWidth,ImageHeight,BmpImageBuf,&Size);
sprintf(pFilePath,"R6-%d-%d.bmp",g_CaptureType,g_CapNum);
SaveFile(pFilePath,(char*)BmpImageBuf,Size);
//DisplayBmpImg(BmpImageBuf,ImageWidth,ImageHeight);
if (g_CaptureType == ENROLL_TYPE) //注册模式
{
memset(pImgArray[g_CapNum],0,sizeof(pImgArray[g_CapNum]));
memcpy(pImgArray[g_CapNum],BmpImageBuf,ImageWidth*ImageHeight+1078);
if (nRet == WM_OK)
{
g_CapNum++;
printf("capture count:%d..\r\n",g_CapNum);
if (g_CapNum > 2)
{
bFinished = true;
bGetFeature = false;
pImgIn[0] = pImgArray[0];
pImgIn[1] = pImgArray[1];
pImgIn[2] = pImgArray[2];
//printf("WM_GenTemplateWithImage begin..\r\n");
nRet = WM_GenTemplateWithImage(pImgIn,g_CapNum,ImageWidth,ImageHeight,pTemplate,&Size);
//printf("WM_GenTemplateWithImage end..\r\n");
if (nRet == WM_OK)
{
printf("Enroll success!\r\n");
g_CapNum = 0;
}
else
{
printf("Generate template fail, Enroll fail!\r\n");
g_CapNum = 0;
}
}
else
{
printf("Please put up finger then press again..\r\n");
}
}
else
{
printf("Quality not good, press again..\r\n");
}
bIsUpFinger = false;
}
else if (g_CaptureType == VERIFY_TYPE) //比对模式
{
nRet = WM_Extract(BmpImageBuf,ImageWidth,ImageHeight,pFeature,&Size);
if (nRet == WM_OK)
{
printf("Extract feature success..\r\n");
bFinished = true;
bGetFeature = false;
int score = 0;
nRet = WM_Verify(pTemplate,pFeature,&score);
if (nRet == WM_OK)
{
printf("Verify success, score: %d..\r\n",score);
}
else if (nRet == WM_VERIFY_FAIL)
{
printf("Verify fail,score: %d..\r\n",score);
}
else
{
printf("Verify error, error code: %d..\r\n",nRet);
}
}
else
{
printf("Quality not good, press again..\r\n");
}
}
else //CID比对模式
{
//读取身份证文件
int nLen = readfile("./cidfinger.dat", pTemplate, 2048);
if(nLen <= 0){
printf("read ./cidfinger.dat error\r\n");
}else{
nRet = WM_Extract(BmpImageBuf,ImageWidth,ImageHeight,pFeature,&Size);
if (nRet == WM_OK)
{
printf("Extract feature success..\r\n");
bFinished = true;
bGetFeature = false;
int score = 0;
//身份证第一个指纹
nRet = WM_CIDVerify(pTemplate,pFeature,&score);
if (nRet == WM_OK)
{
printf("Verify cid1 success, score: %d..\r\n",score);
}
else if (nRet == WM_VERIFY_FAIL)
{
printf("Verify cid1 fail,score: %d..\r\n",score);
}
else
{
printf("Verify cid1 error, error code: %d..\r\n",nRet);
}
//身份证第二个指纹
nRet = WM_CIDVerify(pTemplate+512,pFeature,&score);
if (nRet == WM_OK)
{
printf("Verify cid2 success, score: %d..\r\n",score);
}
else if (nRet == WM_VERIFY_FAIL)
{
printf("Verify cid2 fail,score: %d..\r\n",score);
}
else
{
printf("Verify cid2 error, error code: %d..\r\n",nRet);
}
}
else
{
printf("Quality not good, press again..\r\n");
}
}
}
}
else if (nRet == WM_GETIMG_FAIL)
{
bIsUpFinger = true;
}
}
usleep(200);
}
usleep(200);
}
return 0;
}
纹宁WMRAPI指纹SDK开发包(鸿蒙/OpenHarmony)
需积分: 0 141 浏览量
2023-12-01
10:32:13
上传
评论
收藏 1013KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
Winuim
- 粉丝: 9
- 资源: 1
最新资源
- 数据库管理工具:dbeaver-ce-23.3.0-stable.x86-64.rpm
- 数据库管理工具:dbeaver-ce-23.3.0-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.3.0-macos-aarch64.dmg
- 数据库管理工具:dbeaver-ce-23.2.5-stable.x86-64.rpm
- 数据库管理工具:dbeaver-ce-23.2.5-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.2.5-macos-aarch64.dmg
- Kettle上连接HDFS,同步虚拟机上MySQL数据到HDFS
- 数据库管理工具:dbeaver-ce-23.2.4-x86-64-setup.exe
- 数据库管理工具:dbeaver-ce-23.2.4-stable.x86-64.rpm
- 含小数的十进制转N进制源代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)