2013-11-27 67 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

很高興你解決了這個問題。 –