首页 > 编程语言 > 详细

基于Unity3D云人脸监测技术

时间:2017-03-26 21:42:08      阅读:403      评论:0      收藏:0      [点我收藏+]

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

最近在公司负责人脸监测识别工程开发,我们的技术也是运用了云人脸技术,由于是公司内部产品,技术处于保密状态,在3D人脸识别技术运用时选择了Unity3D引擎开发,利用Unity3D的跨平台技术可以同时在IOS和Android端研发产品,当然在AppStore上也有一款利用云人脸监测技术插件Cloud Face Detection,下载地址:https://www.assetstore.unity3d.com/en/#!/content/54489,在介绍如何实现之前,先告诉大家如何使用?

首先,先将插件下载下来并且导入到你新建的Unity工程中,效果如下所示:

技术分享

其次,就需要设置云服务相关的设置了,打开网页:https://www.microsoft.com/cognitive-services/en-us/face-api  目的是获取一个Key值,这个Key值在插件中会用到。效果如下所示:

技术分享

再次,点击上图中红色框标注的“Get started for free”,然后需要登录,同时它会通过你注册的邮箱把激活的网址发到邮箱中,你点击网址即可以验证。

验证通过后,接下来要做的事情就是选择“Face - Preview”,然后点击最后一个按钮,进入最后的界面显示如下所示:

技术分享

最后,就是通过“Show 或者Copy”把key值复制粘贴到工程中,打开Scene中的框中效果如下所示:

技术分享

看标记的红色框,在最右边就是将你网页中复制的Key值粘贴上,这样就完成了云的验证工作,解析来就可以运行程序了,效果如下所示:

技术分享

该插件非常有趣,在左上方显示的是摄像头,左下方是拍照后的效果,绿色框表示的是监测到的人脸,右方显示的是监测到的角色性别,年龄,以及微笑占的百分比,当然它也实现了监测多人脸技术。

以上是关于插件的使用以及功能,接下来就给读者分析一下该插件的技术实现,它的框架设计如下所示:

技术分享

它的照片处理是在服务器中运算处理的,在客户端这块的主要代码如下所示:

public IEnumerator DetectFaces(Texture2D texImage)
	{
		if (texImage != null) 
		{
			byte[] imageBytes = texImage.EncodeToJPG ();
			yield return DetectFaces (imageBytes);
		} 
		else 
		{
			yield return null;
		}
	}
	
	
	/// <summary>
	/// Detects the faces in the given image.
	/// </summary>
	/// <returns>List of detected faces.</returns>
	/// <param name="imageBytes">Image bytes.</param>
	public IEnumerator DetectFaces(byte[] imageBytes)
	{
		faces = null;

		if(string.IsNullOrEmpty(faceSubscriptionKey))
		{
			throw new Exception("The face-subscription key is not set.");
		}

		string requestUrl = string.Format("{0}/detect?returnFaceId={1}&returnFaceLandmarks={2}&returnFaceAttributes={3}", 
											ServiceHost, true, false, "age,gender,smile,facialHair,glasses");
		
		Dictionary<string, string> headers = new Dictionary<string, string>();
		headers.Add("ocp-apim-subscription-key", faceSubscriptionKey);
		
		headers.Add("Content-Type", "application/octet-stream");
		headers.Add("Content-Length", imageBytes.Length.ToString());

		WWW www = new WWW(requestUrl, imageBytes, headers);
		yield return www;

//		if (!string.IsNullOrEmpty(www.error)) 
//		{
//			throw new Exception(www.error + " - " + requestUrl);
//		}

		if(!CloudWebTools.IsErrorStatus(www))
		{
			//faces = JsonConvert.DeserializeObject<Face[]>(www.text, jsonSettings);
			string newJson = "{ \"faces\": " + www.text + "}";
			FacesCollection facesCollection = JsonUtility.FromJson<FacesCollection>(newJson);
			faces = facesCollection.faces;
        }
		else
		{
			ProcessFaceError(www);
		}
	}


它是通过协程处理图片以及上传云服务器的,效果也非常有趣,当然核心技术是在云服务器上的,但是可以方便开发者在此基础上开发一些有趣的东西。相对于开发者来说,人脸识别技术已经不存在技术门槛了,网上也有很多开源的代码以及很多SDK,比如Face++的SDK,这些都对开发者特别是快速的开发产品非常有利。


基于Unity3D云人脸监测技术

原文:http://blog.csdn.net/jxw167/article/details/65936651

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!