2010-06-05 5 views
1

이전 질문과 마찬가지로 간단한 아이 추적기를 만들려고합니다. Linux 버전 (Ubuntu 실행)에서 시작하기로 결정했습니다.스크린 캐스팅 (ffmpeg) 동기화 및 웹캠 캡처 (OpenCV)

이 작업을 완료하려면 두 스트림의 프레임이 서로 정확히 일치하고 각각의 프레임에 완전히 동일한 프레임 수가 있도록 화면 캐스팅과 웹캠 캡처를 구성해야합니다.

스크린 캐스팅 fps는 카메라의 fps에 따라 다르므로 웹캠에서 이미지를 가져올 때마다 화면 프레임을 잡고 행복하게 머물 수 있습니다. 그러나 ffmpeg와 같은 빠른 스크린 캐스팅을위한 모든 도구는 결과적으로 .avi 파일을 반환하고 이미 시작된 것으로 알려진 fps를 요구합니다.

다른면에서 Java + Robot 또는 ImageMagick과 같은 도구는 .jpg 스크린 샷을 반환하는 데 약 20 분이 걸리는 것으로 보이는데 이는 작업 속도가 매우 느립니다. 그러나 웹캠 프레임을 잡을 때마다 요청할 수 있으며 필요한 동기화를 제공 할 수 있습니다.

그래서 하위 질문은 다음과 같습니다 USD 카메라의 프레임 속도는 하나의 세션에서

  1. 차이가 있습니까?
  2. 프레임 단위로 빠른 스크린 캐스팅을 제공하는 도구가 있습니까?
  3. ffmpeg가 프로그램이이 요청을 시작할 때만 .avi 파일에 새 프레임을 넣을 수있는 방법이 있습니까?

저는 C++ 또는 Java를 사용할 수 있습니다.

저는 실제로 드라이버 프로그래머가 아닌 인터페이스 디자이너입니다.이 작업은 꽤 낮은 수준 인 것 같습니다. 나는 어떤 제안이나 조언에 감사 할 것이다!

+0

, 맞습니까? – metaliving

+0

물론 감사합니다! :) – lyuba

+0

그리고 USD 대신에 USB? –

답변

1

OpenCV의 HighGUI의 cvGetCaptureProperty(CvCapture* capture, int property_id) 기능 (property_id = CV_CAP_PROP_FPS)을 사용하여 웹캠으로 캡처 한 초당 프레임 수를 결정하십시오.

사용 예 : 당신은 FPS (초당 프레임), FSP하지 의미

CvCapture *capture = 0; 
double fps = 0.0; 

capture = cvCaptureFromCAM(0); 
fps = cvCaptureProperty(capture, CV_CAP_PROP_FPS); 
+0

좋은 생각이지만이 경우 정확하게 일치하는 캡처를 동시에 구성하는 것이 어떻습니까? 두 개의 스레드를 사용해야합니까? 또는 웹캠의 첫 프레임이 수신 된 직후 ffmpeg 캡처 프로그램을 초기화하면 fps를 알 수 있습니까? 의견을 보내 주셔서 감사합니다. – lyuba

+0

ffmpeg에 대해서는 잘 모르겠지만'cvCreateVideoWriter()'함수를 사용할 수 있습니다. 비디오 피드와 함께 .avi 파일을 만들고,'cvGrabFrame()'함수로 각 프레임을 루프에서 추출한 다음' cvWriteFrame()'. 같은 루프에서 화면에서 이미지를 추출하여 다른 비디오 파일에 쓸 수 있습니다. 나는 당신이 당신의 스크린 캐스터의 FPS를 카메라의 것과 동일하게 설정한다면, 당신은 동기화를 달성 할 것이라고 확신한다. – metaliving

+0

Metaliving, 귀하의 방법을 시도했지만 불행히도 CV_CAP_PROP_FPS 속성은 OpenCV 설명서 에서처럼 Windows에서만 작동합니다. 오류는 다음과 같습니다. HIGHGUI 오류 : V4L2 : 특성 # 5 가져 오기가 지원되지 않습니다. 저는 우분투에서 일하고 있으며 제 프로젝트가 크로스 플랫폼이되기를 원하므로 다른 방법을 찾아야합니다. 그런데 코드에 오류가 있습니다. 거기에 cvGetCaptureProperty (cvCaptureProperty 아님)가 있어야합니다. 어쨌든, 의견에 감사드립니다! – lyuba