Integración de OpenCV(envoltura EMGUCV) en Unity
unity3d opencvsharp (1)
Como saben, OpenCV es una biblioteca muy útil que le permite hacer cosas increíbles y poderosas en la visión artificial. Así que pasé un buen momento para descubrir cómo usarlo en Unity3d, tuve muchos problemas y al buscar en la Red, encontré varias sugerencias, pero ninguna me funcionó.
- Estoy usando un Unity Pro 4.0
- Esta versión de Emgu CV (emgucv-windows-universal-gpu 2.4.9.1847)
- Mi objetivo para el proyecto de unidad es: Windows y no web player.
Esto es lo que hice para todos los que quieran usarlo:
- Instale esta versión de EmguCV, que crea una carpeta EMGU en C:
- En esta carpeta tendrá una única carpeta llamada "emgucv-windows-universal-gpu 2.4.9.1847"
- Ir a "carpeta bin"
- Desde la "carpeta bin", debe copiar todas las dlls en la carpeta x86 (22 dlls), y también las de la bin directamente (12 dlls: Emgu.CV, Emgu.CV.UI….). Para el objetivo de X64, puedes intentar lo mismo, creo que esto funcionará tomando los archivos DLL de la carpeta X64.
- Cree una carpeta llamada Complementos, en su proyecto de Unity (Activos-> Complementos)
- Pegue todos estos archivos de 34 dlls en la carpeta de complementos
- De estos 34 archivos dll, copie “npp32_50_35” y “cudart32_50_35” en la carpeta del editor de Unity, en mi caso es “C: / Archivos de programa (x86) / Unity / Editor”
- Usted está hecho para las cosas Dlls.
Así es como se prueba:
Cree un pequeño script que tome un "picture1.jpg" y cambie el color de los primeros 200 píxeles diagonales de color a blanco (255,255,255) y luego guarde el nuevo "picture2.jpg". Esto es lo que debe poner en el script. :
using UnityEngine; using System.Collections; using Emgu.CV; using Emgu.CV.Util; using Emgu.CV.UI; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using System.Runtime.InteropServices; using System; using System.Drawing; Image<Bgr, byte> picture = new Image<Bgr, byte>("C://picture1.jpg"); Bgr myWhiteColor = new Bgr(255, 255, 255); For (int i=0; i<200; i++) {picture[i,i]= color;} picture.Save("C://picture2.jpg");
Al agregar las diferentes dlls en la carpeta de complementos, se hará referencia automáticamente en el Mono Editor, pero probablemente tendrá un problema con la biblioteca "System.Drawing", así que no olvide
using System.Drawing
; y también tienes que referirte yendo a tu editor de script.Si MonoDevelop-Unity, vaya al explorador de soluciones a la izquierda, haga clic con el botón derecho en Refrences-> Editar referencias- y busque system.drawing en la columna de la izquierda y verifíquelo para verlo en la columna de la derecha, luego presione ok
Tampoco olvides cambiar la configuración de compilación en Unity-> file-> build settings de esta manera:
- PC Mac y Linux en lugar de webplayer
- Target = windows
- Arquitectura = x86
- Luego presione el "botón de configuración del reproductor", vaya a "otras configuraciones en la nueva pantalla" y establezca Api Compatibility lavel en .NET 2.0, en lugar de .NET 2.0
Por ahora, eres libre de probar tu script y hacer un trabajo increíble con OpenCV
PD: No estoy seguro de por qué exactamente "npp32_50_35" y "cudart32_50_35" tienen que estar en la carpeta Editor, pero es la única situación que funcionó para mí.