在Linux/Apache上通过PHP脚本访问USB网络摄像头


Accessing USB webcam via a PHP script on Linux/Apache

我想使用USB网络摄像头(在一个小型C++/OpenCV应用程序中),并从PHP脚本中调用它。我的测试应用程序如下:

int main( int argc, char **argv )
{
    cv::VideoCapture C( 0 );
    cout << "C.isOpened() = " << boolalpha << C.isOpened() << endl;
    return 0;
}

PHP脚本如下:

<?php
exec( escapeshellcmd( '/thepath/theapp' ), $output, $result );
var_dump( $output );
?>

当我直接从命令行调用此应用程序时,它会返回true

当我像php -f /the_php_script.php这样通过php调用应用程序时,它会返回true

当我通过AJAX从html文件(带按钮)调用的php调用应用程序时,它会通过Apache,然后返回false

所以,我的应用程序运行良好。我的php脚本也很好用。但有一个权限或类似的东西阻止php通过Apache访问网络摄像头(用OpenCV库初始化它),,但该权限足以允许应用程序运行

有人能帮我吗?知道吗?

谢谢!


编辑1:

根据一个建议,我尝试在不使用AJAX的情况下使用php脚本来启动我的应用程序。我获得了相同的结果,即OpenCV无法初始化服务器上的USB网络摄像头。

对于那些可能对这个问题感兴趣的人。。。

我面临的问题有两个方面:通过从客户端调用的php脚本初始化USB网络摄像头,并从该php脚本启动一个应用程序,该应用程序可以将图像写入文件夹/var/www/images中的磁盘。

  1. 为了启用USB摄像头,我只需要将用户www data(Apache)添加到视频组中。我通过查看自己的帐户找到了它:我看到我是这个小组的成员,所以添加Apache似乎也是很自然的
  2. 为了允许应用程序(从相机捕获图像)将它们存储在文件夹/var/www/images中,我观察到子文件夹images属于用户root,并且是root组的成员。由于是Apache运行php脚本来调用我的应用程序,所以我将images的所有者切换为www-data

正如我们在法语中所说Voilà

感谢所有给我一些提示的人!