是否可以通过编程方式访问Macbook上的iSight相机?我的意思是,我想能够在命令下捕获iSight相机的静态帧,然后对其进行操作。如果可以,那么它只能使用Objective-C访问,还是其他语言也可以使用?
是否可以通过编程方式访问Macbook上的iSight相机?我的意思是,我想能够在命令下捕获iSight相机的静态帧,然后对其进行操作。如果可以,那么它只能使用Objective-C访问,还是其他语言也可以使用?
require 'osx/cocoa'
OSX.require_framework("/System/Library/Frameworks/QTKit.framework")
OSX::QTCaptureDevice.inputDevices.each do |device|
puts device.localizedDisplayName
end
我这里没有 Mac,但是这里有一些文档:
看起来您需要通过QuickTime API进行操作。根据this thread中的说法,有一个名为"MungGrab"的示例项目可能值得一看。
从一个相关的问题中,特别要求解决方案是Pythonic的,你应该尝试一下Andrew Straw的motmot's camiface库。它不仅适用于Firewire相机,也适用于iSight,这正是你所需要的。
从教程中可以看到:
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,)
除了ObjC,您还可以使用PyObjC或RubyCocoa绑定来访问它。如果您不介意使用哪种语言,我建议使用Ruby,因为PyObjC的文档非常糟糕(即使官方的苹果页面也是指旧版本,而不是随OS X Leopard一起发布的版本)
Quartz Composer可能是访问它最简单的方法,.quartz文件可以很容易地嵌入应用程序中(并将数据传输到ObjC或类似的语言)
此外,我想在/Developer/Examples/中应该有一个或两个示例。