Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

879
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!