简介
AI双目视觉识别传感器采用Al主芯片,搭载两个200万像素的高清摄像头。摄像头分别采用彩色和红外摄像头,在黑暗环境下也可以正常识别。模块使用LINUX 快启操作系统,实现快速启动。本地内嵌人脸双目3D活体检测算法、基于大数据训练的深度神经网络识别算法、二维码识别算法、掌纹掌静脉算法,实现了人脸、二维码、静脉掌纹识别功能,并通过UART输出识别结果,同时可通过USB传输彩色摄像头UVC视频(可扩展为UAC音视频功能),用于本地音视频显示播放或远程视频音频传输功能。
AI双目视觉识别传感器启动速度快,同时支持断电低功耗和常供电双模式。在常供电模式下,将模组设置为低功耗自动探测模式时,可实现人脸、静脉掌纹及二维码的自动探测识别,方便第三方产品的对接,实现多种身份认证功能。
提供UART协议,支持第三方集成对接,实现身份识别功能的音视频传输对接。AI双目视觉识别传感器对第三方设备没有算力要求,即插即用,通用性强,对各种需要人脸、二维码、静脉掌纹等多种身份认证的新老产品都可以做进行升级。
特性
- 支持双目3D活体检测,防止照片、视频等伪造人脸攻击
- 支持神经网络深度学习人脸识别算法、静脉掌纹算法、二维码算法
- 本地1000人脸+1000掌纹掌静脉
- 支持完全黑暗和室外非阳光直射下识别
- 对第三方设备无算力要求,无需增加算法SDK,Al视觉算法模组本地离线识别
应用场景
- 智能家居
- 智能门锁
- 自助零售支付终端
- 3D人脸掌纹支付系统
- 静脉掌纹识别系统
技术规格
- 硬件参数
- SOC:CPU:Arm900M,NPU:0.5T,RISCV:600M
- DDR2:64MB
- Flash:32MB
- 摄像头:2个,1/5”COMS,200万像素,双MIPI接口
- LENS:FOV:对角83°,理想焦距:60cm
- LED:IR:850波长,RGB:650波长,90°
- USB接口:支持USB传输视频(UVC)功能可扩展支持音视频(UAC)功能,支持MJPG (可扩展支持H.264、YUY2)编码图像输出
- 通信方式:UART
- 波特率:115200
- 电源参数
- 供电电压:5-12V
- 工作电流:320~330mA@8V
- 待机电流:120-130mA(自动检测模式时)
- 关断电流:0uA(非自动检测模式时,不使用识别时断电)
- 其它参数
- 工作温度:-20°C~60°C
- 存储温度:-30°C~70°C
- 相对湿度:10%~93%(不凝结)
- 喇叭/麦克风:可扩展支持
- 启动时间:900ms~2.5s(用户存储数量不同,启动速度不同)
- 用户数量:人脸1-1000,掌纹1001-2000
- 支持算法:双目活体检测算法,深度学习人脸识别算法,静脉掌纹算法,二维码识别算法
- 人脸活体检测错误接受率(LDAFAR):≤1%
- 人脸活体检测错误拒绝率(LPFRR):≤1%
- 人脸通过识别率:98.85%
- 人脸误识率:0.001%
- 人脸识别角度:左右上下约20度,同时支持多角度人脸录入,扩大识别范围
- 识别距离:人脸30-120cm,静脉掌纹15cm,二维码15cm
- 尺寸:57.8x20x10.12mm
功能示意图

1.主板
算法主板采用了AI主芯片,采用了linux 快启操作系统,移植了人脸识别、掌纹常静脉、二维码算法,并开发了运用固件,主要实现注册与识别、并输出识别结果的功能。
2.双摄像头
包括了彩色和红外摄像头,采用200万像素的CMOS芯片搭配850镜头和650镜头组成。
3.红外灯&白光灯
(白光灯可以选用,不使用白光灯时,黑暗下显示黑白图像)红外灯的作用是给红外摄像头进行实时补光,白光灯的作用是环境不够亮时,自动启动进行补光,以保障红外和彩色图像的清晰。
4.泡棉
用于隔离补光灯与COMS,以防光线进入COMS,导致图像炫光。
5.内置算法
1)人脸双目活体检测算法
2)深度学习人脸识别算法
3)二维码识别算法
引脚示意图

UART接口
引脚 | 颜色线序 | 功能描述 |
---|---|---|
1 | 黑线 | GND |
2 | 黄线 | UART_RX |
3 | 绿线 | UART_TX |
4 | 红线 | VCC 5~12V |
USB接口
可输出视频信号,用于屏幕显示,支持标准UVC视频, MJPEG/YUY2/H.264 编码,有横屏和竖屏多种分辨率可选。可扩展实现UAC音频功能,可以实现语音对讲功能。
引脚 | 功能描述 |
---|---|
1 | VCC 5V |
2 | 悬空 |
3 | DM USB数据线D- |
4 | DP USB数据线D+ |
5 | GND |
咪头接口(预留)
主要用于接收声音信号,实现对讲功能
引脚 | 名称 | 功能描述 |
---|---|---|
1 | 负极 | MIC- |
2 | 正极 | MIC+ |
喇叭接口(预留)
主要用于语音播放
引脚 | 名称 | 功能描述 |
---|---|---|
1 | SPK | 1W/8Ω |
2 | SPK | 1W/8Ω |
模块尺寸图

安装高度和倾斜角度
根据产品安装高度的不同,建议使用外部支架调节产品的倾斜角度,以适合不同身高的用户友好识别。各种安装高度下,推荐倾斜角度和识别身高覆盖范围如下表所示:
安装高度 | 推荐倾斜角度 | 识别距离 | 人身高覆盖范围 |
---|---|---|---|
130cm | 20° | 30~100cm | 130~200cm |
140cm | 12° | 30~100cm | 130~200cm |
150cm | 0° | 30~100cm | 130~200cm |

接入Arduino使用教程
硬件准备
- Arduino UNO R3开发板 x1
- Arduino UNO IO 传感器扩展板 x1
- AI双目视觉识别传感器(人脸&静脉掌纹&二维码) x1
- 1.25mm转2.54杜邦连接线 x1
- USB数据线 x1


软件准备
- 下载Arduino IDE: 点击下载Arduino IDE
- 下载DFRobot_AI10库
硬件连接
PC USB接口功率较低,建议使用5V USB适配器供电,识别效果更好。

注册人脸&掌纹演示代码
注册人脸或者掌纹时,需要将AI视觉传感器固定,并注意识别距离,人脸30-120cm,静脉掌纹15cm,二维码15cm,每次只注册一个人脸或掌纹,如果需要注册多个,可按UNO R3开发板复位键再次注册其他人脸或掌纹。
/*!
* @file SingleRegisteredUser.ino
* @brief This is an example of using the DFRobot_AI10 library to enroll a single registered user.
* @copyright Copyright (c) 2025 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author [jiali](zhixinliu@dfrobot.com)
* @version V1.0
* @date 2025-07-14
* @url https://github.com/DFRobot/DFRobot_AI10
*/
#include "DFRobot_AI10.h"
/* ---------------------------------------------------------------------------------------------------------------------
* board | MCU | Leonardo/Mega2560/M0 | UNO | ESP8266 | ESP32 | microbit | m0 |
* VCC | 3.3V/5V | VCC | VCC | VCC | VCC | X | vcc |
* GND | GND | GND | GND | GND | GND | X | gnd |
* RX | TX | Serial1 TX1 | 5 | 5/D6 | 26/D3 | X | tx1 |
* TX | RX | Serial1 RX1 | 4 | 4/D7 | 25/D2 | X | rx1 |
* ----------------------------------------------------------------------------------------------------------------------*/
/* Baud rate cannot be changed , it is 115200 */
#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
SoftwareSerial mySerial(4, 5);
DFRobot_AI10_UART recognize(&mySerial ,115200);
#elif defined(ESP32)
DFRobot_AI10_UART recognize(&Serial1,/*rxD2*/25,/*txD3*/26);
#else
DFRobot_AI10_UART recognize(&Serial1 ,115200);
#endif
void setup() {
Serial.begin(115200);
while (!Serial);
while(!recognize.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("Device connected!");
Serial.println("Start to enroll a user...");
//User enroll result anc info
sUserData_t udata;
/*
*admin permission is required to register a user. eNormal:average person ,eAdmin: administrator
*userName registered user name, the length is 32 bytes at most
*timeout is the time to wait for the recognition result, the range is 3-20 seconds
*/
udata = recognize.enrollUser(/*admin*/eNormal,/*userName*/"User1",/*timeout*/ 5);
//Check if the registration is successful, if successful, print the user information
if(udata.result == eSuccess){
Serial.println("User enrolled successfully!");
Serial.print("UID: ");
Serial.println(udata.UID);
Serial.print("User name: ");
Serial.println(udata.userName);
Serial.print("Admin permission: ");
Serial.println(udata.admin == eNormal ? "Normal":"Admin");
Serial.print("User enrolled type: ");
Serial.println(udata.type == eFace ? "Face":"Palm");
}else if (udata.result == eFailedFaceEnrolled){
Serial.println("Failed to enroll user, user already enrolled!");
}else{
Serial.println("Failed to enroll user!");
}
}
void loop() {
delay(100);
}
结果
通过UNO R3开发板复位按键进行注册,每复位一次可注册一次人脸或掌纹,每次注册时间5S,ID 1-1000为人脸,1001-2000为静脉掌纹。

连续识别人脸&掌纹&二维码演示代码
持续识别人脸&掌纹&二维码,并通过串口监视器打印相应信息,识别不到时,可以小幅度调整距离或姿势,并保持不动。
/*!
* @file continuousRecognition.ino
* @brief This is an example of using the DFRobot_AI10 library to recognize human faces and QR codes in real-time.
* @copyright Copyright (c) 2025 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author [jiali](zhixinliu@dfrobot.com)
* @version V1.0
* @date 2025-07-14
* @url https://github.com/DFRobot/DFRobot_AI10
*/
#include "DFRobot_AI10.h"
/* ---------------------------------------------------------------------------------------------------------------------
* board | MCU | Leonardo/Mega2560/M0 | UNO | ESP8266 | ESP32 | microbit | m0 |
* VCC | 3.3V/5V | VCC | VCC | VCC | VCC | X | vcc |
* GND | GND | GND | GND | GND | GND | X | gnd |
* RX | TX | Serial1 TX1 | 5 | 5/D6 | 26/D3 | X | tx1 |
* TX | RX | Serial1 RX1 | 4 | 4/D7 | 25/D2 | X | rx1 |
* ----------------------------------------------------------------------------------------------------------------------*/
/* Baud rate cannot be changed , it is 115200 */
#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
SoftwareSerial mySerial(4, 5);
DFRobot_AI10_UART recognize(&mySerial ,115200);
#elif defined(ESP32)
DFRobot_AI10_UART recognize(&Serial1,/*rxD2*/25,/*txD3*/26);
#else
DFRobot_AI10_UART recognize(&Serial1 ,115200);
#endif
void setup() {
Serial.begin(115200);
while (!Serial);
while(!recognize.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("Device connected!");
//Enable face frame
if(recognize.enableFaceFrame()){
Serial.println("Face frame enabled!");
}
}
void loop() {
//Continuous recognition result
sRecognitionData_t recDat;
/* When a human face is detected, the system automatically starts the recognition process.After the person moves away for
x seconds, the recognition stops and the module continues with low-power face detection.the range is 3-20s.
*/
recDat = recognize.startContinuousFaceRecognition(/*timeout*/5);
//Print the recognition result
if(recDat.result == eSuccess){
Serial.println("Recognition successful!");
Serial.print("Recognition type: ");
if(recDat.type == eQR){
Serial.println("QR code");
Serial.print("QR code data: ");
Serial.println(recDat.QRDdata);
}else{
Serial.println(recDat.type == eFace ? "Face" : "Palm");
Serial.print("User ID: ");
Serial.println(recDat.userData.UID);
Serial.print("User Name: ");
Serial.println(recDat.userData.userName);
Serial.print("Admin Permission: ");
Serial.println(recDat.userData.admin == eAdmin ? "Admin" : "Normal");
}
}else{
Serial.println("Recognize...");
}
}
结果
持续识别检测到的人脸&掌纹&二维码,串口打印相应信息。

用户数量统计&用户删除演示代码
输入指令:AT+GETUSERS,查询所有用户数量和ID
输入指令:AT+DELUSER=1,删除指定用户ID1,1可替换为其它用户ID
输入指令:AT+DELALLUSERS,删除所有已注册的用户
/*!
* @file operateUserData.ino
* @brief This is an example of how to use the DFRobot_AI10 library to operate user data
* @copyright Copyright (c) 2025 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author [jiali](zhixinliu@dfrobot.com)
* @version V1.0
* @date 2025-07-14
* @url https://github.com/DFRobot/DFRobot_AI10
*/
#include "DFRobot_AI10.h"
/* ---------------------------------------------------------------------------------------------------------------------
* board | MCU | Leonardo/Mega2560/M0 | UNO | ESP8266 | ESP32 | microbit | m0 |
* VCC | 3.3V/5V | VCC | VCC | VCC | VCC | X | vcc |
* GND | GND | GND | GND | GND | GND | X | gnd |
* RX | TX | Serial1 TX1 | 5 | 5/D6 | 26/D3 | X | tx1 |
* TX | RX | Serial1 RX1 | 4 | 4/D7 | 25/D2 | X | rx1 |
* ----------------------------------------------------------------------------------------------------------------------*/
/* Baud rate cannot be changed , it is 115200 */
#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
SoftwareSerial mySerial(4, 5);
DFRobot_AI10_UART recognize(&mySerial ,115200);
#elif defined(ESP32)
DFRobot_AI10_UART recognize(&Serial1,/*rxD2*/25,/*txD3*/26);
#else
DFRobot_AI10_UART recognize(&Serial1 ,115200);
#endif
void setup() {
Serial.begin(115200);
while (!Serial);
while(!recognize.begin()){
Serial.println("NO Deivces !");
delay(1000);
}
Serial.println("Device connected!");
Serial.println("AI10 An example of AT command control");
Serial.println("-----------------------------");
Serial.println("Available commands:");
Serial.println("AT+GETUSERS # Get all user information");
Serial.println("AT+DELUSER=ID # Delete the specified user (e.g. AT+DELUSER=0x1001)");
Serial.println("AT+DELALLUSERS # Delete all users");
Serial.println("-----------------------------");
Serial.println("Note: When sending, end with \'\\n\'. Please pay attention to line breaks!");
Serial.println("-----------------------------");
}
void loop() {
sAllUserID_t alluser;
int i;
if (Serial.available()) {
// Read the command from the serial port
String command = Serial.readStringUntil('\n');
command.trim();
if (command.startsWith("AT+GETUSERS")){
/* Get all user information*/
alluser = recognize.getAllUserIDs();
if(alluser.result == eSuccess){
Serial.print("User number:");
Serial.println(alluser.userNum);
if(alluser.userNum != 0){
Serial.print("User IDs:");
for(i=0;i<alluser.userNum;i++){
Serial.print(alluser.UIDS[i]);
Serial.print(" ");
}
Serial.println();
}
}
Serial.println("OK");
} else if (command.startsWith("AT+DELUSER=")) {
uint16_t ID = command.substring(11).toInt();
/* Delete the user with the specified ID*/
if(recognize.deleteUser(ID)){
Serial.println("successfully deleted!");
}
Serial.println("OK");
} else if (command.endsWith("AT+DELALLUSERS")) {
/* Delete all users */
if(recognize.deleteAllUser()){
Serial.println("successfully deleted!");
}
Serial.println("OK");
} else {
Serial.println("The command is incorrect!");
}
}
}
结果
输入对应指令进行查询用户数量、删除用户等操作。

盖板推荐与安装方式
AI视觉算法模组装配到产品内部,需要有盖板贴在Al视觉算法模组上方,以防水防尘防破坏等作用。
1.盖板与模组正贴安装
AI视觉算法模组的镜头顶部与LED灯珠顶部保持基本同一水平面,在安装AI视觉算法模组时,建议AI视觉算法模组上的镜头与盖板尽量靠近但不接触,间隙≤1mm。
镜头与盖板的接触面采用遮光泡棉(厚度:2~3mm)进行遮光(泡棉出厂已标配),遮光泡棉紧贴盖板。遮光泡棉的挖孔在摄像头的可视区域之外,避免导致可视区域被遮挡。盖板的开孔区也必须在摄像头的可视区域之外,避免导致摄像头可视区域被遮挡。
如果盖板与镜头间隙较大,则LED灯光会通过盖板反射进入摄像头,会导致图像过曝从而导致人像无法正常识别。

2.盖板视窗尺寸大小
制作盖板时,需要将摄像头的可视区域和LED灯的照射区域留出透明视窗,透明通光率达90%或以上。

根据摄像头与LED灯的可视角度区域,并考虑到开模的公差与安装公差,建议LED灯的水平开孔角度≥90°;摄像头的水平开孔角度≥60°,两者垂直的开孔角度≥78° (如下图)。推荐盖板距离灯板2.5mm,镜头开口直径6mm、LED灯孔直径6.3mm,即可满足不遮挡视野的需求。

3.盖板的选择
(1)盖板材质:钢化玻璃或亚克力
(2)盖板白光LED灯部分的视窗,建议做成长条形。如图所示,长条视窗背面可粘贴散光膜,或者在制作盖板时喷涂白色透光油墨。以防白光开启时造成的光线刺眼
(3)盖板红外灯和摄像头视窗透明处理,透明部分透光率:≥90% (850nm 波段)
(4)盖板厚度:0.55mm~1.5mm,建议1mm最佳
(5)盖板设计参考

外壳和支架的装配
算法Al视觉算法模组置于外壳或支架上时,应有定位,以免在打螺钉时发生窜动,致使摄像头中心偏离孔位,遮挡成像。
AI视觉算法模组两侧的通孔直径为2.2mm,优先选择M2螺钉。
安装完毕后,摄像头中心应与外壳或支架通孔中心对正,保证摄像头成像不被遮挡。算法AI视觉算法模组不能被其他结构碰触、挤压,以免短路或者损坏。

更多资料下载
常见问题
- 使用5V USB适配器供电,识别效果更好
- 摄像头两边的泡棉不可取下
- 芯片发热是正常现象