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是插入摄像头装载驱动后系统生成的设备文件,需要替换为摄像头对应的设备文件名

  • 相关阅读:
    递归的初步应用
    最大公约数与最小公倍数(低效)
    进制转换
    凸多边形的面积问题
    单词替换
    DNA排序
    字符串排序
    倒三角形
    韩信点兵
    oracle
  • 原文地址:https://www.cnblogs.com/astreye/p/8399792.html
Copyright © 2011-2022 走看看