以编程方式访问iSight?
是否可以以编程方式访问Macbook上的iSight摄像机?我的意思是说,我希望能够仅从iSight摄像机上抓取静止帧,然后对它们进行一些处理。如果是这样,是否只能使用目标c进行访问,还是可以使用其他语言?
解决方案
回答
我这里没有Mac,但是这里有一些文档:
http://developer.apple.com/documentation/硬件/Conceptual/iSightProgGuide/01introduction/chapter_1_section_1.html
看来我们必须通过QuickTime API。应该有一个名为" MungGrab"的示例项目,根据该主题可能值得一看。
回答
除了ObjC,我们还可以使用PyObjC或者RubyCocoa绑定来访问它。如果我们对哪种语言不满意,我会说使用Ruby,因为PyObjC的记录非常糟糕(即使Apple的官方页面也使用旧版本,而不是OS X Leopard随附的版本)。
Quartz Composer可能是最简单的访问方式,.quartz文件可以很容易地嵌入到应用程序中(数据通过管道传输到ObjC等)
另外,我想在/ Developer / Examples /中应该有一个或者两个这样的例子
回答
有一个名为" isightcapture"的命令行实用程序,它或者多或者少地完成了我们想做的事情。我们可能可以从开发人员那里获取代码(他的电子邮件地址在我们下载实用程序时所获得的自述文件中)。
回答
我们应该查看QTKit Capture文档。
在Leopard上,我们可以通过RubyCocoa桥获得所有信息:
require 'osx/cocoa' OSX.require_framework("/System/Library/Frameworks/QTKit.framework") OSX::QTCaptureDevice.inputDevices.each do |device| puts device.localizedDisplayName end
回答
如果我们在Apple的邮件列表中打听一下,我们也可以找到一些用Java编写的代码。这是一个适合捕获单个帧的简单示例,而这是一个更复杂的示例,其速度足以显示实况视频。
回答
到目前为止尚未提及的一件事是IKPictureTaker,它是Image Kit的一部分。这将与提供的标准OS面板一起拍摄,但是包括所有可能的滤镜功能等。我不确定这是否是我们想要的。
考虑到存在诸如可可桥之类的东西,我想我们也可以从其他语言中使用它,但是我对它们没有经验。
Googling还提出了另一个关于stackoverflow的问题,似乎可以解决此问题。
回答
从一个专门要求解决方案是pythonic的相关问题开始,我们应该尝试使用Andrew Straw的motmot的camiface库。它也可以与火线相机一起使用,但也可以与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,)