2008-08-12 216 views
7

是否有可能以编程方式访问macbook上的iSight摄像头?通过这个我的意思是我希望能够通过命令从iSight摄像头抓取静止帧,然后对它们进行一些操作。如果是这样,它只能使用目标c访问,还是可以使用其他语言?以编程方式访问iSight?

回答

0

除了ObjC,您还可以使用PyObjC或RubyCocoa绑定来访问它。如果您对哪种语言没有挑剔,那么我会说使用Ruby,因为PyObjC的文档记录极其糟糕(即使官方的Apple页面是指旧版本,而不是OS X Leopard附带的版本)

Quartz Composer可能是访问它的最简单方法,.quartz文件可以很容易地嵌入到应用程序中(并将数据传送到ObjC或其他)

另外,我想应该有一个或两个这在/开发人员/示例/

1

有一个名为isightcapture命令行实用程序,或多或少做你想做的事情。您可能可以从开发人员处获得代码(他的电子邮件地址位于您下载实用程序时获得的自述文件中)。

9

你应该看看QTKit Capture documentation

在Leopard中,您可以通过RubyCocoa桥梁在这一切得到:

require 'osx/cocoa' 
OSX.require_framework("/System/Library/Frameworks/QTKit.framework") 

OSX::QTCaptureDevice.inputDevices.each do |device| 
    puts device.localizedDisplayName 
end 
1

目前尚未提及的一件事是IKPictureTaker,它是Image Kit的一部分。这将提供标准的操作系统提供的面板来拍照,尽可能包含所有可能的过滤功能。我不确定这是你想要的。

我想你也可以从其他语言中使用它,考虑到有像cocoa bridges这样的东西,但我没有经验。

谷歌搜索也想出了another question on stackoverflow似乎解决了这个问题。

0

从一个相关的问题,具体要求解决方案pythonic,你应该尝试从安德鲁稻草motmot's camiface库。它也适用于火线照相机,但它也适用于瞄准器,这正是您所需要的。

从教程:

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,)