zoukankan      html  css  js  c++  java
  • 在linux下使用 Fitilink 3D Webcam (18e3:5031)

    淘宝上买了个FITI的双目摄像头:

    https://item.taobao.com/item.htm?spm=a1z09.2.0.0.2dee37fcJE5aBt&id=531622105019&_u=11hcu395a1f

    但是linux上使用v4l2只能控制该摄像头显示一个摄像头的数据,谷歌查一圈发现有人hack了一下,原作在此:

    https://www.jianshu.com/p/2ce302d588a0

    按这篇文章所说,控制该摄像头输出双目数据需要使用UVC_SET_CUR,但v4l2似乎并不直接支持这个命令,所以需要使用v4l2之外的工具进行配置。

    该文章在python中使用了usb.core直接向usb设备发送命令,但这种方式需要root权限,而且想成功运行起来也需要解决一些其它问题,为了方便在程序中使用该摄像头,我们需要找到一种在用户态使用UVC_SET_CUR命令的方式

    谷歌了一下,发现uvcdynctrl可以在用户态下使用该控制方式

    首先安装uvcdynctrl

    ubuntu下就是sudo apt install uvcdynctrl

    安装成功后可以在bash下运行命令:uvcdynctrl -d /dev/video1 -S 6:10 '(LE)0x0400'来控制该摄像头显示双摄像头数据

    为了在代码中读取摄像头内容,我们需要在代码中运行该命令

    #!/usr/bin/env python
    
    import cv2
    import os
    
    def __main():
        oldKeyV = 0
        running = True
        cam=cv2.VideoCapture(1)
        
        videoUxCmdPat = "uvcdynctrl -d /dev/video1 -S 6:10 '(LE)0x{:{fill}2x}00'"
        
        vuxCmd = videoUxCmdPat.format(4, fill="0")
    
        while (running):
            (ret, frame) = cam.read()
            w = cv2.imshow("3dcam",frame)
    
            ctrlKey = cv2.waitKey(18) & 0xFF
    
            if ctrlKey == ord('q'):
                running = False
                cv2.destroyWindow("3dcam")
            else:
                kv = ctrlKey - ord('0')
                if kv != oldKeyV and kv in xrange(1, 5):
                    oldKeyV = kv
                    vuxCmd = videoUxCmdPat.format(kv, fill="0")
                    os.system(vuxCmd)
    
    if __name__ == "__main__":
        __main()

    其中/dev/video1是插入摄像头装载驱动后系统生成的设备文件,需要替换为摄像头对应的设备文件名

  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/astreye/p/8399792.html
Copyright © 2011-2022 走看看