Puede hacerlo utilizando la API genIcam. genIcam es una interfaz genérica para cámaras (USB, GigE, CameraLink, etc.). Se compone de varios módulos, pero lo que más le preocupa es GenTL (capa de transporte). Puede leer más en la documentación de GenTL HERE. Para facilitar el proceso, recomiendo usar la API de Basler o la API de Baumer, que son consumidores de GenTL (los productores y los consumidores se describen en la documentación de GenTL). Usé la API de Baumer, pero ambas funcionarán.
NOTA: Estoy usando una cámara mono Baumer HXG20.
COSAS Para descargar e instalar
- Visual Eddition Estudios Comunidad (utilicé 2015 LINK)
- Baumer GAPI SDK, LINK
- OPENCV (aquí es un tutorial de youtube para construir OPENCV 3 para C++) HERE
TEST CAMER A CON EXPLORADOR DE CÁMARA
Es una buena idea comprobar que la tarjeta de interfaz de red (NIC) y la cámara GigE funcionan y funcionan con la cámara utilizando el programa Camera Explorer. Es posible que deba habilitar Jumbo Packets en su NIC. También puede configurar la IP de la cámara usando el programa IPconfig. Utilizo la configuración de DHCP pero también puede usar una IP estática para su cámara y NIC.
CONFIGURACIÓN ESTUDIOS VISUALES
Los pasos para configurar las variables de entorno del sistema y la configuración de los estudios visuales están descritas en la Baumer GAPI guía programadores SDK (capítulo 4), que se encuentra en el siguiente directorio
C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide
Compruebe que ha recibido la siguiente variable de sistema (si se utiliza la versión de 64 bits), o crear la variable si es necesario (re fer a la sección 4.3.1 en la guía del programador).
- name =
GENICAM_GENTL64_PATH
- valor =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64\
en los estudios de visual, cree un proyecto nuevo C++ y actualizar las siguientes propiedades (se refieren a la sección 4.4.1 en la guía del programador).
- C/C++> General> adicional Introducir Directorios =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Inc
- Enlazador> General> Directorios de biblioteca adicionales =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Lib\x64
- Linker> Entrada> Dependencias adicionales =
bgapi2_genicam.lib
- Eventos de generación> posterior a la generación de eventos > línea de comandos =
copy "C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64"\*.* .\
crear un archivo .CPP PARA MOSTRAR flujo de imagen en una ventana OPENCV
La forma más sencilla de empezar es utilizar uno de los códigos de ejemplo proporcionados en el Baumer GAPI SDK y modificarlo para agregar la funcionalidad OPENCV.El código de ejemplo para utilizar es 005_PixelTransformation, que se encuentra aquí
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation
Copiar y pegar este archivo .cpp en el directorio fuente del proyecto y asegúrese de que se puede construir y compilar. Debe capturar 8 imágenes e imprimir los primeros 6 valores de píxel de las primeras 6 líneas para cada imagen.
Añadir estas declaraciones #include
al archivo de origen .cpp:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\video\video.hpp>
Añadir estas declaraciones de variables al comienzo de la función main()
// OPENCV VARIABLE DECLARATIONS
cv::VideoWriter cvVideoCreator; // Create OpenCV video creator
cv::Mat openCvImage; // create an OpenCV image
cv::String videoFileName = "openCvVideo.avi"; // Define video filename
cv::Size frameSize = cv::Size(2048, 1088); // Define video frame size (frame width x height)
cvVideoCreator.open(videoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, frameSize, true); // set the codec type and frame rate
En el archivo original 005_PixelTransformation.cpp, la línea 569 tiene un bucle for
que recorre más de 8 imágenes, que dice for(int i = 0; i < 8; i++)
. Queremos cambiar esto para que se ejecute continuamente. Hice esto cambiándola a un bucle while
que dice
while (pDataStream->GetIsGrabbing())
Dentro de nuestro nuevo bucle while
, hay una declaración if
que comprueba si el formato de píxel es el 'Mono' (escala de grises) o color. En el archivo original, comienza en la línea 619 y finaliza en 692. Inmediatamente después de cerrar if
y else
llaves de declaración, y antes de la instrucción pImage->Release();
, necesitamos agregar la parte openCV para mostrar las imágenes en una ventana. Añadir las siguientes líneas de código
} // This is the closing brace for the 'else color' statement
// OPEN CV STUFF
openCvImage = cv::Mat(pTransformImage->GetHeight(), pTransformImage->GetWidth(), CV_8U, (int *)pTransformImage->GetBuffer());
// create OpenCV window ----
cv::namedWindow("OpenCV window: Cam", CV_WINDOW_NORMAL);
//display the current image in the window ----
cv::imshow("OpenCV window : Cam", openCvImage);
cv::waitKey(1);
Una cosa a tener en cuenta es el formato de píxel del objeto openCvImage
. Mi cámara es mono de 8 bits, por lo que debo especificar CV_8U
. Si su cámara es de píxeles RGB o de 10 bits, debe proporcionar el formato correcto (consulte la documentación de openCV HERE).
puede consultar los otros ejemplos para ajustar los parámetros de la cámara.
ahora una vez que compile y compile, ¡debe tener abierta una ventana openCV que muestre las imágenes de la cámara!
SUBE PARA MÁS VOTO PERSONAS !!!! (Esto tomó mucho tiempo para conseguir trabajo por lo me enganche !!!)
posible duplicado de [OpenCV con cámaras de red] (http://stackoverflow.com/questions/712998/opencv-with-network-cameras) – karlphillip
Es también un posible duplicado de [OpenCV con GigE Vision Cámaras] (http://stackoverflow.com/questions/3345467/opencv-with-gige-vision-cameras). – karlphillip
Gracias, noté tus comentarios después de publicar la actualización. Veré los enlaces. – gpuguy