【问题标题】:How to change logitech c920 webcam settings using c++ on osx?如何在 osx 上使用 c++ 更改罗技 c920 网络摄像头设置?
【发布时间】:2013-11-15 10:55:31
【问题描述】:

我正在尝试使用 OpenFrameworks(一个 c++ 框架)控制网络摄像头的自动对焦/自动白平衡设置,但没有任何运气。

该框架提供了一个 QTKit 视频采集器,但我无法使用这些设置。 调用时有一个 videoSettings() 函数,我收到一个警告,提到该项目必须使用 10.6 sdk 编译,并且在使用 10.7+ 编译应用程序时不受支持

我在 osx 10.9 上使用 openFrameworks 0.8.0 并没有找到下载 10.6 sdk 的简单方法(没有直接下载(旧版本的 xcode 和 sdk 下载选项),我已经下载了 Xcode 4.1但由于 osx 10.9 无法安装)。

我也尝试设置 GStreamer 抓取器,但出现链接错误:

Undefined symbols for architecture i386:
  "ofGstVideoGrabber::ofGstVideoGrabber()", referenced from:
      testApp::setup() in testApp.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

不过,我认为 GStreamer 框架中的 dylib 也可用于 i386:

file /Library/Frameworks/GStreamer.framework/Headers /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib 
/Library/Frameworks/GStreamer.framework/Headers:                                 directory
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib: Mach-O universal binary with 2 architectures
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib (for architecture x86_64):  Mach-O 64-bit dynamically linked shared library x86_64
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib (for architecture i386):    Mach-O dynamically linked shared library i386

我尝试将框架拖到 3rd 方框架文件夹中,并将路径添加到 Xcode 中的 Header Search Paths 和 Library Search Paths 但没有任何乐趣。

我尝试过使用 ofQuickTimeGrabber,但出现解析错误:

Unknown type name 'ofQuickTimeGrabber'

尝试ofxUVC 使用ofxQTKitGrabber 但再次遇到错误:

Field type 'ofxQTKitVideoGrabber' is an abstract class

理想情况下,我想控制 c920 网络摄像头的分辨率(16:9 格式似乎有点变形/缩放)和自动对焦。 我在 osx 10.9 上的设置有可能吗?如果有,怎么做?

【问题讨论】:

    标签: c++ macos webcam osx-mavericks openframeworks


    【解决方案1】:

    如果您从 Apple 开发人员网站 (https://developer.apple.com/downloads/) 下载旧版本的 XCode(最后一个版本为 3 或 4,具体取决于您是否需要 10.6 或 10.7 SDK),它将包含 10.6 和/或 10.7 SDK (包装内)。

    您可以在不安装完整软件包的情况下提取 SDK(在 10.9 上将不允许这样做)。有几种方法可以做到这一点,但我发现最简单的方法是使用 Pacifist http://www.charlessoft.com/

    然后将这两个 sdk 放在 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs 文件夹中的 XCode 5 SDKs 文件夹中,并与 XCode 5 一起使用。

    然后重启 XCode 并在构建设置中选择 10.6 或 10.7 SDK。请记住更改您的项目和 openFrameworksLib 项目的 SDK。

    此外,为确保正确的纵横比,请确保您使用特定尺寸初始化您的相机(例如 grabber.initGrabber(1280, 720);,如果您尝试从相机获得 16:9 的纵横比。默认情况下,您无法保证获得相机的“最佳”原始分辨率。

    出于文档目的,以下是当前获取 ofxUVC 控制罗技 c920 摄像头所需的步骤:

    1. 将 ofxUVC 和 ofxYAML 添加到 openframeworks 插件文件夹
    2. 在 UVCCameraControl.h 中将 UVC_PROCESSING_UNIT 设置为 3 (#define UVC_PROCESSING_UNIT_ID 0x03)
    3. 在 UVCCameraControl.m 的 setDatagetData 中修改 wIndex 以使用选择器而不是 unitID (controlRequest.wValue = (selector << 8) | interfaceNum;)
    4. 更新 .yaml 文件中的摄像头定义

    罗技 c920 定义:

    - name: Logitech Camera
      vendorId : 0x046d
      productId: 0x82d
      interfaceNum: 0x03
      # 1280x720 (this is 1/2 res)
      width: 1280
      height: 720
    

    注意,在这种情况下,Logitech Camera 是 ofQTKitVideoGrabber 列出的 id 并且 yaml 文件顶部的 cameraToUse 设置为 6(c920 的基于 yaml 0 的索引)。

    这已在 osx 10.7、10.8 和 10.9 上成功测试

    【讨论】:

    • 感谢您的建议。我终于设法用 10.6 sdk 编译了项目。不幸的是,没有自动对焦/自动白平衡设置。看来我需要弄清楚如何让 ofxUVC 工作
    • 很高兴它成功了。许多这些专门的功能(尤其是那些像 IIDC/DCAM 这样没有标准化的功能)很难/不可能从标准驱动程序中访问。我敢打赌 ofxUVC 会起作用的。此外,如果您有兴趣在 OS X 上安装 GStreamer 并使用 openFrameworks 工作,请查看:github.com/arturoc/ofxGstRTP(查看 readme.md)。祝你好运!
    • 不幸的是,我仍然没有设法让 ofxUVC 工作(由于 ofxQTKitVideoGrabber 导致Field type 'ofxQTKitVideoGrabber' is an abstract class 错误)。关于我如何运行的任何提示?谢谢!
    • 我刚刚在github.com/bakercp/ofxUVC 更新了插件。它现在可以使用新版本的 openFrameworks 为我编译。看看吧。
    • 您好,非常感谢您!我终于设法从你的叉子中使用了 ofxUVC。仍在尝试更改设置,但应用程序因以下输出而挂起:...
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多