private void readCenterNetResult() { while (client.Connected) { var bytes = new byte[4096]; var count = client.Receive(bytes); //UnityEngine.Debug.Log("Socket Recv : " + Encoding.UTF8.GetString(bytes, 0, count)); CenterNetArray centerNet = JsonUtility.FromJson <CenterNetArray>(Encoding.UTF8.GetString(bytes, 0, count)); if (centerNet.result.Length > 0) { resultQueue.Add(centerNet); } socketState = STATE.IDLE; //Debug.Log("recv texture CenterNet result"); int processTime = (DateTime.Now - startTime).Milliseconds; elapsedTimesMs.Add(processTime); startTime = DateTime.Now; } }
private void renderCenterResult() { if (resultQueue.Count <= 0) { return; } CenterNetArray centerNet = resultQueue[0]; List <Vector3> keyPoint = new List <Vector3>(); destoryLines(); for (int i = 0; i < centerNet.result.Length; i++) { float xScale = centerProcessOutput.rectTransform.rect.width / latestSendTexture.width; float yScale = centerProcessOutput.rectTransform.rect.height / latestSendTexture.height; //preprocess bbox coordinates for (int j = 0; j < centerNet.result[i].bbox.Length; j++) { if (j % 2 == 1) { centerNet.result[i].bbox[j] = latestSendTexture.height - centerNet.result[i].bbox[j]; centerNet.result[i].bbox[j] *= yScale; } else { centerNet.result[i].bbox[j] *= xScale; } } //preprocess keypoints coordinates List <Vector3> keypoints = new List <Vector3>(); for (int j = 0; j < centerNet.result[i].hp.Length; j += 2) { centerNet.result[i].hp[j + 1] = latestSendTexture.height - centerNet.result[i].hp[j + 1]; centerNet.result[i].hp[j + 1] *= yScale; centerNet.result[i].hp[j] *= xScale; keypoints.Add(new Vector3(centerNet.result[i].hp[j], centerNet.result[i].hp[j + 1], 0)); } // draw bounding box result Vector3 topLeft = new Vector3(centerNet.result[i].bbox[0], centerNet.result[i].bbox[1], 0); Vector3 topRight = new Vector3(centerNet.result[i].bbox[2], centerNet.result[i].bbox[1], 0); Vector3 bottomLeft = new Vector3(centerNet.result[i].bbox[0], centerNet.result[i].bbox[3], 0); Vector3 bottomRight = new Vector3(centerNet.result[i].bbox[2], centerNet.result[i].bbox[3], 0); List <Vector3> bbox = new List <Vector3>(); bbox.Add(topLeft); bbox.Add(topRight); bbox.Add(topRight); bbox.Add(bottomRight); bbox.Add(bottomRight); bbox.Add(bottomLeft); bbox.Add(bottomLeft); bbox.Add(topLeft); addLines(bbox, Color.green); //draw keypoints edges for (int j = 0; j < keypointEdges.Length / 2; j++) { List <Vector3> line = new List <Vector3>(); line.Add(keypoints[keypointEdges[j, 0]]); line.Add(keypoints[keypointEdges[j, 1]]); //左右邊身體分別為奇數/偶數,上軀幹連結(5,6),下軀幹連接(11,12) if ((keypointEdges[j, 0] % 2 == 0) && (keypointEdges[j, 1] % 2 == 0)) { addLines(line, Color.red); } else if ((keypointEdges[j, 0] % 2 == 1) && (keypointEdges[j, 1] % 2 == 1)) { addLines(line, Color.blue); } else { addLines(line, Color.magenta); } } } recvFps.text = string.Format("FPS : {0}", 1000.0f / (float)elapsedTimesMs.Last()); resultQueue.RemoveAt(0); }