一、项目背景
近年来,公务员和事业单位编制等考试中作弊现象日益严重,作弊手段不断升级,给考试公平性带来严峻挑战。根据搜索结果,当前考试作弊主要呈现以下特点:
组织化、专业化作弊:作弊已从个体行为演变为组织化、专业化的黑色产业,形成"枪手"团队和完整的作弊产业链。犯罪团伙通过计算机合成兼具考生和"枪手"面部特征的照片,制作虚假身份证件和准考证,由"枪手"持假证件混入考场。
高科技作弊手段:包括使用无线耳机传答案、考前获取真题、篡改报名信息等。部分团伙甚至建立了"枪手人才库",根据考生性别、面部特征、报考岗位类别精准匹配替考者。
传统身份验证手段的不足:现有考场身份核验系统存在致命漏洞——静态照片识别缺陷、动态捕捉失效和人工核验形同虚设。测试显示,部分考场的人脸闸机对戴眼镜考生的识别错误率高达34%。
二、传统人脸识别系统的不足
当前考试场景中使用的人脸识别主要存在以下技术瓶颈:
识别准确性受多种因素影响:考生面部变化(熬夜、感冒、体重改变)影响识别;长相大众化的考生识别困难;光线条件、角度问题影响识别准确性。
实施层面的挑战:监考人员仅用肉眼扫视证件照与真人"轮廓相似"就放行;全国仍有68%的考场在使用单一人脸识别设备
三、方案意义
本方案采用行空板K10和二哈视觉传感器构建新一代考试防作弊人脸识别系统,具有以下社会价值:维护考试公平,保障人才选拔的公信力;打击考试作弊黑色产业链;推动国产自主可控AI技术在教育考试领域的应用。本系统通过技术创新解决了传统人脸识别在考试场景中的诸多不足,为考试组织部门提供了高效、可靠的身份验证和作弊行为检测解决方案。
四、系统架构设计
本系统采用边缘计算架构,由以下核心组件构成:
行空板K10:作为主控单元,负责系统调度、数据处理和实时显示检测结果。
二哈视觉传感器:用于采集考生人脸,作为AI视觉处理单元,负责人脸检测识别。
可视化大屏:用于显示考生检查结果,清晰的看到考生到场情况。
五、实现原理
通过二哈学习考生的人脸特征,建立考生人脸数据库。考生进入考场,正对摄像头,系统自动识别人脸,在K10屏幕上显示验证信息,同时可视化大屏显示考生检查结果。
软件:Mind+ V1.81 RC3.0
软硬件图示:

步骤1 外观结构
设计并制作

步骤2 二哈采集人脸数据
1.给HUSKYLENS 2供电,启动成功后,找到“人脸识别”功能。

2.对准要学习的某个人脸,人脸被白框框住后,调整HUSKYLENS 2“看”的角度,使屏幕中间的“十”字位于白色框内,然后按下HUSKYLENS 2右上角A键,学习该人脸。

3.学习完成后,如识别到已学习的人脸,屏幕将以彩色方框框出人脸,并在人脸上方显示人名、ID号及置信度,例如“人脸:ID1 97%”。其中人名默认为“人脸”,设置人名请看本功能“参数设置”;"ID1"即学习的第一个人的脸;“97%”是指置信度为97%。 在机器学习中,置信度指的是模型对自己预测结果的“确定程度”,比如这里人脸ID197%的意思是模型“认为当前画面中的已学习的ID1人脸的可能性是 97%”

4.给学习过的人脸设置名字,中英文均可。
设置步骤:点击“设置名字”,上下滑动左上角的数字,选择为哪个ID设置名字;点击屏幕上的键盘可设置名字,如左图;设置完毕需点击右下角√键保存,保存成功则右上角会显示绿色对勾标志。

控制识别到人脸时,是否显示名字,默认为显示。
设置步骤:点击“显示名字”,其上方开关为蓝色,即打开状态,识别到人脸时,会显示其名字,效果如左图;点击开关,开关颜色变为白色,即关闭状态,识别到人脸时,不会显示名字,效果如右图。

训练一下十个模型,用真人麻烦,就在网上找了几张照片来测试

步骤3 SIOT设置
软件下载
- Mind+1.8及以上版本:官网下载
- SIoT V2版本 : 网盘下载
下载链接:
腾讯微云下载(推荐):
链接: https://share.weiyun.com/6SFhgLQj
百度云盘下载:
链接:https://pan.baidu.com/s/17clVjJXWTZh02FteKy3mcA?pwd=mind
提取码:mind
谷歌云盘下载:
链接: 点击下载
3-启动SIoT V2,在电脑上运行SIoT
在Windows上运行时容易出现网络连接问题,不推荐,优点是不依赖其他硬件。
1.下载win版本的SIoT V2解压,双击start SIoT.bat即可启动新版SIoT,启动之后会弹出小黑窗启动服务器。
注意运行的是start SIoT.bat而不是main.exe

注意:启动时需要将SIoT添加到允许应用通过防火墙,勾选专用网络和公用网络,否则外部设备可能无法访问。
运行start SIoT.bat以后显示以下界面

2.在浏览器输入 本机IP:192.168.1.9:8080 即可打开网页端口,登录账号依然为siot,密码为dfrobot,打开后可以新建Topic。如下图

步骤4 可视化面板设置
打开Mind+,进行可视化面板设置,设置后的效果如下
设置时候,选择物联网平台设置如下:服务器地址要对应

步骤5 初始化Mind+设置
运行Mind+ V1.81 RC3.0,点击设置选择主控板行空板K10加载

选择网络服务,选择MQTT和Wi-Fi模块加载

选择用户库,输入二哈识图并搜索,添加二哈识图2

添加后加载

返回到主界面
步骤6 编写程序
在函数里面自定义模块如下:

准备代码如下:

显示效果:

成功代码如下:

显示效果:

失败代码如下:

显示效果:

人脸判断代码如下:

网络服务代码如下:

主程序代码如下:

完整程序如下:

/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include "arduino_image_cache.h"
#include "DFRobot_HuskylensV2.h"
// 函数声明
void DF_WangLuoFuWu();
void DF_RenLianPanDuan();
void DF_ChengGong();
void DF_ZhunBei();
void DF_ShiBai();
// 静态常量
const String topics[5] = {"","","","",""};
// 创建对象
DFRobot_Iot myIot;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
ASR asr;
HuskylensV2 huskylens;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.setAsrSpeed(3);
DF_ZhunBei();
DF_WangLuoFuWu();
Wire.begin();
while (!huskylens.begin(Wire)) {
delay(100);
}
huskylens.switchAlgorithm(ALGORITHM_FACE_RECOGNITION);
delay(5000);
}
void loop() {
huskylens.getResult(ALGORITHM_FACE_RECOGNITION);
if ((huskylens.available(ALGORITHM_FACE_RECOGNITION))) {
DF_RenLianPanDuan();
}
else {
DF_ZhunBei();
}
delay(2000);
}
// 自定义函数
void DF_WangLuoFuWu() {
myIot.wifiConnect("Hq123456", "Hq12345678");
while (!myIot.wifiStatus()) {}
myIot.init("192.168.1.9","siot","7786314711751141","dfrobot", topics, 1883);
myIot.connect();
while (!myIot.connected()) {}
myIot.publish("siot/1赵七", "缺考");
myIot.publish("siot/2李四", "缺考");
myIot.publish("siot/3赵雪", "缺考");
myIot.publish("siot/4张雪", "缺考");
myIot.publish("siot/5王五", "缺考");
myIot.publish("siot/6宋六", "缺考");
myIot.publish("siot/7张三", "缺考");
myIot.publish("siot/8王雪", "缺考");
myIot.publish("siot/9宋雪", "缺考");
myIot.publish("siot/10李雪", "缺考");
}
void DF_RenLianPanDuan() {
if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 1) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data1);
k10.canvas->updateCanvas();
myIot.publish("siot/1赵七", "姓名:赵七 准考证号:372801001 座号:01", 1);
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 2) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data2);
k10.canvas->updateCanvas();
myIot.publish("siot/2李四", "姓名:李四 准考证号:372801002 座号:02");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 3) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data3);
k10.canvas->updateCanvas();
myIot.publish("siot/3赵雪", "姓名:赵雪 准考证号:3728010013 座号:03");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 4) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data4);
k10.canvas->updateCanvas();
myIot.publish("siot/4张雪", "姓名:张雪 准考证号:372801004 座号:04");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 5) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data5);
k10.canvas->updateCanvas();
myIot.publish("siot/5王五", "姓名:王五 准考证号:372801005 座号:05");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 6) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data6);
k10.canvas->updateCanvas();
myIot.publish("siot/6宋六", "姓名:宋六 准考证号:372801006 座号:06");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 7) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data7);
k10.canvas->updateCanvas();
myIot.publish("siot/7张三", "姓名:张三 准考证号:372801007 座号:07");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 8) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data8);
k10.canvas->updateCanvas();
myIot.publish("siot/8王雪", "姓名:王雪 准考证号:372801008 座号:08");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 9) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data9);
k10.canvas->updateCanvas();
myIot.publish("siot/9宋雪", "姓名:宋雪 准考证号:372801009 座号:09");
}
else if (((huskylens.getCachedResultByID(ALGORITHM_FACE_RECOGNITION, 10) != NULL))) {
DF_ChengGong();
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data10);
k10.canvas->updateCanvas();
myIot.publish("siot/10李雪", "姓名:李雪 准考证号:372801010 座号:10");
}
else {
DF_ShiBai();
delay(1000);
}
delay(1000);
}
void DF_ChengGong() {
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0x00FF00);
asr.speak("验证成功!");
}
void DF_ZhunBei() {
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data11);
k10.canvas->updateCanvas();
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0xFFFF00);
}
void DF_ShiBai() {
k10.canvas->canvasDrawBitmap(0,0,239,319,image_data12);
k10.canvas->updateCanvas();
k10.rgb->brightness(round(9));
k10.rgb->write(-1, 0xFF0000);
asr.speak("验证失败,请重新验证!");
}

返回首页
回到顶部








云天2025.12.18
视频中展示的是二哈1代?
风悠扬05392025.12.18
二哈二代
风悠扬05392025.12.18
我拆开了,让摄像头和屏幕在同一侧