2013-11-27 29 views
0

我想使用USB摄像头(在小型C++/OpenCV应用程序中)并从PHP脚本中调用它。我的测试程序是这样的:在Linux/Apache上通过PHP脚本访问USB摄像头

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); 
?> 

当我把这个应用程序直接在命令行,则返回

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

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

所以,我的应用程序工作正常。我的PHP脚本也能正常工作。但是有一个许可或类似的东西阻止了PHP,通过Apache访问网络摄像头(用OpenCV库进行初始化),,但是权限足以让应用运行

有人可以帮助我吗?任何想法?

谢谢!


编辑1:

经过一个建议,我试图用一个PHP脚本来开始我的应用程序,而无需使用AJAX的。我获得了相同的结果,即OpenCV 不能初始化服务器上​​的USB网络摄像头。

+1

你可以检查,没有使用AJAX? –

+0

你是什么意思?我需要一个AJAX请求来启动php脚本,不是吗? –

+1

您并不需要用户使用AJAX来调用PHP脚本,现在尝试调用没有AJAX的正常HTTP调用脚本,并查看您获得的结果 –

回答

0

对于那些人可以通过这个问题感兴趣......

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

  1. 要启用USB摄像头,我不得不添加用户www数据(阿帕奇)到组视频。我通过查看自己的帐户找到了它:我看到我是这个组的成员,所以加入Apache也很自然!
  2. 为了使应用程序(即从照相机捕获的图像),并将其存储在文件夹中/var/www/images我观察到的子文件夹images属于用户并且是组的成员。由于是Apache运行称为我的应用程序的php脚本,因此我将images的所有者切换为www-data

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

感谢所有给我提示的人!

+0

很高兴你解决了这个问题。 –