/* * File Name: ZwnAmlogicHand * 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 ZwnAmlogicHand : MonoBehaviour { private AndroidJavaClass javaClass; public GameObject showPrefabs; public Transform showPointParent; public GameObject showRectfabs; List showHandList = new List(); List showHandListTwo = new List(); List showHandRectList = new List(); List showHandOriginaltList = new List(); List showHandOriginaltListTwo = new List(); private int handCount = 21; Dictionary handData = new Dictionary(); Dictionary handOriginalData = new Dictionary(); Dictionary handWeightHeightData = new Dictionary(); Dictionary handRectPointData = new Dictionary(); Vector3 default_vec = new Vector3(-Screen.width, -Screen.height, 0); Vector3[] handChangeData; // Start is called before the first frame update void Start() { javaClass = new AndroidJavaClass("com.zee.unity.UnityHelper"); ZwnAmLogicSDK.InitAndroidJavaClass(javaClass); handChangeData = new Vector3[21]; } // Update is called once per frame void Update() { if (ZwnAmlogicHelperData.isCanOpenCamera) { ZwnAmlogicHelperData.isCanOpenCamera = false; ZwnAmLogicSDK.OpenCamera(ZwnAmlogicHelperData.cameraId); } if (ZwnAmlogicHelperData.isOpenCamera) { ZwnAmlogicHelperData.initPersonPoseNum = ZwnAmLogicSDK.InitHand(ZwnAmlogicHelperData.landmarkType, ZwnAmlogicHelperData.deviceType, ZwnAmlogicHelperData.threadNum); if (ZwnAmlogicHelperData.initPersonPoseNum == 0) { ZwnAmLogicSDK.SetHandLandmarkStatus(true); ZwnAmLogicSDK.SetHandMaxNum(2, 0); ZwnAmLogicSDK.SetHandScoreThreshold(0.5f); ZwnAmLogicSDK.SetHandSmoothnessStatus(true); } } if (ZwnAmlogicHelperData.initPersonPoseNum == 0) { ZwnAmlogicHelperData.isOpenCamera = false; GetHandData(); GetHandRectData(); //GetHandOriginalData(); } ShowChangeHandPoint(); ShowHandRectPoint(); //ShowHandOriginalData(); } /// /// 获取转换后的手部数据 /// void GetHandData() { handData = ZwnAmLogicSDK.GetHandInfo(); } /// /// 获取转换后的手部框位置和大小 /// void GetHandRectData() { handRectPointData = ZwnAmLogicSDK.GetHandRectPointInfo(); handWeightHeightData = ZwnAmLogicSDK.GetHandRectWeightHeightInfo(); } /// /// 获取手部原始点的数据 /// void GetHandOriginalData() { handOriginalData = ZwnAmLogicSDK.GetOriginalHandInfo(); } /// /// 显示转换后点的位置 /// public void ShowChangeHandPoint() { if (handData.Count > 0 && handData != null) { if (handData.Count == 1) { for (int i = 0; i < handCount; i++) { if (i >= showHandList.Count) { GameObject go = Instantiate(showPrefabs); showHandList.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandList[i].transform.localPosition = handData[0][i]; } } else if (handData.Count == 2) { for (int i = 0; i < handCount; i++) { if (i >= showHandList.Count) { GameObject go = Instantiate(showPrefabs); showHandList.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandList[i].transform.localPosition = handData[0][i]; } for (int i = 0; i < handCount; i++) { if (i >= showHandListTwo.Count) { GameObject go = Instantiate(showPrefabs); showHandListTwo.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandListTwo[i].transform.localPosition = handData[1][i]; } } } else { if (showHandList.Count > 0) { for (int i = 0; i < showHandList.Count; i++) { showHandList[i].transform.localPosition = default_vec; } } if (showHandListTwo.Count > 0) { for (int i = 0; i < showHandListTwo.Count; i++) { showHandListTwo[i].transform.localPosition = default_vec; } } } } /// /// 显示手部框的位置和大小 /// public void ShowHandRectPoint() { if (handRectPointData.Count > 0 && handWeightHeightData.Count > 0) { for (int i = 0; i < handRectPointData.Count; i++) { if (i >= showHandRectList.Count) { GameObject go = Instantiate(showRectfabs); showHandRectList.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandRectList[i].transform.localPosition = handRectPointData[i]; showHandRectList[i].GetComponent().sizeDelta = handWeightHeightData[i]; } } else { if (showHandRectList.Count > 0) { for (int i = 0; i < showHandRectList.Count; i++) { showHandRectList[i].transform.localPosition = default_vec; } } } } /// /// 显示手部原始点数据 /// public void ShowHandOriginalData() { if (handOriginalData.Count > 0 && handOriginalData != null) { if (handOriginalData.Count == 1) { for (int i = 0; i < handCount; i++) { if (i >= showHandOriginaltList.Count) { GameObject go = Instantiate(showPrefabs); showHandOriginaltList.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandOriginaltList[i].transform.localPosition = handOriginalData[0][i]; } } else if (handOriginalData.Count == 2) { for (int i = 0; i < handCount; i++) { if (i >= showHandOriginaltList.Count) { GameObject go = Instantiate(showPrefabs); showHandOriginaltList.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandOriginaltList[i].transform.localPosition = handOriginalData[0][i]; } for (int i = 0; i < handCount; i++) { if (i >= showHandOriginaltListTwo.Count) { GameObject go = Instantiate(showPrefabs); showHandOriginaltListTwo.Add(go); go.transform.SetParent(showPointParent); go.transform.localScale = new Vector3(1, 1, 1); } showHandOriginaltListTwo[i].transform.localPosition = handOriginalData[1][i]; } } } else { if (showHandOriginaltList.Count > 0) { for (int i = 0; i < showHandOriginaltList.Count; i++) { showHandOriginaltList[i].transform.localPosition = default_vec; } } if (showHandOriginaltListTwo.Count > 0) { for (int i = 0; i < showHandOriginaltListTwo.Count; i++) { showHandOriginaltListTwo[i].transform.localPosition = default_vec; } } } } private void OnDestroy() { ZwnAmLogicSDK.ReleaseZeePose(); ZwnAmLogicSDK.CloseCamera(); } }