我通过这个命令编译我的c ++文件: -
g ++ main.cpp -o main pkg-config --cflags --libs opencv
这很好。现在,当我使用此命令' ./ main'按命令行运行主文件时,它运行正常,并盯着我的网络摄像头。
但是当我在php中编写代码以通过php代码执行此文件时,它也运行但我的网络摄像头没有找到,并且给了我一个错误。 启动凸轮没有找到的网络摄像头
我不知道背后的原因是什么。 我正在为我的文件添加一些代码。
的main.cpp
CvMemStorage *storage = cvCreateMemStorage(0);
CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad("data/haarcascade_frontalface_default.xml");
printf("starting cam\n");
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY);
if(capture == 0)
{
printf("No webcam where found");
return 1;
}
CvScalar red = CV_RGB(250,0,0);
// counters used for frame capture
int happy_count = 0;
int sad_count = 0;
printf("starting recognition\n");
output.php
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo shell_exec('./main');
运行php时出错: - 启动cam找不到网络摄像头。
注意: - 终端上的工作正常
答案 0 :(得分:2)
这只是我的建议,但您可以在使用PHP exec时检查哪个用户正在执行程序吗?可能是apache(您使用的是?)拥有自己的用户,无法访问网络摄像头。我建议尝试以普通用户身份运行apache来检查是否有帮助,或者为apache用户提供访问网络摄像头的权限。
在这方面你有一些帮助。 https://serverfault.com/questions/125865/finding-out-what-user-apache-is-running-as
答案 1 :(得分:1)
似乎对我有权限问题。当您通过php脚本执行程序时,它由运行服务器进程的用户执行。我猜你正在使用apache2 webs服务器来提供php内容,它在Ubuntu中作为用户www-data运行。如果是这样,您只需将用户www-data添加到组视频中。
sudo usermod -a -G video www-data
如果您正在使用其他Web服务器或其他Linux发行版,或者您的Web服务器与其他用户一起运行,则需要相应地修改该命令。