2008-09-11 4 views

Respuesta

7

El marco de ImageKit en Leopard tiene una clase IKPictureTaker que le permitirá ejecutar la hoja o panel de toma de imágenes estándar que ha visto en iChat y otras aplicaciones.

Si no desea utilizar la interfaz estándar de panel/hoja de captura de imágenes, puede utilizar la funcionalidad QTKit Capture para obtener una imagen de iSight.

Ambos requieren escribir algún código de Cocoa en Objective-C, pero eso no debería ser un obstáculo en estos días.

+0

Estaré encantado de ver algún código de ejemplo si alguien logra eso. ¿Tal vez directamente a través de ctypes? – meduz

1

Hay una utilidad llamada isightcapture que se ejecuta desde la línea de comandos de Unix que toma una imagen de la cámara de isight y la guarda.

Puede echarle un vistazo en este sitio web: http://www.macupdate.com/info.php/id/18598

Un ejemplo del uso de este con AppleScript es:

aplicación Tell "Terminal" hacer guión "/ Aplicaciones/myimage.jpg isightcapture" end tell

2

Si desea manipular la cámara directamente desde su código, debe utilizar las API de QuickTime Capture o el contenedor Cocoa QTKit Capture (mucho mejor).

La única advertencia es: si usa un QTCaptureDecompressedVideoOutput, recuerde que las devoluciones de llamada no se realizan en el hilo principal, sino en el hilo de captura administrado QuickTIme. Utilice [someObject performSelectorOnMainThread: ... withObject: ... waitUntilDone: NO] para enviar mensajes a un objeto en el hilo principal.

1

Desde una pregunta relacionada que pidió específicamente que la solución sea Pythonic, usted debe darle una oportunidad a motmot's camiface biblioteca de Andrew paja. También funciona con cámaras firewire, pero también funciona con isight, que es lo que estás buscando.

Desde el tutorial:

import motmot.cam_iface.cam_iface_ctypes as cam_iface 
import numpy as np 

mode_num = 0 
device_num = 0 
num_buffers = 32 

cam = cam_iface.Camera(device_num,num_buffers,mode_num) 
cam.start_camera() 
frame = np.asarray(cam.grab_next_frame_blocking()) 
print 'grabbed frame with shape %s'%(frame.shape,) 

Se utiliza en este sample neuroscience demo

0

Otra solución es OpenCV+python con una secuencia de comandos como:

import cv 
capture = cv.CaptureFromCAM(0) 
img = cv.QueryFrame(capture) 

No se puede hacer nada más sencillo!

Cuestiones relacionadas