Scene Detector - 비디오 장면 감지 COM 개체

설명

Scene Detector는 장면 인식 및 장면 처리를 위한 강력한 COM 구성 요소입니다. 매우 정확하고 빠른 광학 장면 인식을 위해 수상 경력이 있는 HandySaw DS 기술이 통합되어 있습니다. 제품을 확장하려는 소프트웨어 회사와 개발자를 대상으로 합니다. COM 구성 요소는 COM( 구성 요소 개체 모델 ) 아키텍처를 따르는 재사용 가능한 소프트웨어 모듈로, 다양한 프로그래밍 언어 및 환경에서 사용할 수 있습니다. 장면 감지를 위한 독립형 애플리케이션을 찾고 있다면 이 링크를 따라 HandySaw DS를 사용할 수 있습니다.

Scene Detector 객체는 비디오 파일을 처리하고 발견된 장면 목록을 반환합니다. 또한 각 장면의 썸네일을 저장하고 처리 중에 콜백 인터페이스를 통해 새로 발견된 각 장면에 대해 호출자 애플리케이션에 즉시 알릴 수 있습니다.

주요 특징

  • Windows Media Player에서 재생할 수 있는 거의 모든 비디오 파일에서 장면을 감지합니다(DirectShow API 사용으로 인해).
  • 빠르고 정확한 알고리즘
  • 쉬운 통합
  • 처리 중에 정의된 직후 새 장면을 보고합니다. 감지가 완료될 때까지 기다릴 필요가 없습니다.
  • 각 장면의 첫 번째 및 마지막 프레임 이미지인 썸네일을 생성하고 BMP 또는 JPG 파일로 저장할 수 있습니다.
  • 처리 중에 사용할 소스, 분배기 및 비디오 디코더 필터를 지정할 수 있습니다.
  • "흰색" 및 "검은색" 장면을 감지할 수 있습니다.
  • RGB 및 YUV 색상 공간에서 작업 가능
  • 미디어 파일의 일부를 처리할 수 있습니다. 사용자는 처리 시작 및 중지 위치를 지정할 수 있습니다.

데모 버전 및 가격

저에게 연락하세요 .

선적 서류 비치

sdScenesMergeKind 열거형

짧은 장면에서 무엇을 해야 할지 지시하는 데 사용됩니다.

sdMergeDelete = 0, 짧은 장면이 삭제되었습니다.
sdMergeWithPrev = 1, 짧은 장면이 이전 장면과 병합됨
sdMergeWithNext = 2, 짧은 장면이 다음 장면과 병합됨
sdMergeWithBoth = 3 단편(중간), 이전 장면과 다음 장면이 하나의 장면으로 병합됨

DetectorParameters 구조

이 구조에는 장면 감지 엔진 매개변수가 포함되어 있습니다.

BSTR VideoFileName; 탐지를 위한 전체 비디오 파일 이름입니다.
int Threshold; 감지 임계값입니다.
권장 기본값은 RGB 색상 공간의 경우 19이고 YUV의 경우 5입니다.
0부터 255까지 가능합니다.
이 매개변수가 주요 매개변수입니다.
두 프레임의 차이가 이 값보다 크면 새 장면이 시작됩니다.
따라서 임계값을 낮추면 장면이 더 많아집니다.
int UpLumaTresh; "화이트 페이드아웃" 감지에 사용됩니다.
권장 기본값은 -1입니다.
-1부터 255까지 가능합니다.
"-1"은 이 기능을 비활성화합니다.
전체 프레임 밝기가 이 값보다 크면 새 장면이 시작됩니다.
이 기능을 사용하면 밝은 프레임의 시퀀스를 별도의 장면으로 정의할 수 있습니다.
int BottomLumaTresh; "블랙 페이드아웃" 감지에 사용됩니다.
권장 기본값은 -1입니다.
-1부터 255까지 가능합니다.
"-1"은 이 기능을 비활성화합니다.
전체 프레임 밝기가 이 값보다 낮으면 새 장면이 시작됩니다.
이 기능을 사용하면 이러한 어두운 프레임의 시퀀스를 별도의 장면으로 정의할 수 있습니다.
int MinSceneLength;

감지된 장면의 최소 지속 시간(프레임 단위)을 설정합니다.
권장 기본값 5.
0부터 양수 값까지 가능합니다.
정의된 장면의 길이가 이 값보다 작으면 이 장면은 병합 필드 값(아래 참조)에 따라 이전, 다음 또는 두 장면과 병합됩니다.

int RegisterGraph; Running Object Table(ROT)에 내부 처리 그래프 등록을 제어합니다.
1(ROT에 등록) 또는 0(등록하지 않음)일 수 있습니다.
BSTR SourceFilterMoniker; 내부 처리 그래프에 사용되는 원하는 소스 필터 모니커의 표시 이름입니다.
NULL인 경우 - 기본 필터가 사용됩니다.
BSTR SplitterFilterMoniker; 내부 처리 그래프에 사용되는 원하는 분할 필터 모니커의 표시 이름입니다.
NULL인 경우 - 기본 필터가 사용됩니다.
BSTR DecoderFilterMoniker; 내부 처리 그래프에 사용되는 원하는 디코더 필터 모니커의 표시 이름입니다.
NULL인 경우 - 기본 필터가 사용됩니다.
sdScenesMergeKind Merge; 장면 길이가 MinSceneLength 보다 작을 경우 이 매개변수의 값에 따라 장면이 수정됩니다.

DetectorParameters2 구조

이 구조는 DetectorParameters 구조에 정의된 장면 감지 엔진 매개변수 세트를 확장합니다. DetectorParameters 멤버 외에도 다음이 포함됩니다.

int UseYUV; 장면 감지를 위한 색 공간을 선택할 수 있습니다.
1(YUY2) 또는 0(RGB24)일 수 있습니다.
int Pad; 예약된
double StartPosition; 장면 감지를 위한 시작 미디어 위치를 초 단위로 지정합니다.
이것이 0이 아니면 모든 장면 시간이 이 위치를 기준으로 한다는 점을 잊지 마십시오.
double StopPosition; 장면 감지를 위한 중지 미디어 위치를 초 단위로 지정합니다.
무시하려면 0으로 설정하세요.

ThumbnailsParameters 구조

이 구조에는 썸네일 생성 매개변수가 포함되어 있습니다.

int JpegFormat; 파일 형식을 선택하세요. 0 - BMP 파일을 생성하고, 1 - JPEG 파일을 생성합니다.
int JpegQuality; JPEG 압축 품질. 0에서 100까지의 정수입니다.
int ImagesPerScene; 장면 번호당 이미지. 1 - 시작 프레임만, 2 - 각 장면의 시작 및 끝 프레임.
double Scale; 썸네일 배율 인수. 1 - 전체 크기 사진. 부동 소수점 값.
BSTR FileName;

썸네일 파일 이름 템플릿. 하나의 정수 필드가 있는 "C" "printf" 함수에 대한 문자열입니다.
예: "d:\filedir\filename%05d.jpg"
적절한 확장자를 포함한 전체 경로 이름을 지정해야 합니다. 특정 썸네일의 파일 이름을 얻기 위해 %d개의 기호 대신 프레임 번호가 삽입됩니다.

ISceneDetector 인터페이스

이 인터페이스는 장면 감지 방법을 제공합니다.

DetectScenesInFile 메서드

HRESULT _stdcall DetectScenesInFile ([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY (긴) *Scenes );

이것이 주요 장면 감지 방법입니다.
Params 의 감지 매개변수를 전달하고 Scene의 SAFEARRAY에 대한 포인터를 전달합니다.
Scenes 가 NULL인 경우 함수는 감지된 장면 목록을 반환하지 않습니다.
호출자는 이 메서드를 호출하기 전에 SafeArray를 만들 필요가 없습니다.
Scenes가 NULL이 아니고 함수 호출 후 *Scenes 도 NULL이 아닌 경우 호출자는 *Scenes SafeArray를 삭제해야 합니다.
*장면은 2차원 배열입니다. 발견된 각 장면에는 장면 시작 및 중지 프레임 번호라는 두 개의 긴 값이 있습니다. 이 값은 처리 시작 미디어 위치를 기준으로 합니다.
NULL이 아닌 포인터를 ThumbnailsParams 로 전달하여 썸네일 생성을 켜고 해당 매개변수를 지정합니다. 썸네일 생성을 비활성화하려면 NULL을 전달합니다.

HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.

0 성공
0x80040601 정의되지 않은 오류
0x80040602 DirectShow가 설치되지 않았거나 버전이 너무 오래되었습니다.
0x80040603 비디오 길이를 얻을 수 없습니다. 정지 이미지일 수 있음
0x80040604 나쁜 주장
0x80040605 장치 컨텍스트를 만들 수 없습니다
0x80040606 개체가 다른 작업을 수행 중입니다.
0x80040607 프레임 속도는 0입니다. 정지 이미지일 수 있음
0x80040608 그래프를 작성할 수 없습니다

ISceneDetector2 인터페이스

이 인터페이스는 ISceneDetector 인터페이스에서 파생되며 장면 감지를 위한 확장된 방법을 제공합니다. ISceneDetector 에서 상속된 메서드 외에도 ISceneDetector2 인터페이스는 다음 메서드를 노출합니다.

DetectScenesInFile2 메서드

HRESULT _stdcall DetectScenesInFile2 ([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY (긴) *Scenes );

DetectScenesInFile 과 달리 이 방법은 DetectorParameters2 매개변수 세트를 사용하므로 색상 공간을 지정하고 처리 위치를 시작 및 중지할 수 있습니다.
이 메서드에서 반환된 장면 시작 및 중지 값은 Params.StartPosition 값에 상대적이라는 사실에 주의하세요.
다른 정보는 DetectScenesInFile 설명을 참조하세요.

GetFrameRate 메서드

HRESULT _stdcall GetFrameRate ([out, retval] double *pFrameRate );

마지막으로 처리된 파일의 비디오 프레임 속도를 반환합니다. 프레임 번호 변환 시간에 유용합니다.
pFrameRate가 NULL인 경우 S_OK 또는 E_INVALIDARG를 반환합니다.

ISceneDetectorEvents 이벤트 인터페이스

이 이벤트 인터페이스는 실시간으로 장면 감지 정보를 검색하는 방법을 제공합니다.

NewScene 메서드

HRESULT NewScene ([in] long SceneIndex, [in] long Start, [in] long Stop );

새 장면이 정의되면 감지기에 의해 발생되는 이벤트입니다.
SceneIndex는 0부터 시작됩니다.
시작중지 도 0부터 시작하며 프레임 번호입니다.
DetectScenesInFile2 메서드를 통해 처리가 시작된 경우 시작중지 값은 Params.StartPosition 값을 기준으로 합니다.

상태 방법

HRESULT 상태 ([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );

이벤트는 50ms마다 발생하며 클라이언트에게 프로세스 상태를 알립니다.
AbortProcess 는 변수에 대한 포인터입니다. 따라서 클라이언트는 * AbortProcess를 1 값으로 설정하여 현재 장면 감지를 취소할 수 있습니다.