是否可以通过编程方式访问 macbook 上的 iSight 摄像头?我的意思是我希望能够根据命令从 iSight 相机中抓取静止帧,然后对它们进行处理。如果是这样,它是否只能使用目标 c 访问,或者也可以使用其他语言?
7 回答
您应该查看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
我这里没有 Mac,但这里有一些文档:
看起来您必须通过 QuickTime API。应该有一个名为“MungGrab”的示例项目,根据这个线程可能值得一看。
如果您浏览 Apple 的邮件列表,您也可以找到一些用 Java 编写的代码。这是一个适合捕获单个帧的简单示例,这是一个更复杂的示例,它的速度足以显示实时视频。
到目前为止还没有提到的一件事是IKPictureTaker,它是 Image Kit 的一部分。这将提供标准操作系统提供的面板来拍照,包括所有可能的过滤器功能等。我不确定这是否是你想要的。
我想你也可以从其他语言中使用它,考虑到有可可桥之类的东西,但我没有使用它们的经验。
谷歌搜索还提出了另一个关于 stackoverflow的问题,似乎解决了这个问题。
There's a command line utility called isightcapture
that does more or less what you want to do. You could probably get the code from the developer (his e-mail address is in the readme you get when you download the utility).
除了 ObjC,您还可以使用 PyObjC 或 RubyCocoa 绑定来访问它。如果您对哪种语言不挑剔,我会说使用 Ruby,因为 PyObjC 的文档记录非常糟糕(甚至 Apple 官方页面也指的是旧版本,而不是 OS X Leopard 附带的版本)
Quartz Composer 可能是访问它的最简单方法,并且 .quartz 文件可以很容易地嵌入到应用程序中(并且数据通过管道输出到 ObjC 等)
另外,我想 /Developer/Examples/ 中应该有一个或两个这样的例子
从专门要求解决方案为 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,)