/* * 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 showFaceList = new List(); List showFaceListTwo = new List(); List showOriginalFaceList = new List(); List showOriginalFaceListTwo = new List(); List showFaceRectList = new List(); private int faceCount = 106; private Dictionary faceData = new Dictionary(); private Dictionary faceOriginalData = new Dictionary(); private Dictionary faceWeightHeightData = new Dictionary(); private Dictionary faceRectPointData = new Dictionary(); 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(); } /// /// 获取脸部点数据 /// void GetFaceData() { faceData = ZwnAmLogicSDK.GetFaceInfo(); } /// /// 获取脸部框的位置和大小 /// void GetFaceRectData() { faceRectPointData = ZwnAmLogicSDK.GetFaceRectPointInfo(); faceWeightHeightData = ZwnAmLogicSDK.GetFaceRectWeightHeightInfo(); } /// /// 获取脸部原始点的数据 /// void GetFaceOriginalData() { faceOriginalData = ZwnAmLogicSDK.GetOriginalFaceInfo(); } /// /// 显示转换后点的位置 /// 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; } } } } /// /// 获取脸部框的位置和大小 /// 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().sizeDelta = faceWeightHeightData[i]; } } else { if (showFaceRectList.Count > 0) { for (int i = 0; i < showFaceRectList.Count; i++) { showFaceRectList[i].transform.localPosition = default_vec; } } } } /// /// 显示原始点的位置 /// 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(); } }