人脸识别开发安卓手机APP 注册人脸 识别人脸
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();
}
}
--------------------完成-----------