【问题标题】:Accessing iSight programmatically?以编程方式访问 iSight?
【发布时间】:2010-09-05 18:09:15
【问题描述】:

是否可以通过编程方式访问 macbook 上的 iSight 摄像头?我的意思是我希望能够根据命令从 iSight 相机中抓取静止帧,然后对它们进行处理。如果是这样,它是否只能使用目标 c 访问,或者也可以使用其他语言?

【问题讨论】:

    标签: objective-c macos webcam isight


    【解决方案1】:

    我这里没有 Mac,但这里有一些文档:

    http://developer.apple.com/documentation/Hardware/Conceptual/iSightProgGuide/01introduction/chapter_1_section_1.html

    看来您必须通过 QuickTime API。根据this thread,应该有一个名为“MungGrab”的示例项目值得一看。

    【讨论】:

    • 嗨...我找不到您建议的 developer.apple.com 链接的页面...您可以更新它吗?
    • 此链接仍然出现 404 错误。您能否更新链接或更好地改进答案,使其不依赖链接。
    【解决方案2】:

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

    Quartz Composer 可能是访问它的最简单方法,并且 .quartz 文件可以很容易地嵌入到应用程序中(并将数据通过管道输出到 ObjC 等)

    另外,我想 /Developer/Examples/ 中应该有一两个这样的例子

    【讨论】:

      【解决方案3】:

      有一个名为@987654321@ 的命令行实用程序或多或少可以执行您想要执行的操作。您可能可以从开发人员那里获得代码(他的电子邮件地址在您下载实用程序时获得的自述文件中)。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果您浏览 Apple 的邮件列表,您也可以找到一些 Java 代码。 Here's a simple example suitable for capturing individual frameshere's a more complicated one that's fast enough to display live video

          【讨论】:

            【解决方案6】:

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

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

            谷歌搜索还提出了another question on stackoverflow,似乎可以解决这个问题。

            【讨论】:

              【解决方案7】:

              从专门要求解决方案为 pythonic 的相关问题中,您应该尝试来自 Andrew Straw 的 motmot's camiface 库。它也适用于火线相机,但也适用于 isight,这正是您所寻找的。​​p>

              来自教程:

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

              【讨论】:

                猜你喜欢
                • 2012-05-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-03
                • 2012-12-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多