Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

890
Visualizações
Unidad + OpenCV + Python (integración)

es necesario combinar Unity3d y OpenCV (preferiblemente con NumPy, ya que las funciones también se utilizarán desde allí, lo que significa que también se necesita +Python). La idea principal es pasar imágenes de la cámara de Unity a OpenCV para su procesamiento y luego enviar acciones a Unity.

Probé muchas variantes, hechas tomando un flujo de bytes de imagen de RenderTexture (Unity) y enviándolo al servidor de python en websockets. Todo funciona, y la velocidad de transferencia es aceptable, pero durante el "fotografiado" de la textura se consumen muchos recursos y se cuelga el hilo principal de Unity... así que obtengo 5 fps, lo cual no es bueno. Quiero reescribirlo de la manera correcta: integre openCV en la unidad o extraiga la textura de la memoria de video (pero eso es horrible C ++ y openGL, quiero obtener python, porque necesito numPy).

Intenté transmitir con FMETP STREAM (no ha iniciado el front-end, lo que significa que funciona, pero la imagen no se muestra en el navegador), luego puse IronPython openCV y los usé en C # (no puedo instalar opencv de ninguna manera), probé para poner módulos para C #: OpenCVSharp (parece estar bien con este paquete), NumSharp (carece de algunos métodos para usar en el proyecto) y el método de transferencia de imagen de socket (funciona, pero terriblemente largo y con retrasos). .. en cada variante probé y estudié casi todo a fondo.

En realidad, quería pedir un consejo, ¿qué integración es mejor elegir, cómo hacerlo mejor?

Código que uso para enviar bytes de imágenes al servidor de Python: https://pastebin.com/pRyutRcj

 WebSocket ws; void Start () { ws = WebSocketFactory.CreateInstance("ws://localhost:12345"); // ... // Connect to the server ws.Connect(); InvokeRepeating("Capture", 1f, 0.2f); //1s delay, repeat every 1s } public void Capture() { RenderTexture activeRenderTexture = RenderTexture.active; RenderTexture.active = Camera.targetTexture; Camera.Render(); Texture2D image = new Texture2D(Camera.targetTexture.width, Camera.targetTexture.height); image.ReadPixels(new Rect(0, 0, Camera.targetTexture.width, Camera.targetTexture.height), 0, 0); image.Apply(); RenderTexture.active = activeRenderTexture; byte[] bytes = image.EncodeToPNG(); Destroy(image); ws.Send(bytes); }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Su solución original está ejecutando todo en su hilo principal en la unidad. Por lo tanto, se retrasará como se esperaba. Y está codificando como PNG, los datos serán enormes.

En FMETP STREAM , usaron un codificador de subprocesos múltiples, que al menos debería resolver su problema de rendimiento. Es por eso que puede funcionar sin problemas en dispositivos de gama baja y auriculares VR.

El byte de salida [] son fragmentos de jpeg, en lugar de una imagen. Fue diseñado para el límite de tamaño de paquete UDP.

Si intenta decodificar la imagen de FMETP STREAM por su cuenta, debe combinar esos bytes[] en un jpeg completo. No será demasiado difícil referirse a su decodificador en C#.

PD: Para obtener soporte técnico, comuníquese directamente con el desarrollador.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda