一、功能要求
调用百度AI的人脸识别,实现人脸对比,识别图片,人脸注册与登录等功能。
二、前期准备工作
在百度智能云上开通账号并开通人脸库服务
1、步骤一:
在浏览器当中搜索“百度智能云”->登录/注册->在热门词条“人工智能”词条下选择“人脸识别”->进入以下界面
2、 步骤二:
点击“立即使用”->点击“创建应用”->输入应用名称,应用描述->应用归属选择“个人”->点击“立即创建”
————————————————
3、步骤三:
点击“下载SDK”(根据百度提供信息配置)->向库添加用户人脸
三、代码实现步骤(部分代码)
1、设计页面
例如:图中“识别图片”“选择人脸图”为button控件,
”人脸对比“下方显示区为textbox控件。
2、连接摄像头
设置视频捕获设备的期望帧大小和帧率,并将其关联到一个视频播放器控件(videoSourcePlayer1
)上,最后启动视频捕获。
if (comboBox1.Items.Count<=0)
{
MessageBox.Show("请插入视频设备");
return;
}
videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);
videoSource.DesiredFrameRate = 1;
videoSourcePlayer1.VideoSource = videoSource;
videoSourcePlayer1.Start();
3、人脸对比
这段代码是用于处理两个文本框(textBox2
和 textBox3
)中的图片路径,并将它们用于某种人脸比对功能。
if (string.IsNullOrEmpty(textBox2.Text) || string.IsNullOrEmpty(textBox3.Text))
{
MessageBox.Show("请选择要对比的人脸图片");
return;
}
try
{
string path1=textBox2.Text;
string path2=textBox3.Text;
var faces = new JArray
{
new JObject
{
{"image", ReadImg(path1)},
{"image_type", "BASE64"},
{"face_type", "LIVE"},
{"quality_control", "LOW"},
{"liveness_control", "NONE"},
},
new JObject
{
{"image", ReadImg(path2)},
{"image_type", "BASE64"},
{"face_type", "LIVE"},
{"quality_control", "LOW"},
{"liveness_control", "NONE"},
}
};
// 带参数调用人脸比对
var result = client.Match(faces);
textBox1.Text = result.ToString();
}
catch (Exception ex)
{ }
如果任何一个文本框为空,程序会弹出一个消息框提示用户“请选择要对比的人脸图片”,并通过return
语句结束当前方法的执行。
如果两个文本框都不为空,代码会继续执行,并准备要进行人脸比对的数据。
它从textBox2和textBox3中获取图片路径,分别存储在path1和path2变量中。接着,它创建了一个JArray对象faces,这个数组包含两个JObject对象,每个对象代表一个要进行比对的图片。
注意:
"image":通过调用ReadImg()方法(该方法未在代码段中给出)将图片文件转换为Base64编码的字符串。
"image_type":设置为"BASE64",指示图片数据是Base64编码的。
(人脸对比成功时显示,这里相似度为90)
没有其他人的照片,这里用了懒洋洋的图片,会显示"pic not the face"。
4、识别图片
这部分可以实现提取人脸年龄,打分等功能。描述了一个用户交互的流程,通过文件对话框选择一个图片文件,然后将这个图片文件转换为Base64编码的字符串,并使用这个Base64字符串和一些可选参数调用一个人脸检测服务。
if (dialog.ShowDialog() == DialogResult.OK)
{
string filename = dialog.FileName;
try
{
Image im = Image.FromFile(filename);
var image = ConvertImageToBase64(im);
string imageType = "BASE64";
// 如果有可选参数
var options = new Dictionary<string, object>{
//{"max_face_num", 2},
{"face_field", "age,beauty"},
{"face_fields", "age,qualities,beauty"}
};
var options1 = new Dictionary<string, object>{
{"face_field", "age"},
{"max_face_num", 2},
{"face_type", "LIVE"},
{"liveness_control", "LOW"}
};
var result = client.Detect(image, imageType,options);
textBox1.Text = result.ToString();
//FaceDetectInfo detect = JsonHelper.DeserializeObject<FaceDetectInfo>(result.ToString());
} catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
(运行结果会显示年龄,质量分等信息)
四、其余功能展示(无代码)
1、人脸注册
连接到设备摄像头之后,就可以进行人脸注册。
调用百度智能云的人脸注册接口,并上传待注册的人脸图片及用户相关信息(如用户ID)。
注册成功后,人脸特征信息将被存储在百度的人脸库中,并可能需要在自己的数据库中记录相关关联信息。
2、人脸登录(会有语言播报):
调用百度智能云的人脸搜索接口,并上传待验证的人脸图片或者获取画面当前帧。
百度智能云将在其人脸库中搜索与上传图片匹配的人脸特征。
根据搜索结果判断用户是否存在于人脸库中,并决定是否允许用户登录。
五、总结
百度的人脸注册和登录功能是基于百度智能云的人脸识别服务实现的。整个流程涉及多个关键步骤。