2011-06-14 66 views
2

我有一個可執行文件開發使用c中的opencv庫。我想使用php腳本從我的網站(webserver:apache)執行它。我面臨的問題是,可執行代碼在從終端調用時會打開一個窗口(使用cvNamedWindow打開的一種gui),但在嵌入式php腳本中調用時不會這樣做。對於執行我已經嘗試執行,系統,passthru等,但所有這些失敗。接口OpenCV與PHP

更清晰:可執行文件的名稱 - > GUI,phpscript的名稱(頁) - > abcd.php

  1. @terminal如果鍵入 「./gui」 ...窗口打開。

  2. @終端,如果ITYPE 「PHP abcd.php」 窗口打開

  3. abcd.php是我的網站的一部分。在網絡瀏覽器中,如果我打開「http://...../abcd.php」,窗口DOESNOT打開。儘管可執行文件中的其他內容完美無缺。如果我將它們作爲參數傳遞給exec,它們會打印出來。

任何解決方案?

更新

感謝您的答覆.. 我會把我這樣問.. 有它運行在客戶端上的可執行文件。它有一個gui,用戶可以通過它連接到服務器並接收gui中可以看到的視頻流。這個可執行文件在終端上執行時運行正常 由於PHP也可以調用一個可執行文件,我正在嘗試通過一個網頁,以便我可以添加更多的功能。但是,在終端執行時,程序執行的方式與以前不一樣。

+1

因此......您希望窗口在運行瀏覽器的機器上打開? – etarion 2011-06-14 19:07:51

+0

嘿......如果是這樣,這很有趣。嘿,我有一個網站,我想讓你訪問。它會在你的系統上安裝所有類型的垃圾 - 甚至不用擔心。 – dqhendricks 2011-06-14 19:48:29

+0

也許你想獲得OpenCV的php綁定,並執行abcd.php中的所有處理。您可以將圖像保存在服務器上,並在abcd.php中添加一個標籤。 – 2011-06-21 18:09:42

回答

0

如果您只需要一個窗口讓應用程序正常運行,則可以嘗試使用xvfb在虛擬X服務器中運行該應用程序來創建一個虛擬窗口。這不會很有效,但至少你的應用程序將會執行而不會崩潰。

現在,如果您正在討論在客戶端上啓動應用程序,我不認爲這是您可以合理預期的工作,除非客戶端實際下載您正在嘗試運行的代碼並自願執行您的程序。一般來說,網絡瀏覽器不應該從任意網站運行本地機器代碼。

0

我和你有同樣的問題,需要兩個月才能解決這個問題。

最後,我把opencv_highgui220d.dllopencv_core220d.dll放在index.php的目錄中,它工作正常!

更多細節,下面是我的環境:

操作系統:Windows Vista SP1

HTTP服務器:Appserv2.5.10(Apache2.2.8 + php5.2.6)

根:C :/ Appserv/www/test

根包含。

索引。PHP:

<?php 
exec("cv.exe", $out, $val); 
echo $val; 
?> 

cv.cpp:

#include "stdafx.h" 
#include <cv.h> 
#include <highgui.h> 
using namespace cv; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Mat img = imread("a.jpg"); 
    if(!img.data) return -1; 
    imwrite("b.jpg",img); 
    return 0; 
} 

使用Visual Studio 2010來編譯,

項目設置:

Use Run-Time Library: /Mtd 
VC++ > Include Directories: 
    C:\Program Files\OpenCV2.2\include 
    C:\Program Files\OpenCV2.2\include\opencv 
VC++ > Library Directory 
    C:\Program Files\OpenCV2.2\lib 
Linker > Additional Dependencies: 
    C:\Program Files\OpenCV2.2\lib\opencv_core220d.lib 
    C:\Program Files\OpenCV2.2\lib\opencv_highgui220d.lib 
    C:\Program Files\OpenCV2.2\lib\opencv_video220d.lib 
    C:\Program Files\OpenCV2.2\lib\opencv_ml220d.lib 
    C:\Program Files\OpenCV2.2\lib\opencv_legacy220d.lib 
    C:\Program Files\OpenCV2.2\lib\opencv_imgproc220d.lib 

大廈後,把cv.exe到Web根目錄但得到錯誤信息並獲得返回值:0xc0000135(在$val)。

谷歌的代碼,並知道它是損失一些DLL,使用依賴沃克(http://www.dependencywalker.com/)知道它需要opencv_highgui220d.dllopencv_core220d.dll

所以把它們放到web根目錄下。