ZwnAmlogicManyPose.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /*
  2. * File Name: ZwnAmlogicManyPose
  3. * Author: Guan B
  4. * Version: 1.0.0
  5. * Data: 2022.04.08
  6. * Des: 调用SDK接口Demo(pose 多人模块)
  7. * Other: Zeewain
  8. */
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. using UnityEngine;
  12. using UnityEngine.UI;
  13. using System.Diagnostics;
  14. public class ZwnAmlogicManyPose : MonoBehaviour
  15. {
  16. private AndroidJavaClass javaClass;
  17. //保存第一个转换后的
  18. List<GameObject> showChangePoseList = new List<GameObject>();
  19. List<GameObject> showChangePoseListTwo = new List<GameObject>();
  20. List<GameObject> showOriginalPoseList = new List<GameObject>();
  21. List<GameObject> showOriginalPoseListTwo = new List<GameObject>();
  22. List<GameObject> showPoseRectList = new List<GameObject>();
  23. public GameObject showPrefabs;
  24. public Transform showPointParent;
  25. public GameObject showRectfabs;
  26. private int poseCount = ZwnAmlogicHelperData.ZWN_POSE_KEY_POINTS_DIM_LEN;
  27. Dictionary<int, Vector3[]> poseData = new Dictionary<int, Vector3[]>();
  28. Dictionary<int, Vector3[]> poseOriginalData = new Dictionary<int, Vector3[]>();
  29. Dictionary<int, Vector2> poseWeightHeightData = new Dictionary<int, Vector2>();
  30. Dictionary<int, Vector3> poseRectPointData = new Dictionary<int, Vector3>();
  31. Vector3 default_vec = new Vector3(-Screen.width, -Screen.height, 0);
  32. int nMaxCount = 2;
  33. private void Start()
  34. {
  35. javaClass = new AndroidJavaClass("com.zee.unity.UnityHelper");
  36. ZwnAmLogicSDK.InitAndroidJavaClass(javaClass);
  37. }
  38. private void Update()
  39. {
  40. if (ZwnAmlogicHelperData.isCanOpenCamera)
  41. {
  42. ZwnAmlogicHelperData.isCanOpenCamera = false;
  43. ZwnAmLogicSDK.OpenCamera(ZwnAmlogicHelperData.cameraId);
  44. }
  45. if (ZwnAmlogicHelperData.isOpenCamera)
  46. {
  47. ZwnAmlogicHelperData.initPersonPoseNum = ZwnAmLogicSDK.InitPersonPose(ZwnAmlogicHelperData.landmarkType, ZwnAmlogicHelperData.trackNum, ZwnAmlogicHelperData.deviceType, ZwnAmlogicHelperData.isuseBestPose);
  48. if (ZwnAmlogicHelperData.initPersonPoseNum == 0)
  49. {
  50. ZwnAmLogicSDK.SetUseBestPose(false);
  51. ZwnAmLogicSDK.SetPoseTrackFrameThreshold(30);
  52. }
  53. }
  54. if (ZwnAmlogicHelperData.initPersonPoseNum == 0)
  55. {
  56. ZwnAmlogicHelperData.isOpenCamera = false;
  57. GetZeePosePointArray();
  58. GetZeePoseRectArray();
  59. //GetOriginalZeePosePointArray();
  60. }
  61. ShowChangePosePoint();
  62. ShowZeePoseRectPoint();
  63. //ShowOriginalPosePoint();
  64. }
  65. /// <summary>
  66. /// 获取转换后的多个pose数据
  67. /// </summary>
  68. void GetZeePosePointArray()
  69. {
  70. poseData = ZwnAmLogicSDK.GetPoseInfo();
  71. }
  72. /// <summary>
  73. /// 获取原始的多个pose数据
  74. /// </summary>
  75. void GetOriginalZeePosePointArray()
  76. {
  77. poseOriginalData = ZwnAmLogicSDK.GetOriginalPoseInfo();
  78. }
  79. /// <summary>
  80. /// 获取多个pose的人像框的数据
  81. /// </summary>
  82. void GetZeePoseRectArray()
  83. {
  84. poseRectPointData = ZwnAmLogicSDK.GetPoseRectInfo();
  85. poseWeightHeightData = ZwnAmLogicSDK.GetPoseRectWeightHeightInfo();
  86. }
  87. /// <summary>
  88. /// 显示转换后的多个pose数据(显示2个,最多显示10个)
  89. /// </summary>
  90. public void ShowChangePosePoint()
  91. {
  92. if (poseData.Count > 0 && poseData != null)
  93. {
  94. if (poseData.Count == 1)
  95. {
  96. if (showChangePoseListTwo.Count > 0)
  97. {
  98. for (int i = 0; i < showChangePoseListTwo.Count; i++)
  99. {
  100. showChangePoseListTwo[i].transform.localPosition = default_vec;
  101. }
  102. }
  103. for (int i = 0; i < poseCount; i++)
  104. {
  105. if (i >= showChangePoseList.Count)
  106. {
  107. GameObject go = Instantiate(showPrefabs);
  108. showChangePoseList.Add(go);
  109. go.transform.SetParent(showPointParent);
  110. go.transform.localScale = new Vector3(1, 1, 1);
  111. }
  112. showChangePoseList[i].transform.localPosition = poseData[0][i];
  113. }
  114. }
  115. else if(poseData.Count == 2)
  116. {
  117. for (int i = 0; i < poseCount; i++)
  118. {
  119. if (i >= showChangePoseList.Count)
  120. {
  121. GameObject go = Instantiate(showPrefabs);
  122. showChangePoseList.Add(go);
  123. go.transform.SetParent(showPointParent);
  124. go.transform.localScale = new Vector3(1, 1, 1);
  125. }
  126. showChangePoseList[i].transform.localPosition = poseData[0][i];
  127. }
  128. for (int i = 0; i < poseCount; i++)
  129. {
  130. if (i >= showChangePoseListTwo.Count)
  131. {
  132. GameObject go = Instantiate(showPrefabs);
  133. showChangePoseListTwo.Add(go);
  134. go.transform.SetParent(showPointParent);
  135. go.transform.localScale = new Vector3(1, 1, 1);
  136. }
  137. showChangePoseListTwo[i].transform.localPosition = poseData[1][i];
  138. }
  139. }
  140. }
  141. else
  142. {
  143. if (showChangePoseList.Count > 0)
  144. {
  145. for (int i = 0; i < showChangePoseList.Count; i++)
  146. {
  147. showChangePoseList[i].transform.localPosition = default_vec;
  148. }
  149. }
  150. if (showChangePoseListTwo.Count > 0)
  151. {
  152. for (int i = 0; i < showChangePoseListTwo.Count; i++)
  153. {
  154. showChangePoseListTwo[i].transform.localPosition = default_vec;
  155. }
  156. }
  157. }
  158. }
  159. /// <summary>
  160. /// 显示转换后的多个pose数据(显示2个,最多显示10个)
  161. /// </summary>
  162. public void ShowOriginalPosePoint()
  163. {
  164. if (poseOriginalData.Count > 0 && poseOriginalData != null)
  165. {
  166. if (poseOriginalData.Count == 1)
  167. {
  168. if (showOriginalPoseListTwo.Count > 0)
  169. {
  170. for (int i = 0; i < showOriginalPoseListTwo.Count; i++)
  171. {
  172. showOriginalPoseListTwo[i].transform.localPosition = default_vec;
  173. }
  174. }
  175. for (int i = 0; i < poseCount; i++)
  176. {
  177. if (i >= showOriginalPoseList.Count)
  178. {
  179. GameObject go = Instantiate(showPrefabs);
  180. showOriginalPoseList.Add(go);
  181. go.transform.SetParent(showPointParent);
  182. go.transform.localScale = new Vector3(1, 1, 1);
  183. }
  184. showOriginalPoseList[i].transform.localPosition = poseOriginalData[0][i];
  185. }
  186. }
  187. else if (poseOriginalData.Count == 2)
  188. {
  189. for (int i = 0; i < poseCount; i++)
  190. {
  191. if (i >= showOriginalPoseList.Count)
  192. {
  193. GameObject go = Instantiate(showPrefabs);
  194. showOriginalPoseList.Add(go);
  195. go.transform.SetParent(showPointParent);
  196. go.transform.localScale = new Vector3(1, 1, 1);
  197. }
  198. showOriginalPoseList[i].transform.localPosition = poseOriginalData[0][i];
  199. }
  200. for (int i = 0; i < poseCount; i++)
  201. {
  202. if (i >= showOriginalPoseListTwo.Count)
  203. {
  204. GameObject go = Instantiate(showPrefabs);
  205. showOriginalPoseListTwo.Add(go);
  206. go.transform.SetParent(showPointParent);
  207. go.transform.localScale = new Vector3(1, 1, 1);
  208. }
  209. showOriginalPoseListTwo[i].transform.localPosition = poseOriginalData[1][i];
  210. }
  211. }
  212. }
  213. else
  214. {
  215. if (showOriginalPoseList.Count > 0)
  216. {
  217. for (int i = 0; i < showOriginalPoseList.Count; i++)
  218. {
  219. showOriginalPoseList[i].transform.localPosition = default_vec;
  220. }
  221. }
  222. if (showOriginalPoseListTwo.Count > 0)
  223. {
  224. for (int i = 0; i < showOriginalPoseListTwo.Count; i++)
  225. {
  226. showOriginalPoseListTwo[i].transform.localPosition = default_vec;
  227. }
  228. }
  229. }
  230. }
  231. /// <summary>
  232. /// 显示pose的人像框的位置和大小
  233. /// </summary>
  234. public void ShowZeePoseRectPoint()
  235. {
  236. if(poseRectPointData.Count> 0 && poseRectPointData != null)
  237. {
  238. if(poseRectPointData.Count == 1)
  239. {
  240. if (showPoseRectList.Count > 0)
  241. {
  242. for (int i = 0; i < showPoseRectList.Count; i++)
  243. {
  244. showPoseRectList[i].transform.localPosition = default_vec;
  245. }
  246. }
  247. for (int i = 0; i < 1; i++)
  248. {
  249. if (i >= showPoseRectList.Count)
  250. {
  251. GameObject go = Instantiate(showRectfabs);
  252. showPoseRectList.Add(go);
  253. go.transform.SetParent(showPointParent);
  254. go.transform.localScale = new Vector3(1, 1, 1);
  255. }
  256. showPoseRectList[i].transform.localPosition = poseRectPointData[i];
  257. showPoseRectList[i].GetComponent<RectTransform>().sizeDelta = poseWeightHeightData[i];
  258. }
  259. }
  260. else if(poseRectPointData.Count == 2)
  261. {
  262. for (int i = 0; i < 2; i++)
  263. {
  264. if (i >= showPoseRectList.Count)
  265. {
  266. GameObject go = Instantiate(showRectfabs);
  267. showPoseRectList.Add(go);
  268. go.transform.SetParent(showPointParent);
  269. go.transform.localScale = new Vector3(1, 1, 1);
  270. }
  271. showPoseRectList[i].transform.localPosition = poseRectPointData[i];
  272. showPoseRectList[i].GetComponent<RectTransform>().sizeDelta = poseWeightHeightData[i];
  273. }
  274. }
  275. }
  276. else
  277. {
  278. if (showPoseRectList.Count > 0)
  279. {
  280. for (int i = 0; i < showPoseRectList.Count; i++)
  281. {
  282. showPoseRectList[i].transform.localPosition = default_vec;
  283. }
  284. }
  285. }
  286. }
  287. private void OnDestroy()
  288. {
  289. ZwnAmLogicSDK.ReleaseZeePose();
  290. ZwnAmLogicSDK.CloseCamera();
  291. }
  292. }