以编程方式访问iSight?

7

是否可以通过编程方式访问Macbook上的iSight相机?我的意思是,我想能够在命令下捕获iSight相机的静态帧,然后对其进行操作。如果可以,那么它只能使用Objective-C访问,还是其他语言也可以使用?

7个回答

9
你应该查看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

4

2
嗨...你建议的developer.apple.com链接显示页面未找到...你能更新一下吗? - Devarshi
1
这个链接仍然显示404错误。你能否更新链接,或者更好的是改进答案,使其不依赖于链接。 - ChrisF

2
如果您在苹果的邮件列表中搜索,您也可以找到一些用Java实现的代码。这里有一个简单的示例,适用于捕获单个帧,以及一个更复杂的示例,足以显示实时视频。 这是一个简单的示例这是一个更复杂的示例,但足够快速地显示实时视频。请注意保留HTML标签。

1
到目前为止,还有一件事情没有提到,那就是IKPictureTaker,它是Image Kit的一部分。 这将呈现出标准的操作系统提供的拍照面板,包括所有可能的过滤功能等。 我不确定这是否符合您的要求。
我想你也可以从其他语言中使用它,考虑到有类似Cocoa Bridges的东西,但我对它们没有任何经验。
搜索还找到了stackoverflow上的另一个问题,似乎解决了这个问题。

1

有一个命令行实用程序叫做isightcapture,它可以完成你想要做的事情。你可能可以从开发者那里获取代码(他的电子邮件地址在你下载实用程序时得到的自述文件中)。


0

从一个相关的问题中,特别要求解决方案是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,)

0

除了ObjC,您还可以使用PyObjC或RubyCocoa绑定来访问它。如果您不介意使用哪种语言,我建议使用Ruby,因为PyObjC的文档非常糟糕(即使官方的苹果页面也是指旧版本,而不是随OS X Leopard一起发布的版本)

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

此外,我想在/Developer/Examples/中应该有一个或两个示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接