请完成人脸比对(C人脸比对)

前面已经写过文字识别和人脸检测。都是在使用现成的轮子(直接调用的百度SDK),其实仔细看看文档,也就都知道怎么写了,而且百度还提供了多种语言的代码示例;

所以如果后面没什么特殊需求的话,关于调用百度API来实现AI部分功能的代码就到此为止了;之所以写这三种,是因为这三种场景在日常生活、工作中使用得比较频繁。

人脸比对功能,一般会用在人脸与本人身份证做比对验证的情况下。

请完成人脸比对(C人脸比对)(1)

实现功能:

验证两张人脸是否是同一个人

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

//从官网下载AipSdk.dll引用到自己项目 //API文档地址:https://cloud.baidu.com/doc/FACE/s/Lk37c1tpf //填写自己账号的api_key和secret_key string api_key = "", secret_key = ""; private void btnCompare_Click(object sender, EventArgs e) { if (pictureBox1.Image == null || pictureBox2.Image == null) { MessageBox.Show("请先复制图片到图片框"); return; } Baidu.Aip.Face.Face client = new Baidu.Aip.Face.Face(api_key, secret_key); List<byte[]> list = new List<byte[]>(); list.Add(ImageToByte((Bitmap)pictureBox1.Image)); list.Add(ImageToByte((Bitmap)pictureBox2.Image)); JObject result = client.Match(list); if ((int)result["result_num"]==0) { textBox1.Text = "匹配失败"; } else { JArray jarr = (JArray)result["result"]; string score = jarr[0]["score"].ToString(); textBox1.Text = "匹配度:" score; } } //复制图片方法 private Image CopyImage() { try { Image image = null; IDataObject iData = Clipboard.GetDataObject(); if (iData.GetDataPresent(DataFormats.FileDrop)) { object obj = iData.GetData(DataFormats.FileDrop); image = Image.FromFile((obj as string[])[0].ToString()); } else if (iData.GetDataPresent(DataFormats.Bitmap)) { object obj = iData.GetData(DataFormats.Bitmap); image = obj as Image; } return image; } catch { return null; } } //图片转byte[] public byte[] ImageToByte(Bitmap inImg) { MemoryStream mstream = new MemoryStream(); inImg.Save(mstream, ImageFormat.Bmp); byte[] bytes = new Byte[mstream.Length]; mstream.Position = 0; mstream.Read(bytes, 0, bytes.Length); mstream.Close(); return bytes; } private void pictureBox1_Click(object sender, EventArgs e) { //pictureBox1获得焦点 pictureBox1.Focus(); } private void pictureBox2_Click(object sender, EventArgs e) { //pictureBox2获得焦点 pictureBox2.Focus(); } private void pictureBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { //粘贴图片到pictureBox1 if (e.Control && e.KeyCode == Keys.V) { pictureBox1.Image = CopyImage(); } } private void pictureBox2_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { //粘贴图片到pictureBox2 if (e.Control && e.KeyCode == Keys.V) { pictureBox2.Image = CopyImage(); } }

实现效果:

请完成人脸比对(C人脸比对)(2)

根据百度的说法就是:相似度大于80的一般会认为是同一个人。

大家在看文档的时候可能会发现官网提供的参数与我写的不一致,是因为官方提供了V2和V3两种API。根据需要选择就行。

由简入繁,拿来即用

后续精彩,持续关注

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页