2011-06-14 3 views
2

나는 opencv 라이브러리를 사용하여 개발 된 실행 파일을 가지고있다. c. php 스크립트를 사용하여 내 웹 사이트 (webserver : apache)에서 실행하고 싶습니다. 내가 직면하고있는 문제는 터미널에서 호출 할 때 실행 가능한 코드가 창 (일종의 gui, cvNamedWindow를 사용하여 연다)을 열지 만 포함 된 PHP 스크립트에서 호출 할 때 실행하지 않는다는 것입니다. 실행을 위해 나는 exec, system, passthru 등을 시도했지만 이것들은 모두 실패했다. OpenCV와 PHP와의 인터페이스

더 명확하게하기 : 실행 파일의 이름 -> GUI, phpscript의 이름 (페이지) -> abcd.php 내가 입력하면

  1. @terminal "./gui이 ..."창이 열립니다. 창 ITYPE "abcd.php PHP는"열 경우

  2. 터미널 @

  3. abcd.php 내 웹 사이트의 일부입니다. 웹 브라우저에서 "http : //...../abcd.php"를 열면 창은 열리지 않습니다. 실행 파일의 다른 것들은 완벽하게 작동하지만. exec에 인수로 전달하면 인쇄됩니다.

모든 솔루션 ??

업데이트 응답에 대한

덕분에 .. 나는 내 질문에이 방법을 놓을 게요은 .. 는 클라이언트에서 실행되는 실행 파일이 있습니다. 그것은 GUI를 통해 사용자가 서버에 연결하고 GUI 내부에서 볼 수있는 비디오 스트림을받을 수 있습니다. 이 실행 파일은 터미널에서 실행될 때 잘 실행됩니다. PHP 또한 실행 파일을 호출 할 수 있기 때문에 웹 페이지를 통해 더 많은 기능을 추가 할 수 있습니다. 그러나 프로그램은 터미널에서 실행될 때와 같은 방식으로 실행되지 않습니다.

+1

그래서 ... 브라우저를 실행하는 컴퓨터에서 창을 열려고합니까? – etarion

+0

heh ... 만일 그렇다면 이것은 꽤 우습다. 이봐, 네가 방문하기를 바라는 웹 사이트가있어. 그것은 당신의 시스템에 모든 종류의 허튼 소리를 설치합니다. 심지어 걱정하지 마십시오. – dqhendricks

+0

아마 OpenCV의 php 바인딩을 얻고 abcd.php에서 모든 처리를하고 싶을 것입니다. 서버에 이미지를 저장하고 abcd.php에 태그를 추가 할 수 있습니다. –

답변

0

응용 프로그램을 제대로 실행하기위한 창이 필요하면 xvfb를 사용하여 가상 X 서버에서 실행하여 가짜 응용 프로그램을 만들 수 있습니다. 이것은 매우 효율적이지는 않지만 최소한 앱은 충돌없이 실행됩니다.

클라이언트에서 앱을 실행하는 것에 대해 이야기하고 있다면 클라이언트가 실제로 실행하려고하는 코드를 다운로드하고 자발적으로 프로그램을 실행하지 않는 한 합리적으로 기대할 수 있다고 생각하지 않습니다. 일반적으로 웹 브라우저는 임의의 웹 사이트에서 원시 컴퓨터 코드를 실행하도록되어 있지 않습니다.

0

나는 당신과 같은 문제가있어서이 문제를 해결하는데 2 개월이 걸렸습니다.

마지막으로 index.php의 디렉토리에 opencv_highgui220d.dllopencv_core220d.dll을 넣었습니다.

자세한 내용은 다음 내 환경 :

OS : 윈도우 비스타 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; 
} 

를 사용하여 비주얼 스튜디오 2010 컴파일,

프로젝트 설정 : 건물 한 후, 웹 루트에 cv.exe를 넣어

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 

, 하지만 오류 메시지가 표시되면 반환 값 : 0xc0000135 ()).

Google 코드가 손실로 알고 있습니다. 일부 종속성 워커 (http://www.dependencywalker.com/)는 및 opencv_core220d.dll이 필요합니다.

그래서 웹 루트에 넣으십시오.