Scene Detector – Video Scene Detection COM-Objekt

Beschreibung

Scene Detector ist eine leistungsstarke COM-Komponente für die Szenenerkennung und -verarbeitung. Es beinhaltet die preisgekrönten HandySaw DS-Technologien für eine extrem genaue und schnelle optische Szenenerkennung. Es richtet sich an Softwareunternehmen und Entwickler, die ihre Produkte erweitern möchten. Eine COM-Komponente ist ein wiederverwendbares Softwaremodul, das der Component Object Model (COM)-Architektur folgt, sodass es in verschiedenen Programmiersprachen und -umgebungen verwendet werden kann. Wenn Sie nach einer eigenständigen Anwendung zur Szenenerkennung suchen, können Sie HandySaw DS verwenden, indem Sie diesem Link folgen.

Das Scene Detector-Objekt verarbeitet Videodateien und gibt eine Liste der gefundenen Szenen zurück. Es kann auch Miniaturansichten für jede Szene speichern und die aufrufende Anwendung während der Verarbeitung über Callback-Schnittstellen sofort über jede neu gefundene Szene informieren.

 

Hauptmerkmale

  • Erkennt Szenen in fast jeder Videodatei, die vom Windows Media Player abgespielt werden kann (aufgrund der Verwendung der DirectShow-API).
  • Schneller und genauer Algorithmus
  • Einfache Integration
  • Meldet eine neue Szene direkt nach ihrer Definition während der Verarbeitung. Es ist nicht erforderlich, auf den Abschluss der Erkennung zu warten
  • Kann Miniaturansichten generieren - erste und letzte Frame-Bilder für jede Szene und diese in BMP- oder JPG-Dateien speichern
  • Es ist möglich, Quell-, Splitter- und Videodecoder-Filter anzugeben, die während der Verarbeitung verwendet werden sollen
  • Kann "weiße" und "schwarze" Szenen erkennen
  • Kann in RGB- und YUV-Farbräumen arbeiten
  • Kann einen Teil einer Mediendatei verarbeiten - der Benutzer kann Start- und Stopp-Verarbeitungspositionen angeben

 

Demoversion und Preis

Kontaktieren Sie mich.

 

Dokumentation

 

sdScenesMergeKind-Enumeration

Wird verwendet, um Anweisungen zu geben, was mit kurzen Szenen zu tun ist.

sdMergeDelete = 0, Kurze Szene entfernt
sdMergeWithPrev = 1, Kurze Szene mit vorheriger zusammengeführt
sdMergeWithNext = 2, Kurze Szene mit nächster zusammengeführt
sdMergeWithBoth = 3 Kurze (mittlere), vorherige und nächste Szenen zu einer einzigen Szene zusammengeführt

 

DetectorParameters-Struktur

Diese Struktur enthält Parameter der Szenenerkennungs-Engine.

BSTR VideoFileName; Vollständiger Videodateiname für die Erkennung.
int Threshold; Schwellenwert für die Erkennung.
Empfohlene Standardwerte sind 19 für den RGB-Farbraum und 5 für YUV.
Kann zwischen 0 und 255 liegen.
Dieser Parameter ist der wichtigste.
Wenn die Differenz von zwei Frames größer als dieser Wert ist, beginnt eine neue Szene.
Also: niedrigerer Schwellenwert - mehr Szenen.
int UpLumaTresh; Wird bei der Erkennung von "White-Fadeouts" verwendet.
Empfohlener Standardwert -1.
Kann zwischen -1 und 255 liegen.
"-1" deaktiviert diese Funktion.
Wenn die Gesamthelligkeit des Frames größer als dieser Wert ist, beginnt eine neue Szene.
Mit dieser Funktion ist es möglich, eine Sequenz solcher heller Frames als separate Szene zu definieren.
int BottomLumaTresh; Wird bei der Erkennung von "Black-Fadeouts" verwendet.
Empfohlener Standardwert -1.
Kann zwischen -1 und 255 liegen.
"-1" deaktiviert diese Funktion.
Wenn die Gesamthelligkeit des Frames geringer als dieser Wert ist, beginnt eine neue Szene.
Mit dieser Funktion ist es möglich, eine Sequenz solcher dunkler Frames als separate Szene zu definieren.
int MinSceneLength;

Legt eine minimale Dauer einer erkannten Szene (in Frames) fest.
Empfohlener Standardwert 5.
Kann zwischen 0 und einem beliebigen positiven Wert liegen.
Wenn die Länge der definierten Szene kleiner als dieser Wert ist, wird diese Szene gemäß dem Wert des Felds Merge (siehe unten) mit der vorherigen, nächsten oder beiden Szenen zusammengeführt.

int RegisterGraph; Steuert die Registrierung des internen Verarbeitungsgraphen in der he Running Object Table (ROT).
Kann 1 (in ROT registrieren) oder 0 (nicht registrieren) sein.
BSTR SourceFilterMoniker; Anzeigename des gewünschten Quellfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird.
Wenn NULL - Standardfilter verwendet.
BSTR SplitterFilterMoniker; Anzeigename des gewünschten Splitterfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird.
Wenn NULL - Standardfilter verwendet.
BSTR DecoderFilterMoniker; Anzeigename des gewünschten Decoderfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird.
Wenn NULL - Standardfilter verwendet.
sdScenesMergeKind Merge; Wenn die Szenenlänge kleiner als MinSceneLength ist, wird die Szene gemäß dem Wert dieses Parameters geändert.

 

DetectorParameters2-Struktur

Diese Struktur erweitert eine Reihe von Parametern der Szenenerkennungs-Engine, die in der DetectorParameters-Struktur definiert sind. Zusätzlich zu den Elementen von DetectorParameters enthält sie:

int UseYUV; Ermöglicht die Auswahl des Farbraums für die Szenenerkennung.
Kann 1 (YUY2) oder 0 (RGB24) sein.
int Pad; Reserviert
double StartPosition; Gibt die Startmedienposition für die Szenenerkennung in Sekunden an.
Wenn dies ungleich Null ist, vergessen Sie nicht, dass alle Szenenzeiten relativ zu dieser Position sind.
double StopPosition; Gibt die Stoppmedienposition für die Szenenerkennung in Sekunden an.
Auf Null setzen, um zu ignorieren.

 

ThumbnailsParameters-Struktur

Diese Struktur enthält Parameter für die Miniaturansichtenerstellung.

int JpegFormat; Dateiformat auswählen. 0 - BMP-Dateien generieren, 1 - JPEG-Dateien generieren.
int JpegQuality; JPEG-Komprimierungsqualität. Ganze Zahl von 0 bis 100.
int ImagesPerScene; Anzahl der Bilder pro Szene. 1 - nur Startframe, 2 - Start- und Endframe jeder Szene.
double Scale; Skalierungsfaktor für Miniaturansichten. 1 - Bild in voller Größe. Gleitkommawert.
BSTR FileName;

Vorlage für Miniaturansichtsdateinamen. Zeichenfolge für die "C"-"printf"-Funktion mit einem ganzzahligen Feld.
Zum Beispiel: "d:\filedir\filename%05d.jpg"
Sie müssen den vollständigen Pfadnamen mit der richtigen Erweiterung angeben. Die Frame-Nummer wird anstelle der %d-Symbole eingefügt, um den Dateinamen für eine bestimmte Miniaturansicht zu erhalten.

 

ISceneDetector-Schnittstelle

Diese Schnittstelle stellt Methoden zur Szenenerkennung bereit:

DetectScenesInFile-Methode

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

Dies ist die Hauptmethode zur Szenenerkennung.
Übergeben Sie die Erkennungsparameter in Params und einen Zeiger auf SAFEARRAY in Scenes.
Wenn Scenes NULL ist, gibt die Funktion keine Liste der erkannten Szenen zurück.
Der Aufrufer muss SafeArray nicht erstellen, bevor er diese Methode aufruft.
Wenn Scenes nicht NULL ist und nach dem Funktionsaufruf auch *Scenes nicht NULL ist, muss der Aufrufer *Scenes SafeArray zerstören.
*Scenes ist ein zweidimensionales Array. Für jede gefundene Szene gibt es zwei lange Werte: Szene Start- und Stopp-Frame-Nummern. Diese Werte beziehen sich auf die Startmedienposition der Verarbeitung.
Übergeben Sie einen Nicht-NULL-Zeiger als ThumbnailsParams, um die Generierung von Miniaturansichten zu aktivieren und deren Parameter anzugeben. Übergeben Sie NULL, um die Generierung von Miniaturansichten zu deaktivieren.

Gibt einen HRESULT-Wert zurück. Mögliche Werte sind die Folgenden:

0 Erfolg
0x80040601 Unspezifizierter Fehler
0x80040602 DirectShow ist nicht installiert oder die Version ist zu alt
0x80040603 Die Videodauer kann nicht ermittelt werden. Möglicherweise ein Standbild
0x80040604 Ungültiges Argument
0x80040605 Gerätekontext kann nicht erstellt werden
0x80040606 Objekt ist mit einer anderen Aufgabe beschäftigt
0x80040607 Framerate ist Null. Möglicherweise ein Standbild
0x80040608 Graph kann nicht erstellt werden

 

ISceneDetector2-Schnittstelle

Diese Schnittstelle leitet sich von der ISceneDetector-Schnittstelle ab und stellt erweiterte Methoden zur Szenenerkennung bereit. Zusätzlich zu den von ISceneDetector geerbten Methoden stellt die ISceneDetector2-Schnittstelle die folgenden Methoden bereit:

DetectScenesInFile2-Methode

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

Im Gegensatz zu DetectScenesInFile verwendet diese Methode den DetectorParameters2-Parametersatz, sodass Farbraum, Start- und Stopp-Verarbeitungspositionen angegeben werden können.
Achten Sie darauf, dass die von dieser Methode zurückgegebenen Szenenstart- und -stoppwerte relativ zum Wert Params.StartPosition sind.
Weitere Informationen finden Sie in der Beschreibung von DetectScenesInFile.

GetFrameRate-Methode

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

Gibt die Video-Framerate der zuletzt verarbeiteten Datei zurück. Nützlich für die Übersetzung von Zeit in Frame-Nummer.
Gibt S_OK oder E_INVALIDARG zurück, wenn pFrameRate NULL ist.

 

ISceneDetectorEvents-Ereignisschnittstelle

Diese Ereignisschnittstelle stellt Methoden zum Abrufen von Szenenerkennungsinformationen in Echtzeit bereit.

NewScene-Methode

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

Ereignis, das vom Detektor ausgelöst wird, wenn eine neue Szene definiert wird.
SceneIndex beginnt bei 0.
Start und Stop beginnen ebenfalls bei 0 und sind Frame-Nummern.
Wenn die Verarbeitung über die DetectScenesInFile2-Methode gestartet wurde, beziehen sich die Werte Start und Stop auf den Wert Params.StartPosition.

Status-Methode

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

Ereignis, das alle 50 ms ausgelöst wird und den Client über den Prozessstatus informiert.
AbortProcess ist ein Zeiger auf eine Variable. Daher kann der Client *AbortProcess auf den Wert 1 setzen, um die aktuelle Szenenerkennung abzubrechen.