以编程方式访问iSight?

时间:2020-03-05 18:39:13  来源:igfitidea点击:

是否可以以编程方式访问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,)