最近搜索百度云的时候无意间发现百度云计算的官网,也就是百度AI
-面向企业及开发者的智能云计算服务平台
没事点进去看了看,发现百度云的人工智能下有个人脸识别的解决方案,在人脸识别这一块发现网页上检测人脸特征点的测试。我上传了好几张照片,发现这个AI经过特征点匹配得出来的特征点非常准确,而且还有如检测人的性别、年龄、肤色等等。而且发现算法可以作为开发使用,所以准备将算法移植到Win32控制台上。
它的技术文档有很多支持,如C#,Java,PHP,Python等,https://cloud.baidu.com/doc/FACE/index.html
C#下的技术支持https://cloud.baidu.com/doc/FACE/Face-Csharp-SDK.html#.E6.8E.A5.E5.8F.A3.E8.83.BD.E5.8A.9B
C#下离线SDK的下载http://ai.baidu.com/sdk#sdk-category-bfr
参考其技术文档,移植到Windows控制台应用,添加Dll引用并添加FaceDemo.cs文件。
AI提供的模板FaceDemo.cs文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using Baidu.Aip;
using Newtonsoft.Json;
namespace Baidu.Aip.Demo
{
class FaceDemo
{
public static void FaceMatch()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image1 = File.ReadAllBytes("图片文件路径");
var image2 = File.ReadAllBytes("图片文件路径");
var image3 = File.ReadAllBytes("图片文件路径");
var images = new byte[][] {image1, image2, image3};
var result = client.FaceMatch(images);
}
public static void FaceDetect()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image = File.ReadAllBytes(@"1.jpg");
var options = new Dictionary<string, object>()
{
{"face_fields", "age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities"}
};
var result = client.FaceDetect(image, options);
Console.WriteLine(result);
string resultString = result.ToString();
byte[] byteArray = System.Text.Encoding.Default.GetBytes(resultString);
FileStream file = new FileStream("Result_Sdk.txt", FileMode.OpenOrCreate);
file.Write(byteArray, 0, byteArray.Length);
file.Flush();
file.Close();
}
public static void FaceRegister()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image1 = File.ReadAllBytes("图片文件路径");
var result = client.User.Register(image1, "uid", "user info here", new []{"groupId"});
}
public static void FaceUpdate()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image1 = File.ReadAllBytes("图片文件路径");
var result = client.User.Update(image1, "uid", "groupId", "new user info");
}
public static void FaceDelete()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.User.Delete("uid");
result = client.User.Delete("uid", new []{"group1"});
}
public static void FaceVerify()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image1 = File.ReadAllBytes("图片文件路径");
var result = client.User.Verify(image1, "uid", new []{"groupId"}, 1);
}
public static void FaceIdentify()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var image1 = File.ReadAllBytes("图片文件路径");
var result = client.User.Identify(image1, new []{"groupId"}, 1, 1);
}
public static void UserInfo()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.User.GetInfo("uid");
}
public static void GroupList()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.Group.GetAllGroups(0, 100);
}
public static void GroupUsers()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.Group.GetUsers("groupId", 0, 100);
}
public static void GroupAddUser()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.Group.AddUser(new []{"toGroupId"}, "uid", "fromGroupId");
}
public static void GroupDeleteUser()
{
var client = new Baidu.Aip.Face.Face("Api Key", "Secret Key");
var result = client.Group.DeleteUser(new []{"groupId"}, "uid");
}
}
}
这里使用AI提供的ApiKey和SecretKey来替换程序的”ApiKey”和”SecretKey”,获取可以参考http://ai.baidu.com/docs#/Begin/top,其中@”1.jpg”为要检测的人脸的图像。
用户主程序入口Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
using Baidu.Aip;
using Newtonsoft.Json;
using Baidu.Aip.Demo;
namespace _AIFace
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("This is a face detect test program with Baidu.AI\n");
//访问静态方法
FaceDemo.FaceDetect();
Console.WriteLine("\nPress Enter to exit");
while (true)
{
ConsoleKeyInfo info = Console.ReadKey();
switch (info.Key)
{
case ConsoleKey.Enter:
Environment.Exit(0);
break;
default:
break;
}
}
}
}
}
程序运行结果:
{
"result_num": 1,
"result": [
{
"location": {
"left": 71,
"top": 153,
"width": 170,
"height": 151
},
"face_probability": 1,
"rotation_angle": -9,
"yaw": 6.1190032958984,
"pitch": 12.54426574707,
"roll": -9.3933248519897,
"landmark": [
{
"x": 112,
"y": 174
},
{
"x": 189,
"y": 161
},
{
"x": 153,
"y": 223
},
{
"x": 164,
"y": 254
}
],
"landmark72": [
{
"x": 73,
"y": 166
},
...
//72个特征点的位置坐标就不一一列出了
...
{
"x": 153,
"y": 255
}
],
"age": 21.859697341919,
"beauty": 68.754791259766,
"expression": 0,
"expression_probablity": 0.99997997283936,
"faceshape": [
{
"type": "square",
"probability": 0.0030876870732754
},
{
"type": "triangle",
"probability": 0.00013317406410351
},
{
"type": "oval",
"probability": 0.15438774228096
},
{
"type": "heart",
"probability": 0.79370421171188
},
{
"type": "round",
"probability": 0.048687182366848
}
],
"gender": "female",
"gender_probability": 0.99999630451202,
"glasses": 0,
"glasses_probability": 0.99999976158142,
"race": "yellow",
"race_probability": 0.99999988079071,
"qualities": {
"occlusion": {
"left_eye": 0,
"right_eye": 0,
"nose": 0,
"mouth": 0,
"left_cheek": 0,
"right_cheek": 0,
"chin": 0
},
"blur": 0,
"illumination": 0,
"completeness": 0,
"type": {
"human": 0.90241307020187,
"cartoon": 0.097586907446384
}
}
}
],
"log_id": 558853559
}
}
百度AI开放平台提供的人脸检测的程序相对于Dlib和OpenCV人脸检测来说实用起来还是相对简单的,而且可以检测请求图片中的人脸,返回人脸位置、72个关键点坐标、及人脸相关属性信息,如检测人的年龄、性别、肤色及人脸的旋转角度。
作为简单的特征点提取和人脸属性的提取时,它的实用性和方便性还是很不错的,在AI提供的SDK模板中,也支持对人脸的识别、对比、认证、注册、更新、删除等。如果感兴趣可以继续深入了解。