zoukankan      html  css  js  c++  java
  • 基于Unity3D云人脸监測技术

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

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

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

    首先,先将插件下载下来而且导入到你新建的Unityproject中,效果例如以下所看到的:


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


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

    验证通过后,接下来要做的事情就是选择“Face - Preview”,然后点击最后一个button。进入最后的界面显演示样例如以下所看到的:


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


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


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

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


    它的照片处理是在server中运算处理的,在client这块的主要代码例如以下所看到的:

    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); } }


    它是通过协程处理图片以及上传云server的,效果也很有趣。当然核心技术是在云server上的,可是能够方便开发人员在此基础上开发一些有趣的东西。

    相对于开发人员来说,人脸识别技术已经不存在技术门槛了。网上也有许多开源的代码以及许多SDK。比方Face++的SDK,这些都对开发人员特别是高速的开发产品很有利。




  • 相关阅读:
    nginx系列之七:限流配置
    nginx系列之六:cache服务
    nginx系列之五: 负载均衡
    nginx系列之四:web服务器
    nginx系列之三:日志配置
    nginx系列之二:配置文件解读
    nginx系列之一:nginx入门
    [面试题]25个MySQL经典面试题
    常用的 Linux iptables 规则
    java new一个对象的过程中发生了什么
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7306395.html
Copyright © 2011-2022 走看看