Exemplo n.º 1
0
    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;
        }
    }
Exemplo n.º 2
0
    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);
    }