Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作具有/dev/video9的虚拟视频设备进行测试和调试?_Python_Linux_Bash_Video Processing_Vlc - Fatal编程技术网

Python 如何制作具有/dev/video9的虚拟视频设备进行测试和调试?

Python 如何制作具有/dev/video9的虚拟视频设备进行测试和调试?,python,linux,bash,video-processing,vlc,Python,Linux,Bash,Video Processing,Vlc,我正在做一个机器人项目,在那里我用两个网络摄像头来拍摄眼睛 我有两个网络摄像头通过USB连接到我的电脑,它创建了/dev/video0和/dev/video1,现在的问题是,当摄像头被Skype或其他软件使用时,有时会出现故障。因为Linux的制造商驱动程序本身可能是使/dev/video0或/dev/video1消失的问题(除非手动拔下并重新插入,否则在某些情况下是不可能的,例如远程/机器人项目,我需要100%的摄像头可用性才能将其用作眼睛) 为了解决这个问题,我编写了一个脚本: ### Lo

我正在做一个机器人项目,在那里我用两个网络摄像头来拍摄眼睛

我有两个网络摄像头通过USB连接到我的电脑,它创建了/dev/video0和/dev/video1,现在的问题是,当摄像头被Skype或其他软件使用时,有时会出现故障。因为Linux的制造商驱动程序本身可能是使/dev/video0或/dev/video1消失的问题(除非手动拔下并重新插入,否则在某些情况下是不可能的,例如远程/机器人项目,我需要100%的摄像头可用性才能将其用作眼睛)

为了解决这个问题,我编写了一个脚本:

### Logitech camera lost
target="/dev/video99"
foundon="none"
warn="[WARNING]:"
ok="[OK]:"
for i in 0 1 2 3 4
do
tmp="/dev/video$i"
if [ -e $tmp ]
then
  foundon="/dev/video$i"
else
  echo "no $i"
fi
done

b="none"
if [ "$foundon" = "$b" ]
then
  echo "$warn No camera is found"
  echo "$warn Auto restarting /var/tmp/runme.sh"
  /var/tmp/runme.sh &
else
  echo "$ok ln -s $foundon $target"
  echo password | sudo -S ln -sf $foundon $target
  echo password | sudo -S chmod -R 777 $target
fi
ls /dev/vid*
但这仍然不够,我需要制作一个虚拟1映像或基于空映像的虚拟视频设备接口,它永久地位于/dev/video9中。一旦我有了那个虚拟视频设备,我就可以调试/识别是什么原因导致原始摄像机突然丢失

问:当任何应用程序将一个虚拟/dev/video9用作视频源输入时,我如何制作一个虚拟/dev/video9来真正充当显示一个jpeg或视频剪辑的相机源?(例如:skype或其他..)

它可以工作

步骤1:

$ apt-get install linux-headers-3.5.0-17-generic

$ apt-get install v4l2loopback-dkms
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  module-assistant v4l-utils
Use 'apt-get autoremove' to remove them.
Suggested packages:
  v4l2loopback-utils
The following NEW packages will be installed:
  v4l2loopback-dkms
0 upgraded, 1 newly installed, 0 to remove and 506 not upgraded.
Need to get 0 B/24.7 kB of archives.
After this operation, 115 kB of additional disk space will be used.
Selecting previously unselected package v4l2loopback-dkms.
(Reading database ... 201818 files and directories currently installed.)
Unpacking v4l2loopback-dkms (from .../v4l2loopback-dkms_0.6.1-1_all.deb) ...
Setting up v4l2loopback-dkms (0.6.1-1) ...
Loading new v4l2loopback-0.6.1 DKMS files...
First Installation: checking all kernels...
Building only for 3.5.0-17-generic
Building initial module for 3.5.0-17-generic
Done.

v4l2loopback:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/3.5.0-17-generic/updates/dkms/

depmod....

DKMS: install completed.

root@sun-M14xR2:~# modprobe v4l2loopback video_nr=5
or
echo "v4l2loopback video_nr=0" >> /etc/modules

root@sun-M14xR2:~# v4l2-sysfs-path
Video device: video0
Video device: video3
Alsa playback device(s): hw:1,3 hw:0,0 hw:0,3
步骤2:

#!/bin/bash
while true
do
    target="/dev/video99"
    foundon="none"
    warn="[WARNING]:"
    ok="[OK]:"
    for i in 1 2 3 4
    do
        tmp="/dev/video$i"
        if [ -e $tmp ]
        then
          foundon="/dev/video$i"
        else
          echo "no $i"
        fi
    done

    b="none"
    if [ "$foundon" = "$b" ]
    then
        echo "$warn No camera is found"
        echo "$warn Auto restarting /var/tmp/runme.sh"
        pp=$(ps aux | grep "sink" | grep -v "grep" | awk '{print $2}')
        if [ -z "$pp" ]
        then
            export DISPLAY=:0.0 && sink device=/dev/video0 &
        fi
        echo pass | sudo -S ln -sf /dev/video0 /dev/video99
        echo pass | sudo -S chmod -R 777 /dev/video99
    else
        echo "$ok ln -s $foundon $target"
        ps aux | grep "sink" | grep -v "grep" | awk '{print $2}' | xargs kill -9;
        echo pass | sudo -S ln -sf $foundon $target
        echo pass | sudo -S chmod -R 777 $target
    fi

ls /dev/video*
sleep 1
done

也许您可以将您的
udev
配置为使用USB ID?@BasileStarynkevitch:我正在使用
v4l2loopback dkms
。也许你可以分享如何使用udev,我可以使用它,但我看到它非常复杂和凌乱,所以没有尝试。我在答复中公布了工作版本。如何对udev进行同样的操作?“modprobe”和“echo…”>/etc/modules”不应该对“video\u nr=…”?modprobe v4l2loopback video\u nr=5或echo“v4l2loopback video\u nr=0”>/etc/modules使用相同的值吗