人脸识别开发安卓手机APP 注册人脸 识别人脸

来源:互联网 发布:类似英文的拼音域名 编辑:程序博客网 时间:2024/06/16 00:36

1.先上图,看最终效果

     注册人脸之后,在人脸库就有了信息,然后识别的时候,如果是人脸库的人,就可以打开相关设备(打开设备代码没有写)

2.来看看场景层级


3.资源文件夹(资源全手工打造)


4.这里写了三个scripts



5.具体源代码: 第一个是 FaceTra  百度人脸检测API

  

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Baidu.Aip.Face;
using System.IO;
using Newtonsoft.Json.Linq;


public class FaceTra : MonoBehaviour {


    static string APP_ID = "10437769";
    static string API_KEY = "7sjPyzk6X6VBLDcUZrn8U8DB";
    static string SECRET_KEY = "4UidkA0dbnkwXbIMc8ntTzWnTkBWWGAv";


    private void Awake()
    {
        System.Net.ServicePointManager.ServerCertificateValidationCallback +=
          delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
          System.Security.Cryptography.X509Certificates.X509Chain chain,
          System.Net.Security.SslPolicyErrors sslPolicyErrors)
          {
              return true; // **** Always accept
          };
    }


    public static JObject FaceDetection(byte[] image , string[] userinfo) {
        var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY);
        var result = client.User.Identify(image, new[] { userinfo[2] }, 1, 1);
        return result;
    }


    public static JObject FaceRegister(byte[] image,string[] userinfo)
    {
        var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY);
        var result = client.User.Register(image, userinfo[0], userinfo[1], new[] { userinfo[2] });
        return result;
    }


    public static JObject  FaceDelete (string[]  userinfo)
    {
        var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY);
        var result = client.User.Delete(userinfo[0]);
        result = client.User.Delete(userinfo[0], new[] { userinfo[2] });
        return result;
    }
}


第二个是控制代码Controllor 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using Newtonsoft.Json.Linq;


public class Controllor : MonoBehaviour {
    public delegate void Mydelegate();
    public event Mydelegate _mydelegate;
    public _Music music;


    public Text UID;
    public Text userInfo;
    //public Text groupName;默认a组算了


    public Transform _transform;//设想区域的变换


    public RawImage image;
    public Text cameraNumber;//返回信息显示


    private WebCamTexture tex;
    private string  deviceName;
    private bool isBackCam=true;
    private int deviceInt=0;
    
    private byte[] images;
    private JObject result;
    private string[] userinfo;


    private Quaternion quaTer;




    public void Huidiao_mydelegate() {
        _mydelegate();
    }




    //获得手机摄像头权限并打开摄像头
    public IEnumerator TurnOnCamera () { 
        yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
        if (Application.HasUserAuthorization(UserAuthorization.WebCam)) {
            WebCamDevice[] device = WebCamTexture.devices;
            deviceName = device[deviceInt].name;
            tex = new WebCamTexture(deviceName,800, 800,12);
            tex.Play();
            image.texture = tex;
            
        }
}


    private void Start()
    {
        _mydelegate += music.PlayClickMusic;
        //groupName.text = "a";
        StartCoroutine(TurnOnCamera());
    }


    


    void Update () {
        
}


    //切换摄像头函数
    public void TurnCam() {
        tex.Stop();
        tex = null;
        StopCoroutine(TurnOnCamera());
        if (isBackCam)
        {
            deviceInt = 1;
            _transform.Rotate(Vector3.forward, 180f);
            isBackCam = false;
        }
        else {
            deviceInt = 0;
            _transform.Rotate(Vector3.forward,180f);
            isBackCam = true;
        }
        StartCoroutine(TurnOnCamera());
    }
    //识别按钮函数
    public void IdentifyAndStart() {
        Huidiao_mydelegate();
        userinfo = new string[] { UID.text, userInfo.text, "a" };
        cameraNumber.text = null;
        tex.Pause();
        Texture2D t = new Texture2D(800,800);
        t.ReadPixels(new Rect(197,971,680,800),0,0,false);
        result = FaceTra.FaceDetection(t.EncodeToJPG(), userinfo);
        cameraNumber.text = result.ToString();
        music.PlayResultMusic();
        tex.Play(); 
    }


    //退出程序函数
    public void Esc()
    {
        Application.Quit();
    }


    //注册人脸方法
    public void GetRegisteredFace() {
        Huidiao_mydelegate();
        userinfo = new string[] { UID.text,userInfo.text, "a"};
        cameraNumber.text = null;
        tex.Pause();
        Texture2D t = new Texture2D(800, 800);
        t.ReadPixels(new Rect(197, 971, 680, 800), 0, 0, false);
        var result= FaceTra.FaceRegister(t.EncodeToJPG(), userinfo);
        cameraNumber.text = result.ToString();
        music.PlayResultMusic();
        tex.Play();
    }


    public void DeleteFaceID()
    {
        userinfo = new string[] { UID.text, userInfo.text, "a"};
        var result = FaceTra.FaceDelete(userinfo);
        cameraNumber.text = result.ToString();
        music.PlayResultMusic();


    }


}


第三个是音效类 _Music:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class _Music : MonoBehaviour {


    public AudioClip[] audioArray;
    AudioSource audioSource;


void Start () {
        PlayStartMusic();
    }


void Update () {

}


    public void PlayStartMusic() {
        audioSource= gameObject.GetComponent<AudioSource>();
        audioSource.clip = audioArray[2];
        audioSource.Play();
    }


    public void PlayClickMusic()
    {
        audioSource = gameObject.GetComponent<AudioSource>();
        audioSource.clip = audioArray[0];
        audioSource.Play();
    }


    public void PlayResultMusic()
    {
        audioSource = gameObject.GetComponent<AudioSource>();
        audioSource.clip = audioArray[1];
        audioSource.Play();
    }
}



--------------------完成-----------

原创粉丝点击