Libreria Open Computer Vision (openCV) como usarla?

Iniciado por **Aincrad**, 23 Septiembre 2017, 19:42 PM

0 Miembros y 2 Visitantes están viendo este tema.

**Aincrad**

hola , hoy encontré una librería para vb.net  muy interesante , la cual puede reconocer visualmente objetos , personas , etc.  como snapchat.

hay alguien el el foro que pueda  ayudarme a implementar esta librería en un programa en vb.net 2008 y que use la webcam.

apreciaría si me comenten algún code implementando esta lbreria.  :-*




Eleкtro

#1
Hola.

OpenCV no es una librería desarrollada en .NET, es una librería "nativa" desarrollada en C/C++. Si quieres usarla en la plataforma .NET entonces tienes que desarrollar una clase que sirva como wrapper de las funciones exportadas en la librería, esto lo harías mediante P/Invokes (Platform Invocation), así como también debes declarar una equivalencia a las enumeraciones y estructuras y demás miembros públicos necesarios que estén definidos en dicha librería.

Ejemplo:

Código (vbnet) [Seleccionar]
Imports System.Runtime.InteropServices
Imports System.Security

Namespace OpenCV.Interop

   <SuppressUnmanagedCodeSecurity>
   Friend NotInheritable Class NativeMethods

       Private Sub New()
       End Sub

       <DllImport("OpenCV.dll", EntryPoint:="Nombre de la función", CharSet:=CharSet.Unicode)>
       Friend Shared Function NombreAMostrarDeLaFunción(
               <[In]> <MarshalAs(UnmanagedType.LPWStr)> ByVal param1 As String,
                   <[In]> <MarshalAs(UnmanagedType.I4)> ByVal param2 As Integer,
                   <[In]> <MarshalAs(UnmanagedType.I4)> ByVal param3 As NombreDeLaEnumeración,
                <Out> <MarshalAs(UnmanagedType.Struct)> ByRef param4 As NombreDeLaEstructura
       ) As <MarshalAs(UnmanagedType.Bool)> Boolean
       End Function

       Friend Enum NombreDeLaEnumeración As Integer
           Name1 = &H1
           Name2 = &H2
       End Enum

       <StructLayout(LayoutKind.Sequential)>
       Friend Structure NombreDeLaEstructura
           <MarshalAs(UnmanagedType.SysInt)>
           Friend Field1 As IntPtr
           <MarshalAs(UnmanagedType.U4)>
           Friend Field2 As UInteger
       End Structure

   End Class

End Namespace

...Debes hacer más o menos eso por cada una de las funciones de OpenCV que quieras utilizar en tu aplicación.

Analizar la firma de cada función o export dentro de una librería y escribir su wrapper equivalente con los tipos de .NET es algo que requiere tiempo aparte de un mínimo de conocimiento en código no administrado, no esperes que alguien lo vaya a hacer por ti... más cuando se trata de una librería de tal magnitud con cientos o miles de miembros diferentes, es una locura.

Por suerte para ti y para cualquiera que desee usar OpenCV en .NET, ya existe gente que ha dedicado su tiempo en desarrollar wrappers de OvenCV para .NET que puedes descargar aquí:

Y por último, te hago saber que para .NET existe AForge, una alternativa a OpenCV completamente administrada, con documentación XML de .NET, y gratuita:

Saludos.








tincopasan

Gracias por el dato Elektro uso opencv en python y no conocia la alternativa para .net

Eleкtro

#3
Cita de: tincopasan en 24 Septiembre 2017, 09:21 AM
Gracias por el dato Elektro uso opencv en python y no conocia la alternativa para .net

Pues ahora me entero que también programas en .NET :P, a ver si te vemos pronto ayudando a usuarios necesitados por este subforo.

Por si os sirve a los dos: según todo lo que leí, parece ser que Emgu CV es el wrapper más popular, actualizado y estable, y dispone de buena documentación XML:

Y varios samples para C# y VB.NET:

Saludos.








**Aincrad**

Gracias de nuevo Elecktro , el Emgu CV se ve mejor voy a empezar a trabajar en ello .  ;-)