指纹识别仪SDK开发包及函数说明(2013)
指纹识别模块说明书

指纹识别模块实验注:此说明书适用于EL-EMCU-I实验箱、EXP-89S51/52/53CPU板。
一、实验目的掌握指纹模块的开发协议;掌握16C550芯片的编程方法;二、实验设备计算机,KEIL UVISION2环境,EL-EMCU-I实验箱,直连串口电缆、交叉串口电缆(针对针),导线,短接块。
三、基本原理指纹识别模块采用MCU和PC两种控制方法,供用户灵活选用。
其指纹模块采用深圳十指科技的TF-MD-M12开发模块,MCU端的外围电路由通过芯片16C550芯片进行并口到串口的转换,PC端的外围电路用MAX3232控制,模块的电源由实验箱上的接口插座提供。
下面将具体介绍一下各部分的组成及其原理。
TF-MD-M12开发模块的功能特点:◇先进的指纹识别算法(商业);◇高速算法,500人指纹只要0.43 秒;◇1:N,1:1 比对(两种可选);◇用户可分多级权限管理(1、2、3);◇多级的安全级别自主设置,可更多应用于不同场所;◇采用高精密的光学成像元件,识别准确;◇体积小,电路只有:40*58mm,易于集成;◇功能高度集成,存于DSP中,不用再加电路板;◇标准接口协议,开发简单;◇采用面光源,成像速度快;◇内部采用高级数字处理器DSP,处理速度快;◇识别率高,最高可达:0.00001% ;◇稳定性好,四年不断升级和优化;◇具低电压报警功能;◇微功耗设计适于电池供电;◇主板低频设计抗外部电磁干扰;◇主要供外销厂家和集成商,开发和集成产品;◇设计精巧适于嵌入指纹锁/小指纹门禁机/手持指纹识别设备;TF-MD-M12开发模块的主要性能指标:◇电路板尺寸(mm)58×40◇采集头分辨率500DPI◇指纹容量80 枚◇比对时间<1 秒◇认假率0.0001%◇拒真率0.01%◇动态电流<140mA◇待机电流<18µA◇工作电压5-7.5V其开发协议请用户参见随程序附带的TF-MD-M1开发协议PDF文档。
指纹识别指导

指纹开发包函数说明Polymath USB Fingerprint SDKVersion 3.1Polymath Technology Development Co., Ltd宝利铭科技发展有限公司地址:厦门软件园二期57号902单元电话:592-5310833、5310273传真:592-5310259网址:电邮:manager@Document version 1.0© Copyright 2007 Polymath Corporation. All right reserved.一、概述本开发包以动态连接库(DLL)的方式提供,SDK光盘配备以下项目:[ Dll ] 库文件。
您的应用程序必须把这些库文件包含在应用程序目录中。
[ Driver ] USB指纹采集仪驱动文件。
[ Samples ] 演示代码,包括 VC++,VB。
在您运行演示程序之前,请务必先连接好USB指纹仪及安装其驱动程序。
本演示涉及到文件操作,请将程序从光盘中拷贝到硬盘上再运行。
以下将以VC++ 函数声明方式说明方法,关于VB的函数具体声明应用请参考VB Sample程序,关于其他编程语言请依据具体程序语言如何调用动态连接库进行应用。
二、函数说明2.1 错误码表2.2 常量值表2.3 结构typedef struct tagFPMINDBINFO{DWORD fmdIndex; // 用户IDDWORD fmdValid; // 指纹是否有效,有效值为1BYTE fmdData[DEF_REG_MINSIZE]; // 登记的指纹特征值} FPMINDBINFO , FAR *LPFPMINDBINFO, *PFPMINDBINFO;指纹特征值库结构。
此结构为 FPMIndentify 方法所用。
2.4 函数说明2.4.1 DWORD FPMInit(DWORD deviceType)功能:初始化设备参数:deviceType 设备类型,取值 1(或用常量 DEVTYPE_762164)返回:成功返回 0 (RUN_SUCCESS)备注:应用程序启动后必须先调用此方法才能进行后续方法使用。
中控科技 SDK

Biokey算法特点
3、Biokey算法比对时支持指纹平移(>=指纹面积35%)和 360度旋转。通过使用特殊技术实现在指纹平移和360度 旋转时的快速比对(平均速度3000枚/秒),即使指纹特 征点很少时(<=10,一般手指的特征点)=15),也可以实现 上述功能。 4、Biokey算法不需要指纹必须有全局特征点(核心点、三 角点等),通过局部特征点就可以完成识别。 5、Biokey通过分类算法(指纹被分成五大类型:拱类、左 环类、右环类、尖拱类、旋涡类 “斗”), 预先使用全局特 征排序,从而大大的加速指纹匹配过程。 6、Biokey算法代码相当简洁,数据空间仅需要350K内存, 因此可以容易的移植到嵌入式系统中。
(3)SDK提供方式 专业版和高级版提供DLL方式,其它均以ActiveX的 方式提供。 (4)数据库的使用 Biokey SDK提供的是指纹算法比对开发接口,客户 在开发时可以根据提供的方法已字符串、变体变量或者 文件等方式保存指纹模板到SQL SERVER, ORACLE等数据 库。
Biokey SDK 演示
FAQ
使用平面指纹图像
在使用1:1控件的项目中,很多时候要求保存指纹图像,或者从扫描仪直接扫描得 到平面指纹图像,因此1:1控件SDK提供方法AddImageFile等可以直接从平面指纹 图像得到指纹登记模板的方法,但需要注意必须将图像的分辨率则正确传入此方 法,要求不能低于350DPI。 注意,在普通版中SDK不提供此方法。
UareU取图
仅提供提取UareU4000图像功能 可供其他已有指纹算法或不使用识别功能的客
户使用
WSQ算法
高压缩率
低损失率
AD-013指纹识别模块数据手册说明书

[DESCRIPTION]The AD-013 fingerprint sensor module is consist from a fingerprint sensor & a MCU. The module provide one UART interface output port for connecting to customer side main board.The operation of AD-013 is as following, a fingerprint image captured by pixel array, delivery fingerprint ridge or valley signals to A/D converter and digital processor, then to the serial peripheral interface for data-reading. Due to MCU already installed fingerprint algorithm, the user can through UART interface use MCU SOC command to operate module like fingerprint enroll, match operations etc. [FEATURES]●160x160 pixels●Build-in ADC for digitizing image●UART interface●Data encryption●Short read out time●Cost effective sensor●High sensing capability ●Single power supply[APPLICATIONS]●Door lock●Security device●Access control systemTable of Contents1Electrical Characteristics (4)1.1Maximum rating (4)1.2Operation condition (4)2Specification (5)3Mechanical Specification (6)3.1Connector Information (6)3.2Package size (6)3.3Outline Reference (7)4SDK Guide (7)4.1UART setting (7)4.2Initial time (7)4.3Command protocol (7)4.4Response time (7)5Revision history (8)1 Electrical Characteristics2 SpecificationSensing area 8mm x 8mmSensing array 160 x 160 pixelsPackage size 29mm x 19.6mm x 6.06mm(H) Gray Level 8 bits/pixels ,256 gray scales Recognition Time 1:N , < 0.6 second Template capacity 40FRR(False Rejection Rate) 6%FAR(False Acceptance Rate) <0.01‰Interface UART (57600,8,N,2) / TTL level Supply voltage 3.3VTotal supply current 40mAOperating Humidity 0 - 95% , Non-condense Operating temperature -20 to +70 ⁰CESD protection for air discharging 8kV3 Mechanical Specification3.2 Package size29mm x 19.6mm x 6.06 mm(H)3.3 Outline Reference4 SDK Guide4.1 UART settingUART default baud rate : 57600Data format: 8 bits of data, No parity, 2 stop bits4.2 Initial timeAfter Power on, the module initial time about 50ms.Module will send 0x55 data to Host by UART TX after initial finish. The module would not response Host command at initial time. 4.3 Command protocolPlease refer the SOC Manual document.4.4 Response timeThe normal command response time list as below table5 Revision history。
指纹开发方案

指纹开发方案1. 概述指纹识别是一种生物特征识别技术,通过分析个体指纹的纹线、纹型等特征来实现身份认证及个体识别。
指纹识别在现代生活中得到了广泛应用,如手机解锁、门禁系统等。
本文档将介绍指纹开发方案,包括指纹识别原理、开发流程以及常见的开发工具和技术。
2. 指纹识别原理指纹识别原理基于每个人指纹的独特性。
指纹由一系列的纹线和纹型构成,包括弓型纹、弯曲纹、环型纹等。
指纹识别是通过将目标指纹与已有的指纹模板进行比对,从而判断是否匹配。
指纹识别系统一般包含以下几个步骤:•图像采集:通过传感器获取目标指纹的图像数据。
•预处理:对采集到的图像数据进行去噪、增强等处理,提高后续处理的准确性。
•特征提取:从预处理后的图像中提取出指纹的纹线、纹型等特征。
•特征匹配:将提取出的特征与已有的指纹模板进行比对,计算相似度。
•决策判断:根据匹配结果进行决策,判断是否匹配。
3. 指纹开发流程指纹开发包括图像采集、特征提取、特征匹配和决策判断等步骤。
下面是指纹开发的基本流程:1.图像采集:使用指纹传感器等设备获取目标指纹的图像数据。
可以通过调用硬件接口或使用第三方库来实现图像采集。
# Python代码示例:使用第三方库进行指纹图像采集import fingerprint_libraryfingerprint_image = fingerprint_library.capture_image()2.预处理:对采集到的图像数据进行预处理,去除噪声、增强图像等。
# Python代码示例:使用图像处理库进行指纹图像预处理import image_processing_librarypreprocessed_image = image_processing_library.preprocess_image(fingerpr int_image)3.特征提取:从预处理后的图像中提取指纹的特征。
# Python代码示例:使用特征提取库进行指纹特征提取import feature_extraction_libraryfingerprint_features = feature_extraction_library.extract_features(prep rocessed_image)4.特征匹配:将提取出的指纹特征与已有的指纹模板进行匹配。
指纹识别模块程序及原理图

程序:#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define Dbus P0#define buffer1ID 0x01#define buffer2ID 0x02#define queren 0x88#define tuichu 0x84#define shanchu 0x82sbit B0=B^0;sbit B7=B^7;sbit jidianqi=P3^6;sbit RS=P2^2;sbit RW=P2^1;sbit E1=P2^0;sbit LEDK=P3^4; //控制背光sbit SCLK=P2^3;sbit IO=P2^5;sbit RST=P2^4;uchar code ta[8]={0x00,0x51,0x09,0x10,0x05,0x02,0x11,0xbe}; uchar data a[7]; // 秒分时日月星期年uchar dz[4]; //存键输入值uchar mima[7];uchar mimaID[6]={1,2,3,4,5,6};uchar data K;uchar data Key;uint PageID;uchar data querenma;uchar sum[2];int summaf,summas;uchar code nian[]={"年"};uchar code yue[]={"月"};uchar code ri[]={"日"};uchar code xinqi[]={"星期"};uchar code mao=0x3a;unsigned char code text1[]={" 请按指纹"};unsigned char code text2[]={" 请再次按指纹"};unsigned char code text3[]={" 指纹采集成功"};unsigned char code text4[]={"请按任意键继续"};unsigned char code text5[]={" 指纹采集失败"};unsigned char code text6[]={"输入删去的指纹号"};unsigned char code text7[]={" 删指纹号成功"};unsigned char code text8[]={"按键一:增加指纹"};unsigned char code text9[]={"按键二:删去指纹"};unsigned char code text10[]={" 请重新按指纹"};unsigned char code text11[]={"清空指纹库成功"};unsigned char code text12[]={" 没搜索到指纹"};unsigned char code text13[]={"请先按键再刷指纹"};unsigned char code text14[]={" 请重新操作"};unsigned char code text15[]={" 删去失败"};unsigned char code text16[]={" 接收包出错"};unsigned char code text17[]={" 编号为:"};unsigned char code text18[]={"指纹已找到请进"};unsigned char code text19[]={" 该指纹已存储"};unsigned char code text20[]={" 请输入密码"};unsigned char code text21[]={" 密码错误"};unsigned char code text22[]={"按键三:更新密码"}; // @@@ unsigned char code text23[]={"请再次输入密码"};unsigned char code text24[]={"两次输入的密码不"};unsigned char code text25[]={"一致,请重新操作"};unsigned char code text26[]={" 密码更新成功"};另外:void delay(uint tt){ uchar i;while(tt--){for(i=0;i<125;i++);}}void initialize51(){SCON= 0x50; //串口方式1 //REN=1; 允许接收PCON=0x80; //SMOD=1TMOD= 0x20; //定时器1定时方式2TH1= 0xff; //11.0592MHz 模块默认波特率为57600bps TL1= 0xff;TR1= 1; //启动定时器}unsigned char Keycan(void) //按键扫描程序P1.0--P1.3为行线P1.4--P1.7为列线{unsigned char rcode, ccode;P1 = 0xF0; // 发全0行扫描码,列线输入if((P1&0xF0) != 0xF0) // 若有键按下{delay(1);// 延时去抖动if((P1&0xF0) != 0xF0){ rcode = 0xFE; // 逐行扫描初值while((rcode&0x10) != 0){P1 = rcode; // 输出行扫描码if((P1&0xF0) != 0xF0) // 本行有键按下{ccode = (P1&0xF0)|0x0F;//do{;}while((P1&0xF0) != 0xF0); //等待键释放return ((~rcode) + (~ccode)); // 返回键编码}elsercode = (rcode<<1)|0x01; // 行扫描码左移一位}}}return 0; // 无键按下,返回值为0}void KeyDeal(unsigned char Key){ //unsigned char n;if(Key!=0){switch(Key){case 0x11: K=1; break;case 0x21: K=2; break;case 0x41: K=3; break;case 0x81: break; //K=funguanliyuan;case 0x12: K=4; break;case 0x22: K=5; break;case 0x42: K=6; break;case 0x82: K=34;break; //K=funshanchu;case 0x14: K=7; break;case 0x24: K=8; break;case 0x44: K=9; break;case 0x84: break; //K=funtuichu;case 0x18: break; //K=shuazhiwencase 0x28: K=0; break;case 0x48: break;case 0x88: break; //K=funqueren;default: break;}}}//*************************************//12864//读12864忙void ReadBusy(void){unsigned char ch;cheak:Dbus=0xff;RS=0;RW=1;E1=1;ch=Dbus;E1=0;ch=ch|0x7f;if(ch!=0x7f)goto cheak;}//向LCD写命令void WriteCommand(uchar command){ReadBusy();RW=0;Dbus=command;E1=1;E1=0;}//向LCD写数据void WriteData(uchar Lcd_data){ReadBusy();RS=1;RW=0;Dbus=Lcd_data;E1=1;E1=0;}//清屏函数清DDRAMvoid Clrram (void){WriteCommand(0x01);}//LCD12864初始化程序void Lcd_int(){WriteCommand(0x30); //30---基本指令动作WriteCommand(0x0c); //开显示,关游标WriteCommand(0x01); //清屏,地址指针指向00HWriteCommand(0x02);}//LCD12864显示时间void playtime(){uchar i,n3,n4,y1,y2,r1,r2,s1,s2,f1,f2,m1,m2;WriteCommand(0x80); //指定第一行显示位置for(i=0;i<16;i++)WriteData(text13[i]); //显示LCD12864并行显示n3=a[6]>>4; n4=a[6]&0x0f;WriteCommand(0x90); //指定第二行显示位置WriteData(0x32);WriteData(0x30);WriteData(0x30+n3);WriteData(0x30+n4);for(i=0;i<2;i++) WriteData(nian[i]);y1=a[4]>>4; y2=a[4]&0x0f;WriteData(0x30+y1);WriteData(0x30+y2);for(i=0;i<2;i++) WriteData(yue[i]);r1=a[3]>>4; r2=a[3]&0x0f;WriteData(0x30+r1);WriteData(0x30+r2);for(i=0;i<2;i++)WriteData(ri[i]);WriteCommand(0x88); //指定第三行显示位置for(i=0;i<4;i++)WriteData(xinqi[i]);WriteData(a[5]+0x30);s1=a[2]>>4;s2=a[2]&0x0f; f1=a[1]>>4;f2=a[1]&0x0f; m1=a[0]>>4;m2=a[0]&0x0f;WriteCommand(0x98); //指定第四行显示位置WriteData(0x30+s1);WriteData(0x30+s2);WriteData(mao);WriteData(0x30+f1);WriteData(0x30+f2);WriteData(mao);WriteData(0x30+m1);WriteData(0x30+m2);}//*************************************//12864//*********************************//ds1302控制uchar r1302() //读数据ds1302{ uchar i;for(i=0;i<8;i++){B>>=1;B7 = IO;SCLK=1;SCLK=0;}return B;}void w1302(uchar co) // 写ds1302 单字节{uchar i;B = co;for(i=0;i<8;i++){IO = B0; //原来是使用ACC寄存器,但不行,后改使用B寄存器后才正常运行???SCLK=1;SCLK=0;B>>=1;}}void w(uchar a, uchar d) //寻址,写数{RST = 0;SCLK = 0;RST = 1;w1302(a);w1302(d);SCLK = 1;RST = 0;}uchar r(uchar a) //寻址,读数{uchar r;RST = 0;SCLK = 0;RST = 1;w1302(a);r=r1302();SCLK = 1;RST = 0;return r;}void wclo(uchar *p) //写多字节ds1302 {uchar i;w(0x8e,0x00); //写允许RST=0;SCLK=0;RST=1;w1302(0xbe); //写多字节命令for(i=0;i<8;i++)w1302(*(p+i)); //写时钟数据w(0x00,0x50); //??? 启动定时器SCLK=1;RST=0;}void rclo(uchar *p) //读出多字节ds1302 {uchar i;RST=0;SCLK=0;RST=1;w1302(0xbf);for(i=0;i<7;i++)*(p+i) = r1302(); //读出时钟数据SCLK=1;RST=0;}//***************************************//void SFG_getimage() //录入指纹图像{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;TI=0;summaf=0x05;SBUF=summaf;while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_genchar(uchar bufferID) //生成特征并存于charbuffer1/2 调用后单片机波特率变化@@@ {uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X04;while(TI==0);TI=0;SBUF=0X02;while(TI==0);TI=0;SBUF=bufferID;while(TI==0);TI=0;summaf=0x07+bufferID; sum[0]=summaf;sum[1]=summaf>>8; SBUF=sum[1];while(TI==0)TI=0;SBUF=sum[0];while(TI==0)TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF; while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_regmodel() //合并生成模板{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X05;while(TI==0);TI=0;SBUF=0X00;while(TI==0);summaf=0x09;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_storechar(uint pageID) //储存模板ID=1010也储存成功ID>=1011 querenma=0x18?@@@{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X06;while(TI==0);TI=0;SBUF=0X06;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;ID1=pageID;ID2=pageID>>8; SBUF=ID2;while(TI==0);TI=0;SBUF=ID1;while(TI==0);TI=0;summaf=0x0e+ID1+ID2; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_empty() //清空指纹库{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X0d;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x11;SBUF=summaf;while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_fastsearch(uchar bufferID) //搜索指纹返回指纹ID号sum、pagenum>255都会使程序卡@@@ {uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X08;while(TI==0);TI=0;SBUF=0X1b;while(TI==0);TI=0;SBUF=bufferID;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=180;while(TI==0);TI=0;summaf=9+0x1b+bufferID+180; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF; //接收到的ID号while(RI==0);RI=0;while(RI==0);RI=0;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void SFG_enroll() //自动注册模板返回存储ID =录图像+合并生成模板+储存模板{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X10;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x14;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void SFG_deletchar(uint pageID) //删除指纹校验和在2字节的页码处应分高低字节相加{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);SBUF=0X00;while(TI==0);TI=0;SBUF=0X07;while(TI==0);TI=0;SBUF=0X0c;while(TI==0);TI=0;ID1=pageID;ID2=pageID>>8; SBUF=ID2;while(TI==0);TI=0;SBUF=ID1;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=1;while(TI==0);TI=0;summaf=0x15+ID1+ID2; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_writereg(uchar N) //设置波特率{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X05;while(TI==0);TI=0;SBUF=0X0e;while(TI==0);TI=0;SBUF=4;while(TI==0);TI=0;SBUF=N;while(TI==0);TI=0;summaf=0x1a;sum[0]=summaf;sum[1]=0;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_identify() //自动验证指纹录图像+生成特征+搜索{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X11;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x15;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF;while(RI==0);RI=0;while(RI==0);RI=0; //得分while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void shuazhiwen(){uchar i,IDs1,IDs2,IDs3;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text1[i]); //显示LCD12864并行显示请按指纹//SFG_getimage();//SFG_genchar(1);//SFG_fastsearch(1);SFG_identify();while(querenma==2)SFG_identify();if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text18[i]); //显示LCD12864并行显示指纹通过门已开IDs1=PageID/100;IDs2=PageID/10%10;IDs3=PageID%10;WriteCommand(0x88); //指定第三行显示位置for(i=0;i<10;i++)WriteData(text17[i]); //显示LCD12864并行显示编号为:WriteData(0x30+IDs1);WriteData(0x30+IDs2);WriteData(0x30+IDs3);jidianqi=0; //开门}else if(querenma==9){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text12[i]); //显示LCD12864并行显示没搜索到指纹}else{Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text16[i]); //显示LCD12864并行显示接收包出错}WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}void addfinger(){uchar i,IDa1,IDa2,IDa3;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text1[i]); //显示LCD12864并行显示请按指纹SFG_getimage();while(querenma!=0)SFG_getimage();SFG_genchar(buffer1ID);initialize51();SFG_fastsearch(buffer1ID);while(querenma==1)SFG_fastsearch(buffer1ID);if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text19[i]); //显示LCD12864并行显示该指纹已存储WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}else if(querenma==9){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text2[i]); //显示LCD12864并行显示请再次按指纹SFG_enroll();while(querenma==2)SFG_enroll();Clrram();if(querenma==0){IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text3[i]); //显示LCD12864并行显示指纹采集成功WriteCommand(0x88); //指定第三行显示位置for(i=0;i<10;i++)WriteData(text17[i]); //显示LCD12864并行显示编号为:pgaeID WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);}else if(querenma!=0){WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text5[i]); //显示LCD12864并行显示指纹采集失败WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text14[i]); //显示LCD12864并行显示请重新采集}WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Clrram();}void deletfinger(){uchar i,j=0;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text6[i]); //显示LCD12864并行显示请输入删去的指纹号for(i=0;i<5;i++)dz[i]=0; //不输入时会默认为000 @@@Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30); //按键有抖动@@@if(Key==0)K=10;if((K>=0)&&(K<=9)){dz[j]=K;if(j<3){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x30+dz[j]);}++j;if(j==4)j=3; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}if(j>=2)PageID=dz[2]+dz[1]*10+dz[0]*100;if(j==1)PageID=dz[1]+dz[0]*10;if(j==0)PageID=dz[0];SFG_deletchar(PageID);if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置显示删除成功for(i=0;i<16;i++)WriteData(text7[i]); //显示LCD12864并行显示}else{Clrram();WriteCommand(0x90); //指定第二行显示位置显示删除失败for(i=0;i<16;i++)WriteData(text15[i]); //显示LCD12864并行显示}WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);Clrram();}void gaimima(){uchar i,j,mima1[6],mima2[6];Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text20[i]); //显示LCD12864并行显示请输入密码for(i=0;i<6;i++)mima1[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima1[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang } //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();Clrram();j=0;WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text23[i]); //显示LCD12864并行显示请再次输入密码for(i=0;i<6;i++)mima2[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima2[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3 ])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5])){for(i=0;i<6;i++)mimaID[i]=mima1[i];WriteCommand(0x80); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text26[i]); //显示LCD12864并行显示密码更新成功WriteCommand(0x88); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}else{WriteCommand(0x80); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text24[i]); //显示LCD12864并行显示两次输入的密码不WriteCommand(0x90); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text25[i]); //显示LCD12864并行显示一致,请重新操作WriteCommand(0x88); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Clrram();}void guanliyuan(){ uchar i,j;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text20[i]); //显示LCD12864并行显示请输入密码for(i=0;i<6;i++)mima[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();if((mima[0]==mimaID[0])&&(mima[1]==mimaID[1])&&(mima[2]==mimaID[2])&&(mima[3]==mimaID[3])&& (mima[4]==mimaID[4])&&(mima[5]==mimaID[5])){while(Keycan()!=tuichu){WriteCommand(0x90); //指定第二行显示位置按键1:增加指纹for(i=0;i<16;i++)WriteData(text8[i]); //显示LCD12864并行显示WriteCommand(0x88); //指定第三行显示位置按键2:删除指纹for(i=0;i<16;i++)WriteData(text9[i]); //显示LCD12864并行显示WriteCommand(0x98); //指定第三行显示位置按键3:改密码for(i=0;i<16;i++)WriteData(text22[i]); //显示LCD12864并行显示KeyDeal(Keycan());switch(K){case 1: addfinger();K=6; break;case 2: deletfinger(); break;case 3: gaimima(); break;default: break;}}}else{WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text21[i]); //显示LCD12864并行显示密码错误WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Key=0;}void main(){initialize51();LEDK=0;Lcd_int();Clrram();wclo(ta);delay(100);//SFG_empty();///@@@@//SFG_deletchar(255);//SFG_storechar(1011);//SFG_fastsearch(1);// WriteCommand(0x90); //指定第二行显示位置// WriteData(0x30+((0xf0&querenma)>>4));WriteData(0x30+(0x0f&querenma));while(1){Key=Keycan();if(Key==0x18) //指纹刷机{Clrram();shuazhiwen();Clrram();}if(Key==0x81) //管理员操作{Clrram();guanliyuan();Clrram();}rclo(a); playtime(); delay(100); jidianqi=1; }}。
HID L Scan Essentials软件开发包(SDK)说明书

-D ATA S H E E TB E N E F I T S:•One SDK for all HID tenprint, dual finger and palm print scanners •Comprehensive toolbox for software integration tests •Configurable parameters for individual design/workflows of customer application •Flexible upgrades with optional software features •Easy to integrate API•Compatible with HID BioCore MiddlewareHID L Scan Essentials Software Development Kit (SDK) provides Microsoft Windows and Linux compatible components that allow application developers ready access to biometric functions provided by HID tenprint, dual finger and palm print scanners.The SDK offers easy access to fingerprint and palm print devices from HID through the Application Programming Interface (API). These tools are provided for use by system administrators or service technicians.L Scan Essentials SDK provides tools to perform tests of scanner functions as well as sophisticated features that guarantee the highest quality capture. Experienced livescan system integrators can create their own applications for tenprint, dual and palm print scanners.Several sample applications, including source code, help developersunderstand the processes as well as guide them through software development scenarios.Comprehensive documentation covers all aspects of developing the device control and setting up the configuration, as well as using the tools. Examples include:• SDK usage• API interface functions • API return codes • Sequence diagrams • Configuration files • Logging functionalities • Sample applications • Revision history • Known issues •Supported devicesHID ®L Scan ™EssentialsFingerprint and Palm Print Capture SDKNorthAmerica:+15127769000|TollFree:180****7769Europe, Middle East, Africa: +44 1440 714 850Asia Pacific: +852 3160 9800 | Latin America: +52 (55) 9171-1108For more global phone numbers click here© 2022 HID Global Corporation/ASSA ABLOY AB. All rights reserved.Part of ASSA ABLOYHID L Scan Essentials SDKProduct Name L Scan Essentials SDKAuto CaptureAutomatically captures fingerprints (flat and rolled) and palm prints and provides quality assessment and feedbackPerfect Image• Generates crystal clear fingerprint and palm print images while eliminating condensation and dirt without modifying the fingerprint image• Works independently of number of fingers, image size/resolution and silicone membrane Perfect Roll• Ensures that only high quality rolled fingerprint images are accepted• Built-in real-time quality check for slanting fingers, lifting of fingertips, vertical shifting • Provides user guidance to avoid mistakes during capture • Takes rolled fingerprints at varying speed•Configurable quality thresholds for the Auto Capture functionFlexFlat• Enables to capture flat fingers anywhere on the image capture area • Applicable for single, dual or four fingers• Supported by Patrol, Guardian 100, Guardian 200, Guardian 45 , L Scan 500 and L Scan 1000FlexRoll• Enables to capture roll fingers on the entire width of the image capture area • Works independent of roll direction and roll capture modePresentation AttackDetection• Provides spoof detection functionality to existing HID fingerprint scanners• Configurable FAR/FRR according to application by provided DET curves for each scanner SYSTEM REQUIREMENTSOperating Systems Windows 10, Windows 11, Linux® Ubuntu® and RHEL SOFTWARE COMPONENTSTest and software updatingtools Test Wizard to retrieve and analyze all status information from PC, device and software; Firmware updater; Software license updater; TTrace application for troubleshooting analysis DOCUMENTATION AND SAMPLE APPLICATIONSComplete description of all API functions and return codes; Sequence diagrams; Configuration files; Sample applications including C++ source code & Visual Studio project files; Test clients for testing API functions and workflows; Revision history SUPPORTED DEVICES HID L Scan 500 and 1000HID Guardian™ 45, 100, 200, Module HID Patrol2023-07-27-eat-l-scan-essentials-ds-en PLT-04436Data subject to change without notice.。
中控BS开发包

一、设备与服务器通信设备与服务器之间的通信以HTTP协议进行,设备GET或POST数据到服务器,服务器则返回结果。
除了发送特定文件内容以外,所有数据以纯文本的方式传送,多项内容之间以\n 分成多行。
二、设备读取服务器上的配置信息设备在开始与服务器进行数据通信前,需要读取服务器上的配置信息,然后根据服务器的要求进行通信。
三、上传数据1、上传考勤记录上传设备内产生的考勤记录2、上传用户信息和系统日志上传设备内的人员信息及一些操作日志3、上传登记指纹图片如果配置了上传登记指纹图片,设备在登记用户的指纹时,将把指纹图片上传到服务器上。
如果设备配置了摄像头,支持采集现场图片,并且配置了上传现场图片功能,那么设备在进行用户验证时,将采集现场图片并上传到服务器上。
四、服务器下发命令服务器下发命令并不会立即传送到设备,而是先把要向设备下发的命令缓存起来。
根据配置,设备每隔一段时间(通常是30秒)会向服务器发送如下请求,查询服务器是否有给自己的命令。
服务器到设备的命令1.执行系统命令执行linux系统本身的一些命令2.检查数据更新要求设备从服务器读取设备的配置信息,然后检查设备内数据的更新情况,若有新的数据,立即传送到服务器;3.清除数据:清除考勤记录,清除全部数据,清除现场采集照片数据4.发送机器的信息到服务器上传送机器内的配置信息,包括人员数,指纹数,设备型号,固件版本号等5.设置机器内部配置文件的选项设置机器内部相关信息,包括IP地址,音量,端口等;6.重新启动7.数据命令:新增或修改用户信息,新增或修改用户指纹,删除指定用户及其指纹删除用户指纹8.重新载入系统选项要求设备重新载入系统配置和选项,这样修改后的系统选项才能生效9.登记用户指纹启动指纹登记过程,有的机型不能使用此功能10.检查并传送新数据要求设备立即检查是否有新的数据,并立即把新数据传送到服务器上。
11.输出打开门锁信号要求门禁设备输出门锁打开信号12.取消报警信号输出要求门禁设备取消报警信号输出13.取设备内文件要求设备发送系统文件FilePath到服务器,FilePath指明设备内文件的具体路径。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回: 0: -1:
设备号(0-4) LED 组合(红-Bit0/绿-Bit1/蓝-Bit2)
打开成功 操作失败
8. 关闭 LED 提示 long WINAPI D5CloseLED (unsigned short uDeviceID, unsigned short uLEDS);
说明: 设置系统 KEY
参数 uDeviceID: pMark:
返回: 0: -1:
设备号(0-4) 系统标记 KEY(8 字节)
设置成功 操作失败
5. 验证系统 KEY long WINAPI D5CheckMark (unsigned short wDevID, unsigned char *pMark);
unsigned char *pImage);
说明: 读取图像
参数 wDeviceID pImage
灰度 返回: 0: -1:
设备号(0-4) 图像数据 宽度 152, 高度 200, 数据按行顺序排列, 每个像素用1 字节表示
读取成功 操作失败
12. 检测所采集图像是否合格 bool WINAPI D5CheckFP (unsigned char *pImage);
说明:
设备蜂鸣提示声音
参数
uDeviceID:
设备号(0-4)
uMS:
蜂鸣时间(毫秒为单位)
返回:
0:
蜂鸣成功
-1:
操作失败
7. 设置 LED 提示 long WINAPI D5OpenLED (unsigned short uDeviceID, unsigned short uLEDS);
说明: 打开 LED
uRotate
旋转角度(1-180)
uLevel:
匹配等级(0-9)
输出
无
返回:
-1:
匹配不成功
-2:
系统错误
其它:
匹配成功的指纹库内指纹下标
说明:
对输入的指纹图像数据提取特征值
参数
pImage
输入的指纹图像数据
宽度 152, 高度 200, 数据按行顺序排列, 每个像素用1 字节表示
灰度
pFeature
生成的指纹特征值
返回: 0: -1: -2:
256 非符号字节的数组
提取成功 提取失败 系统错误
14. 指纹库 1:1 比对 long WINAPI D5Match (unsigned char *pFeature1,
说明: 检验系统标记
参数 uDeviceID: pMark:
返回: 0: 1: -1:
设备号(0-4) 系统标记 KEY(8 字节)
检验匹配 检验不匹配 操作失败
6. 设置蜂鸣器提示 long WINAPI D5Beep (unsigned short uDeviceID, unsigned short uMS);
返回:
0:打开设备 long WINAPI D5OpenDevice (unsigned short uDeviceID);
说明:
打开设备(注:某设备如果已被打开,则需先关闭才能再打开)
参数
uDeviceID:
设备号(0-4)
返回:
0:
打开成功
-1:
操作失败
提示:
0x01 0x02 0x04
(红灯) (绿灯) (蓝灯)
1. 枚举设备 unsigned short WINAPI D5EnumDevice (char pDeviceName[DEV_MAX_NUM][128]);
说明:
检测当前 PC 已连接设备(每台电脑最多接 5 台)
参数
pDeviceName: 已连接设备名称
unsigned char *pFeature2, unsigned short uRotate = 60, unsigned short uLevel = 5);
说明:
对输入的两个指纹特征值进行比对
参数
pFeature1:
指纹特征值 1
pFeature2:
指纹特征值 2
uRotate:
旋转角度(1-180)
说明:
将图像数据存储为位图
参数
strFileName: 位图文件名
pImage:
图像数据
宽度 152, 高度 200, 数据按行顺序排列, 每个像素用1 字节表示
灰度 返回: 0: -1:
存储成功 文件无法打开
11. 从设备读取图像 long WINAPI D5GetImage (unsigned short wDeviceID,
3. 关闭设备 long WINAPI D5CloseDevice (unsigned short uDeviceID);
说明: 关闭设备
参数 uDeviceID:
设备号(0-4)
返回: 0: -1:
关闭成功 操作失败
4.设置系统 KEY long WINAPI D5SetMark (unsigned short uDeviceID, unsigned char *pMark);
说明:
检测某图像是否有指纹
参数
pImage
图像数据
宽度 152, 高度 200, 数据按行顺序排列, 每个像素用1 字节表示
灰度
返回:
1:
检测到指纹
0:
无指纹
13. 从图像提取特征值 long WINAPI D5Process (unsigned char *pImage,
unsigned char *pFeature);
说明: 关闭 LED
参数 uDeviceID: uLEDS:
返回: 0: -1:
设备号(0-4) LED 组合(红-Bit0/绿-Bit1/蓝-Bit2)
关闭成功 操作失败
9. 位图转图像数据 long WINAPI D5LoadBMPFile (char *strFileName, unsigned char *pImage);
说明:
从位图中载入图像数据
参数
strFileName: 位图文件名
pImage:
图像数据
宽度 152, 高度 200, 数据按行顺序排列, 每个像素用1 字节表示
灰度
返回:
0:
载入成功
-1:
文件无法打开或格式不对
10.图像数据转位图 long WINAPI D5SaveBMPFile (char *strFileName, unsigned char *pImage);
uLevel:
匹配等级(0-9)
返回:
0:
匹配成功
-1:
匹配失败
-2:
系统错误
15. 指纹库 1:N 比对
long WINAPI D5MatchN (unsigned char *pFeatureIn,
unsigned char pFeatureLib[][256],
unsigned long lFingernum,
指纹识别仪 SDK 开发包及函数说明
适用于:TFS-S64 、TFS-S74、TFS-S75 等指纹识别仪
#ifndef _D5_SCANNER_H_ #define _D5_SCANNER_H_
#define DEV_MAX_NUM
5
#define LED_R #define LED_G #define LED_B
unsigned short uRotate = 60,
unsigned short uLevel = 5);
说明:
对输入的指纹特征值与指纹库内特征值进行快速 1:N 比对
输入
pFeatureIn: 需比对的特征值
pFeatureLib: 指纹特征值库数组
lFingernum: 指纹库指纹数,数目不限