Cámara uEye con python en Windows
Necesito conseguir unCámara uEye trabajando conpitón en Windows para tomar fotos y operar en la transmisión en vivo.
Como las cámaras uEye son cámaras industriales muy extendidas, habría pensado que existe una solución estándar para esto; Sin embargo, no pude encontrar ninguno. La solución debe ejecutarse en Python 2.7 en Windows XP o Windows 7.
Agradecería a cualquiera que haya utilizado con éxito una cámara uEye en Python en Windows para compartir sus conocimientos sobre este tema o al menos señalarme en la dirección correcta. También siento que realmente es necesario encontrar una solución genérica, ya que no soy el único con este requisito.
Lo que he probado hasta ahora
(a) pyueyeHay uncontrolador de Python disponible que funciona en Linux y, según la documentación, "debería funcionar en Windows".
Lo intenté pero la instalación falló:python setup.py install
me da
ueye\ueye.pyx: cannot find cimported module 'stdlib'
ueye\ueye.pyx: cannot find cimported module 'python_cobject'
Compiling ueye\ueye.pyx because it changed.
Compiling ueye\ueyeh.pyx because it changed.
[1/2] Cythonizing ueye\ueye.pyx
No tengo idea de quecimported
módulos son y si esto debería funcionar en absoluto. Por lo tanto, sería bueno saber si alguien ha instalado correctamente este controlador en un sistema Windows.
OpenCV parece ser algún tipo de estándar para la captura y el procesamiento de imágenes. Parece que algunas personas lo han usado para acceder a una cámara uEye, mientras que también parece haber cierto consenso de que las cámaras uEye no funcionan con openCV. No he encontrado ningún código de ejemplo que funcione.
De todos modos probé esto (usando openCV versión 2.4.13) y puedo acceder a la cámara y recuperar una imagen de ella. La resolución inicialmente es480 x 640
, pero puedo cambiarlo a la resolución del sensor de768 x 1024
. Sin embargo, no puedo configurar el tiempo de exposición y la ganancia correctamente, como se puede ver en el siguiente código que utilicé.
cam = cv2.VideoCapture(0)
width = cam.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
height = cam.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
exposure = cam.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
print width, height, exposure # prints 640 480 -4.0
hr = cam.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 768)
wr = cam.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1024)
print "Setting resolution ", hr, wr # prints True True
cam.set(cv2.cv.CV_CAP_PROP_EXPOSURE, 0) # or any other value, same for gain
width = cam.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
height = cam.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
exposure = cam.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
print width, height, exposure # 1024.0 768.0 -4.0
ret, buff = cam.read()
cam.release()
Bien puede ser que la cámara esté en algún tipo deModo automático que ajusta automáticamente los parámetros comotiempo de exposición yganancia. Pero si este es el caso, ¿cómo establecería esto?Modo automático apagado.
(c) simpleCVsimpleCV parece ser una alternativa a openCV. También probé eso y da el problema de buscar solo un480 x 640
imagen de píxel y no pude encontrar ninguna manera de configurarlo de manera diferente, ni una forma de configurar el tiempo de exposición.
from SimpleCV import Camera
cam = Camera(0)
img = cam.getImage() # img is a 480 x 640 pixel image
(d) Escribir su propio controlador en CUna opción podría ser escribir un código C para acceder a la cámara a través de su SDK. Una completadocumentación del SDK está disponible y parece que alguien lo ha hecho con éxito (aquíoaquí) pero ni siquiera sabría por dónde empezar y cómo llevar la imagen en vivo a Python.