程序
这个和上一篇 虹软SDK调用USB摄像头 基本相同,只是把保存文件那部分改成人脸识别,并保存对应照片
主程序部分改成
while(1){
//取usb摄像头的缓存
if (dqbuf(fd, &buf)) {
continue;
}
//中间处理
//把jpg图片解码成bgr数据
jpg2bgr((unsigned char*)map_buf[buf.index].start, buf.bytesused, &pbgr_data, &width, &height);
//printf("pic %s width: %d, height: %d \n", jpg_name, width, height);
//抽取人脸特征
ret = arcsorft_face_process2(width, height, pbgr_data, &feature);
//如果发现了人脸, 人脸对比
if(ret == 1){
//人脸对比
ASF_FaceFeature feature1;
float confidenceLevel = 0.0;
float max_confidenceLevel = 0.0;
int max_similar_id = -1;
for(int i = 0; i < face_count; i++) {
feature1.feature = face_table + i * (1032 + 255 + 19);
feature1.featureSize = 1032;
//printf("%s\n", face_table + i * (1032 + 255 + 19) + 1032);
confidenceLevel = arcsorft_face_comp(&feature1,&feature);
//置信度大于阈值, 并且阈值大于以前的
if(confidenceLevel > 0.8 && confidenceLevel > max_confidenceLevel) {
max_confidenceLevel = confidenceLevel;
max_similar_id = i;
}
}
//max_similar_id
if(max_similar_id != -1){
printf("name: %s, id: %s, max_confidenceLevel: %f\n",
&face_table[max_similar_id*(1032 + 255 + 19) +1032],
&face_table[max_similar_id*(1032 + 255 + 19) +1032 + 255],
max_confidenceLevel);
//保存图片
time_t t = time(NULL);
struct tm *currentTime = localtime(&t);
char jpg_name[255];
sprintf(jpg_name, "../cam/cam%s_%02d_%02d_%02d.jpg", &face_table[max_similar_id*(1032 + 255 + 19) +1032],
currentTime->tm_hour,
currentTime->tm_min,
currentTime->tm_sec );
FILE *fp_cam = fopen(jpg_name, "wb");
fwrite(map_buf[buf.index].start, sizeof(char), buf.bytesused, fp_cam);
fclose(fp_cam);
sleep(2);
}
max_similar_id = -1;
}
//把usb摄像头缓存放回池
if (qbuf(fd, &buf)) {
continue;
}
}
测试:
编译后运行,在数据库的人被捕捉到后打印出相关信息
face/samplecode/ASFTestDemo/build$ sudo ./arcsoft_face_engine_test
usb-0000:00:12.2-3
open_usb_camera: /dev/video0
set_fmt: 1920x1080
************* ArcFace SDK Info *****************
startTime: 2024-09-09 00:00:00
endTime: 2025-09-09 00:00:00
Version:3.0.12402010101.3
BuildDate:07/29/2020
CopyRight:Copyright 2020 ArcSoft Corporation Limited. All rights reserved.
************* Face Recognition *****************
ASFInitEngine sucess: 0
face_count: 2322
pic ../jpg_cmp/111.jpg width: 640, height: 807
111.jpg is name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.962285
pic ../jpg_cmp/200000000000000001.jpg width: 376, height: 390
200000000000000001.jpg is name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 1.000000
pic ../jpg_cmp/cam300.jpg width: 1920, height: 1080
no body in pic
pic ../jpg_cmp/cam400.jpg width: 1920, height: 1080
no body in pic
pic ../jpg_cmp/qqq.jpg width: 604, height: 666
qqq.jpg is name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.930316
pic ../jpg_cmp/ffff.jpg width: 1280, height: 1280
ffff.jpg is name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.989109
pic ../jpg_cmp/cam200.jpg width: 1920, height: 1080
cam200.jpg is name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.956321
pic ../jpg_cmp/222.jpg width: 636, height: 609
not white table person!!!!!!!!!!!
pic ../jpg_cmp/333.jpg width: 492, height: 473
333.jpg is name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.917396
left: 1056, top: 135, right: 1718, bottom: 797 ASFFaceFeatureExtractEx fail: 0x14005
name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.849967
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.936623
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.904478
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.889559
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.831630
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.830464
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.837567
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.828162
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.935891
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.904550
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.807445
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.918125
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.836467
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.946966
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.912438
left: 1050, top: 872, right: 1320, bottom: 1142 ASFFaceFeatureExtractEx fail: 0x14005
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.903827
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.916218
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.935521
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.919060
left: 1152, top: 818, right: 1495, bottom: 1161 ASFFaceFeatureExtractEx fail: 0x14005
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.804163
left: 1120, top: 715, right: 1605, bottom: 1200 ASFFaceFeatureExtractEx fail: 0x14005
left: 1145, top: 746, right: 1608, bottom: 1209 ASFFaceFeatureExtractEx fail: 0x14005
left: 1147, top: 745, right: 1626, bottom: 1224 ASFFaceFeatureExtractEx fail: 0x14005
left: 1162, top: 730, right: 1624, bottom: 1191 ASFFaceFeatureExtractEx fail: 0x14005
left: 995, top: 785, right: 1374, bottom: 1164 ASFFaceFeatureExtractEx fail: 0x14005
left: 1009, top: 821, right: 1356, bottom: 1168 ASFFaceFeatureExtractEx fail: 0x14005
left: 1036, top: 814, right: 1387, bottom: 1165 ASFFaceFeatureExtractEx fail: 0x14005
left: 1037, top: 808, right: 1391, bottom: 1162 ASFFaceFeatureExtractEx fail: 0x14005
left: 1038, top: 810, right: 1389, bottom: 1161 ASFFaceFeatureExtractEx fail: 0x14005
left: 1030, top: 803, right: 1386, bottom: 1159 ASFFaceFeatureExtractEx fail: 0x14005
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.809296
name: 200000000000000001, id: 200000000000000001, max_confidenceLevel: 0.827585
left: 722, top: 678, right: 1249, bottom: 1205 ASFFaceFeatureExtractEx fail: 0x14005
name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.904571
name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.942690
name: 100000000000000552, id: 100000000000000552, max_confidenceLevel: 0.928502
能够正常识别