Page 1 sur 1

erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 20 Oct 2022 10:56
par leslie2017
Je tiens à préciser que je suis novice en développement...fichier c# contenant le code des jumeaux virtuels qui doit s'afficher sur unity quand je présente mon mans devant la web cam mais j'obtiens des erreurs sur unity quand je veux pour exécuter le code afin d'obtenir les jumeaux 3D BESOIN D'AIDE s'il vous plaît :pleur4: :pleur4:

voici la video youtube qui montre ce que je suis entrain de vouloir faire mais avec deux mais au lieu de deux comme sur la video
3D HAND TRACKING
1.png
code c# hand tracking pour une main
1.png (76.84 Kio) Consulté 3609 fois
2.png
code c# hand tracking pour deux mains
2.png (77.98 Kio) Consulté 3609 fois

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] HandPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        //data = data.Remove(0, 1);

        //data = data.Remove(data.Length-1, 1);
        //print(data);
        string[] points = data.Split(',');
        //print(points[0]);


        for (int i = 21; i<42; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1]) / 100;
            float z = float.Parse(points[i*3 +2]) / 100;

            //print(i);

            HandPoints[i].transform.localPosition = new Vector3(x, y, z);
            

        }


    }
}

errorr:

(1) ArgumentOutOfRangeException : l'index et le nombre doivent faire référence à un emplacement dans la chaîne. Nom du paramètre : count System.String.Remove (System.Int32 startIndex, System.Int32 count) (at <6073cf49ed704e958b8a66d540dea948>:0) HandTracking.Update () (at Assets/HandTracking.cs:20)

(2) IndexOutOfRangeException : l'index était en dehors des limites du tableau. HandTracking1.Update () (dans Assets/HandTracking1.cs:30)





le code UDP RECEIVE
3.png
code UDP pour la communication entre le code cvzone pour la reconnaissance des deux mains
3.png (47.44 Kio) Consulté 3609 fois

Code : Tout sélectionner

using UnityEngine;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class UDPReceive : MonoBehaviour
{

    Thread receiveThread;
    UdpClient client; 
    public int port = 5052;
    public bool startRecieving = true;
    public bool printToConsole = false;
    public string data;


    public void Start()
    {

        receiveThread = new Thread(
            new ThreadStart(ReceiveData));
        receiveThread.IsBackground = true;
        receiveThread.Start();
    }


    // receive thread
    private void ReceiveData()
    {

        client = new UdpClient(port);
        while (startRecieving)
        {

            try
            {
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
                byte[] dataByte = client.Receive(ref anyIP);
                data = Encoding.UTF8.GetString(dataByte);

                if (printToConsole) { print(data); }
            }
            catch (Exception err)
            {
                print(err.ToString());
            }
        }
    }

}


ERROR:


(3) SocketException: Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est habituellement autorisée.
System.Net.Sockets.Socket.Bind (System.Net.EndPoint localEP) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
System.Net.Sockets.UdpClient..ctor (System.Int32 port, System.Net.Sockets.AddressFamily family) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
System.Net.Sockets.UdpClient..ctor (System.Int32 port) (at <6d7c4c8dd3624dc596686fb7270ae1e6>:0)
UDPReceive.ReceiveData () (at Assets/UDPReceive.cs:33)
System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) (at <6073cf49ed704e958b8a66d540dea948>:0)
System.Threading.ThreadHelper.ThreadStart () (at <6073cf49ed704e958b8a66d540dea948>:0)
UnityEngine.<>c:<RegisterUECatcher>b__0_0(Object, UnhandledExceptionEventArgs)

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 20 Oct 2022 13:46
par Max
Bonjour,

la première erreur dans HandTracking.cs est certainement du au fait que 'data' est très certainement une chaine vide, ce qui fait que data.Remove(0,1) te renvoie un ArgumentOutOfRangeException .
A toi de remonter l'info et de déterminer pourquoi data est vide à ce moment là.

PS: poste plutôt ton code directement (en utilisant les balises prévues) et non des screens, c'est plus pratique pour tout le monde. En cas de doute, tu as la procédure ici.

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 21 Oct 2022 09:54
par leslie2017
PREMIER CODE POUR AFFICHAGE D'UNE MAIN

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandTracking : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        string data = udpReceive.data;

        data = data.Remove(0, 1);
        data = data.Remove(1, 1);
        data = data.Remove(data.Length-2, 1);
        data = data.Remove(data.Length-1, 1);
        print(data);
        string[] points = data.Split(',');
        print(points[0]);


        for (int i = 0; i<21; i++)
        {
            float x = 8-float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            handPoints[i].transform.localPosition = new Vector3(x, y, z);

        }


    }
}




ERROR:


ArgumentOutOfRangeException: Index and count must refer to a location within the string.
Parameter name: count
System.String.Remove (System.Int32 startIndex, System.Int32 count) (at <6073cf49ed704e958b8a66d540dea948>:0)
HandTracking.Update () (at Assets/HandTracking.cs:20)

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 21 Oct 2022 10:47
par Max
Bonjour,

comme je te l'ai suggéré plus haut, le soucis est certainement du au fait que 'data' est une chaine vide, ce qui fait que data.Remove(0,1) te renvoie un ArgumentOutOfRangeException .
A toi de remonter l'info et de déterminer pourquoi data est vide à ce moment là.
Tu peux par exemple controler la valeur de data en ajoutant après la ligne string data = udpReceive.data; la ligne Debug.Log("valeur de data: "+data);

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 24 Oct 2022 11:57
par leslie2017
je tiens à rappeler une fois de plus que je suis nouvelle dans tout ce qui est unity et développement C# python etc.....

merci j'ai résolu cette partie mais je rencontre une autre erreur sur unity qui indique le problème vient de la ligne 46

je mets des captures sur ce qui se passe lorsque je run le code sur unity pour que vous voyez ceux à quoi je fais face...
je suis sensé avoir l'affichage de deux mains virtuel mais lorsque je présente les deux mains je reçois cette erreur et une seule main.

besoin d'aide s'il vous plait merci d'avance!!!

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HandTracking1 : MonoBehaviour
{
    // Start is called before the first frame update
    public UDPReceive udpReceive;
    public GameObject[] handPoints;
    void Start()
    {
        
    }

    void Update()
    {
        string data = udpReceive.data;
        print("Here111111 : " + data);

        if(data!=""){
        
    


        data = data.Remove(0, 1);
        data = data.Remove(1, 1);
        data = data.Remove(data.Length-2, 1);
        data = data.Remove(data.Length-1, 1);
        print("data11111 "+ data);
        string[] points = data.Split(',');
        print("Length1111 " + points.Length);
        print("Points1111 " + points[0]);

    

        handPoints=new GameObject[21];

        for (int i = 0; i<42; i++)
        {
            float x = float.Parse(points[i*3])/100;
            float y = float.Parse(points[i*3 +1])/100;
            float z = float.Parse(points[i*3 +2])/100;

            print("Vector3 : ( " + x + " , " + y + " , " + z + " )");

(46)      handPoints[i].transform.localPosition = new Vector3(x, y, z);

        }
            print("HandPoints Size "+ handPoints.Length);

        }
    }



l'erreur que je reçois dans le code est :

NullReferenceException: Object reference not set to an instance of an object
HandTracking1.Update () (at Assets/HandTracking1.cs:46)

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 24 Oct 2022 14:13
par jmhoubre
Bonjour,

quand tu fais

Code : Tout sélectionner

handPoints=new GameObject[21];
Tu crées l'objet handPoints, avec 21 références vides. Pour t'en convaincre, fait juste après :

Code : Tout sélectionner

handPoints=new GameObject[21];
Debug.Log(handPoints[0]):
Dans ta boucle avant la ligne 46, ajoute :

Code : Tout sélectionner

handPoints[i] = new GameObject();
Par ailleurs, sur ton objet Manager, il y a 2 fois le script HandTracking. Ce n'est pas nécessaire.

Enfin, quand on débute l'alpinisme, on ne commence pas par l'Everest. Je te conseille d'aller voir ce post destiné aux débutants. Tu risques de te décourager en attaquant à des sujets qui ne sont pas faits pour toi. Les parcours de formation Unity sont très bien faits (si l'anglais n'est pas un problème pour toi), je les ai faits tous les trois, et j'ai appris beaucoup de choses.

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 24 Oct 2022 15:22
par leslie2017
Merci!
enfaîte je n'ai pas choisi ce projet on me l'a donné pour le stage moi je fais dans le réseau ...
C'est pa première fois de me retrouver dans un stage autre que mon domaine et c'est pas très évident pour moi....

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 24 Oct 2022 16:22
par jmhoubre
Par curiosité, quel est l'endroit ou l'école dans lequel on fixe de tels stages à des débutants ?
As-tu un directeur de stage ? Pourquoi ne t'aide-t-il pas ?

Re: erreur de compilation dans l'unité lorsque je lance mon programme de jumeaux virtuel avec UNITY

Publié : 24 Oct 2022 17:06
par leslie2017
C'est long à expliquer...on e s'y attendait vraiment pas