| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /*
- * File Name: ZwnAmlogicFace
- * Author: Guan B
- * Version: 1.0.0
- * Data: 2022.04.08
- * Des: 调用SDK接口Demo
- * Other: Zeewain
- */
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class ZwnAmlogicFace : MonoBehaviour
- {
- private AndroidJavaClass javaClass;
- public GameObject showPrefabs;
- public GameObject showRectfabs;
- public Transform showPointParent;
- List<GameObject> showFaceList = new List<GameObject>();
- List<GameObject> showFaceListTwo = new List<GameObject>();
- List<GameObject> showOriginalFaceList = new List<GameObject>();
- List<GameObject> showOriginalFaceListTwo = new List<GameObject>();
- List<GameObject> showFaceRectList = new List<GameObject>();
- private int faceCount = 106;
- private Dictionary<int, Vector3[]> faceData = new Dictionary<int, Vector3[]>();
- private Dictionary<int, Vector3[]> faceOriginalData = new Dictionary<int, Vector3[]>();
- private Dictionary<int, Vector2> faceWeightHeightData = new Dictionary<int, Vector2>();
- private Dictionary<int, Vector3> faceRectPointData = new Dictionary<int, Vector3>();
- Vector3 default_vec = new Vector3(-Screen.width, -Screen.height, 0);
- Vector3[] faceFloatData;
- // Start is called before the first frame update
- void Start()
- {
- javaClass = new AndroidJavaClass("com.zee.unity.UnityHelper");
- ZwnAmLogicSDK.InitAndroidJavaClass(javaClass);
- }
- // Update is called once per frame
- void Update()
- {
- if (ZwnAmlogicHelperData.isCanOpenCamera)
- {
- ZwnAmlogicHelperData.isCanOpenCamera = false;
- ZwnAmLogicSDK.OpenCamera(ZwnAmlogicHelperData.cameraId);
- }
- if (ZwnAmlogicHelperData.isOpenCamera)
- {
- ZwnAmlogicHelperData.initPersonPoseNum = ZwnAmLogicSDK.InitFace(ZwnAmlogicHelperData.landmarkType, ZwnAmlogicHelperData.deviceType, ZwnAmlogicHelperData.threadNum);
- if (ZwnAmlogicHelperData.initPersonPoseNum == 0)
- {
- ZwnAmLogicSDK.SetFaceLandmarkStatus(true);
- ZwnAmLogicSDK.SetFaceMaxNum(2, 0);
- ZwnAmLogicSDK.SetFaceScoreThreshold(0.5f);
- ZwnAmLogicSDK.SetFaceSmoothnessStatus(true);
- }
- }
- if (ZwnAmlogicHelperData.initPersonPoseNum == 0)
- {
- ZwnAmlogicHelperData.isOpenCamera = false;
- GetFaceData();
- GetFaceRectData();
- //GetFaceOriginalData();
- }
- ShowChangeFacePoint();
- ShowRectPoint();
- //ShowOriginalFacePoint();
- }
- /// <summary>
- /// 获取脸部点数据
- /// </summary>
- void GetFaceData()
- {
- faceData = ZwnAmLogicSDK.GetFaceInfo();
- }
- /// <summary>
- /// 获取脸部框的位置和大小
- /// </summary>
- void GetFaceRectData()
- {
- faceRectPointData = ZwnAmLogicSDK.GetFaceRectPointInfo();
- faceWeightHeightData = ZwnAmLogicSDK.GetFaceRectWeightHeightInfo();
- }
- /// <summary>
- /// 获取脸部原始点的数据
- /// </summary>
- void GetFaceOriginalData()
- {
- faceOriginalData = ZwnAmLogicSDK.GetOriginalFaceInfo();
- }
- /// <summary>
- /// 显示转换后点的位置
- /// </summary>
- public void ShowChangeFacePoint()
- {
- if (faceData.Count > 0 && faceData != null)
- {
- if (faceData.Count == 1)
- {
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showFaceList.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showFaceList.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showFaceList[i].transform.localPosition = faceData[0][i];
- }
- }
- else if(faceData.Count == 2)
- {
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showFaceList.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showFaceList.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showFaceList[i].transform.localPosition = faceData[0][i];
- }
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showFaceListTwo.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showFaceListTwo.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showFaceListTwo[i].transform.localPosition = faceData[1][i];
- }
- }
- }
- else
- {
- if (showFaceList.Count > 0)
- {
- for (int i = 0; i < showFaceList.Count; i++)
- {
- showFaceList[i].transform.localPosition = default_vec;
- }
- }
- if (showFaceListTwo.Count > 0)
- {
- for (int i = 0; i < showFaceListTwo.Count; i++)
- {
- showFaceListTwo[i].transform.localPosition = default_vec;
- }
- }
- }
-
- }
- /// <summary>
- /// 获取脸部框的位置和大小
- /// </summary>
- void ShowRectPoint()
- {
- if (faceRectPointData.Count > 0 && faceWeightHeightData.Count > 0)
- {
- for (int i = 0; i < faceRectPointData.Count; i++)
- {
- if (i >= showFaceRectList.Count)
- {
- GameObject go = Instantiate(showRectfabs);
- showFaceRectList.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showFaceRectList[i].transform.localPosition = faceRectPointData[i];
- showFaceRectList[i].GetComponent<RectTransform>().sizeDelta = faceWeightHeightData[i];
- }
- }
- else
- {
- if (showFaceRectList.Count > 0)
- {
- for (int i = 0; i < showFaceRectList.Count; i++)
- {
- showFaceRectList[i].transform.localPosition = default_vec;
- }
- }
- }
- }
- /// <summary>
- /// 显示原始点的位置
- /// </summary>
- public void ShowOriginalFacePoint()
- {
- if (faceOriginalData.Count > 0 && faceOriginalData != null)
- {
- if (faceOriginalData.Count == 1)
- {
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showOriginalFaceList.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showOriginalFaceList.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showOriginalFaceList[i].transform.localPosition = faceOriginalData[0][i];
- }
- }
- else if(faceOriginalData.Count == 2)
- {
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showOriginalFaceList.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showOriginalFaceList.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showOriginalFaceList[i].transform.localPosition = faceOriginalData[0][i];
- }
- for (int i = 0; i < faceCount; i++)
- {
- if (i >= showOriginalFaceListTwo.Count)
- {
- GameObject go = Instantiate(showPrefabs);
- showOriginalFaceListTwo.Add(go);
- go.transform.SetParent(showPointParent);
- go.transform.localScale = new Vector3(1, 1, 1);
- }
- showOriginalFaceListTwo[i].transform.localPosition = faceOriginalData[1][i];
- }
- }
- }
- else
- {
- if (showOriginalFaceList.Count > 0)
- {
- for (int i = 0; i < showOriginalFaceList.Count; i++)
- {
- showOriginalFaceList[i].transform.localPosition = default_vec;
- }
- }
- if (showOriginalFaceListTwo.Count > 0)
- {
- for (int i = 0; i < showOriginalFaceListTwo.Count; i++)
- {
- showOriginalFaceListTwo[i].transform.localPosition = default_vec;
- }
- }
- }
- }
- private void OnDestroy()
- {
- ZwnAmLogicSDK.ReleaseZeePose();
- ZwnAmLogicSDK.CloseCamera();
- }
- }
|