Στοιχείο COM

Scene Detector

Ανίχνευση σκηνών βίντεο για προγραμματιστές. Ενσωματώστε το στην εφαρμογή σας μέσω COM.

Το Scene Detector είναι ένα στοιχείο COM βασισμένο στην τεχνολογία αναγνώρισης σκηνών HandySaw DS. Επεξεργάζεται ένα αρχείο βίντεο και επιστρέφει μια λίστα με τις ανιχνευθείσες σκηνές με ακρίβεια πλαισίου (frame-accurate). Το στοιχείο μπορεί επίσης να δημιουργήσει μικρογραφίες (thumbnails) για κάθε σκηνή και να αναφέρει τις νέες σκηνές σε πραγματικό χρόνο μέσω διεπαφών callback. Δεν χρειάζεται να περιμένετε να ολοκληρωθεί ολόκληρη η διαδικασία ανίχνευσης.

Ένα στοιχείο COM ακολουθεί την τυπική αρχιτεκτονική, καθιστώντας το χρησιμοποιήσιμο από σχεδόν οποιοδήποτε περιβάλλον ανάπτυξης των Windows. Εάν χρειάζεστε ένα αυτόνομο εργαλείο επιφάνειας εργασίας αντί για ένα στοιχείο προγραμματιστή, το HandySaw DS είναι η σωστή επιλογή.

Ευρεία υποστήριξη μορφών

Επεξεργάζεται οποιοδήποτε αρχείο βίντεο που μπορεί να αναπαραχθεί από το Windows Media Player μέσω του API DirectShow.

Callbacks σε πραγματικό χρόνο

Αναφέρει κάθε νέα σκηνή αμέσως μόλις βρεθεί. Η εφαρμογή σας λαμβάνει αποτελέσματα κατά τη διάρκεια της επεξεργασίας.

Δημιουργία μικρογραφιών

Προαιρετικά αποθηκεύει το πρώτο και το τελευταίο πλαίσιο κάθε σκηνής ως αρχεία BMP ή JPEG σε οποιαδήποτε κλίμακα.

Χρωματικοί χώροι RGB και YUV

Η ανίχνευση μπορεί να εκτελεστεί σε χρωματικό χώρο RGB24 ή YUY2. Κάθε ένας έχει τις δικές του προτεινόμενες προεπιλεγμένες τιμές κατωφλίου.

Ανίχνευση λευκών και μαύρων σκηνών

Τα ρυθμιζόμενα κατώφλια φωτεινότητας (luma) αναγνωρίζουν τις μεταβάσεις προς το λευκό και προς το μαύρο ως ξεχωριστές σκηνές.

Επεξεργασία τμήματος αρχείου

Καθορίστε θέσεις έναρξης και λήξης για να ανιχνεύσετε σκηνές μόνο μέσα σε ένα επιλεγμένο τμήμα του αρχείου πολυμέσων.

Προσαρμοσμένη διοχέτευση φίλτρων (pipeline)

Παρακάμψτε τα εσωτερικά φίλτρα DirectShow (πηγή, splitter, αποκωδικοποιητής) για μέγιστη συμβατότητα.

Συγχώνευση σύντομων σκηνών

Οι σκηνές που είναι μικρότερες από ένα ρυθμιζόμενο ελάχιστο όριο συγχωνεύονται αυτόματα με τις γειτονικές τους ή αφαιρούνται.

Επικοινωνήστε μαζί μου για την έκδοση demo και πληροφορίες τιμολόγησης.

sdScenesMergeKind enum

Καθορίζει πώς αντιμετωπίζονται οι σύντομες σκηνές μετά την ανίχνευση.

sdMergeDelete = 0 Η σύντομη σκηνή αφαιρείται.
sdMergeWithPrev = 1 Η σύντομη σκηνή συγχωνεύεται με την προηγούμενη σκηνή.
sdMergeWithNext = 2 Η σύντομη σκηνή συγχωνεύεται με την επόμενη σκηνή.
sdMergeWithBoth = 3 Η σύντομη σκηνή, η προηγούμενη και η επόμενη σκηνή συγχωνεύονται όλες σε μία.

DetectorParameters structure

Βασικές παράμετροι της μηχανής ανίχνευσης σκηνών.

BSTR VideoFileName Πλήρης διαδρομή προς το αρχείο βίντεο για επεξεργασία.
int Threshold Ευαισθησία ανίχνευσης. Εύρος 0-255. Προτεινόμενες προεπιλογές: 19 (RGB) και 5 (YUV). Μια νέα σκηνή ξεκινά όταν η διαφορά μεταξύ δύο διαδοχικών πλαισίων υπερβαίνει αυτή την τιμή. Χαμηλότερες τιμές παράγουν περισσότερες σκηνές.
int UpLumaTresh Κατώφλι μετάβασης προς το λευκό. Εύρος -1-255. Μια τιμή -1 απενεργοποιεί αυτή τη λειτουργία. Όταν η συνολική φωτεινότητα του πλαισίου υπερβαίνει αυτή την τιμή, ξεκινά μια νέα σκηνή, ομαδοποιώντας τα φωτεινά πλαίσια μαζί.
int BottomLumaTresh Κατώφλι μετάβασης προς το μαύρο. Εύρος -1-255. Μια τιμή -1 απενεργοποιεί αυτή τη λειτουργία. Όταν η συνολική φωτεινότητα του πλαισίου πέφτει κάτω από αυτή την τιμή, ξεκινά μια νέα σκηνή, ομαδοποιώντας τα σκοτεινά πλαίσια μαζί.
int MinSceneLength Ελάχιστη διάρκεια σκηνής σε πλαίσια. Οι σκηνές μικρότερες από αυτή την τιμή τροποποιούνται σύμφωνα με το πεδίο Merge. Προτεινόμενη προεπιλογή: 5.
int RegisterGraph Εγγραφή ROT του εσωτερικού γραφήματος επεξεργασίας. 1: εγγραφή. 0: όχι εγγραφή.
BSTR SourceFilterMoniker Εμφανιζόμενο όνομα του επιθυμητού φίλτρου πηγής. NULL: χρήση προεπιλογής.
BSTR SplitterFilterMoniker Εμφανιζόμενο όνομα του επιθυμητού φίλτρου splitter. NULL: χρήση προεπιλογής.
BSTR DecoderFilterMoniker Εμφανιζόμενο όνομα του επιθυμητού φίλτρου αποκωδικοποιητή. NULL: χρήση προεπιλογής.
sdScenesMergeKind Merge Στρατηγική συγχώνευσης που εφαρμόζεται όταν μια ανιχνευθείσα σκηνή είναι μικρότερη από το MinSceneLength.

DetectorParameters2 structure

Επεκτείνει το DetectorParameters με επιλογή χρωματικού χώρου και επεξεργασία τμήματος αρχείου. Περιέχει όλα τα πεδία του DetectorParameters συν τα ακόλουθα.

int UseYUV Χρωματικός χώρος. 1: YUY2. 0: RGB24.
int Pad Δεσμευμένο.
double StartPosition Θέση έναρξης επεξεργασίας σε δευτερόλεπτα. Όταν δεν είναι μηδέν, όλοι οι χρόνοι των σκηνών που επιστρέφονται είναι σχετικοί με αυτή τη μετατόπιση.
double StopPosition Θέση λήξης επεξεργασίας σε δευτερόλεπτα. 0: επεξεργασία μέχρι το τέλος του αρχείου.

ThumbnailsParameters structure

Ελέγχει τη δημιουργία μικρογραφιών. Περάστε έναν δείκτη σε αυτή τη δομή για να ενεργοποιήσετε τις μικρογραφίες ή NULL για να τις απενεργοποιήσετε.

int JpegFormat Μορφή εξόδου. 0: BMP. 1: JPEG.
int JpegQuality Ποιότητα συμπίεσης JPEG, 0-100.
int ImagesPerScene 1: μόνο το πλαίσιο έναρξης. 2: πλαίσιο έναρξης και λήξης ανά σκηνή.
double Scale Συντελεστής κλίμακας μικρογραφίας. 1.0: πλήρες μέγεθος.
BSTR FileName Πρότυπο ονόματος αρχείου χρησιμοποιώντας σύνταξη printf της C με ένα πεδίο ακέραιου αριθμού, π.χ. d:\dir\frame%05d.jpg. Ο αριθμός πλαισίου αντικαθιστά το σύμβολο κράτησης θέσης %d. Απαιτεί πλήρη διαδρομή με τη σωστή επέκταση.

ISceneDetector interface

Κύρια διεπαφή ανίχνευσης σκηνών.

DetectScenesInFile

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

Κύρια μέθοδος ανίχνευσης. Ο καλών δεν χρειάζεται να δημιουργήσει το SafeArray εκ των προτέρων - περάστε έναν δείκτη σε μια μεταβλητή SAFEARRAY. Εάν το *Scenes δεν είναι NULL μετά την κλήση, ο καλών πρέπει να το καταστρέψει. Το αποτέλεσμα είναι ένας δισδιάστατος πίνακας. Για κάθε σκηνή, δύο τιμές long δίνουν τους αριθμούς πλαισίου έναρξης και λήξης σε σχέση με τη θέση έναρξης της επεξεργασίας. Περάστε μη-NULL ThumbnailsParams για να ενεργοποιήσετε τη δημιουργία μικρογραφιών.

HRESULT Σημασία
0Επιτυχία
0x80040601Μη καθορισμένο σφάλμα
0x80040602Το DirectShow δεν είναι εγκατεστημένο ή η έκδοση είναι πολύ παλιά
0x80040603Αδυναμία λήψης διάρκειας βίντεο - μπορεί να είναι ακίνητη εικόνα
0x80040604Εσφαλμένο όρισμα
0x80040605Αδυναμία δημιουργίας πλαισίου συσκευής (device context)
0x80040606Το αντικείμενο είναι απασχολημένο με άλλη εργασία
0x80040607Ο ρυθμός καρέ ισούται με μηδέν - μπορεί να είναι ακίνητη εικόνα
0x80040608Αδυναμία δημιουργίας γραφήματος

ISceneDetector2 interface

Επεκτείνει το ISceneDetector. Κληρονομεί όλες τις μεθόδους του και προσθέτει τα ακόλουθα.

DetectScenesInFile2

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

Ίδιο με το DetectScenesInFile, αλλά χρησιμοποιεί το DetectorParameters2, επιτρέποντας την επιλογή χρωματικού χώρου και την επεξεργασία τμήματος αρχείου. Οι τιμές έναρξης και λήξης της σκηνής που επιστρέφονται είναι σχετικές με το Params.StartPosition.

GetFrameRate

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

Επιστρέφει τον ρυθμό καρέ του τελευταίου επεξεργασμένου αρχείου. Χρήσιμο για τη μετατροπή αριθμών πλαισίων σε χρονικές σημάνσεις. Επιστρέφει S_OK, ή E_INVALIDARG εάν το pFrameRate είναι NULL.

ISceneDetectorEvents interface

Διεπαφή callback για συμβάντα ανίχνευσης σε πραγματικό χρόνο. Υλοποιήστε την στην εφαρμογή σας για να λαμβάνετε αποτελέσματα καθώς βρίσκονται.

NewScene

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

Ενεργοποιείται όταν μια νέα σκηνή οριστικοποιείται. Το SceneIndex ξεκινά από το 0. Το Start και το Stop είναι αριθμοί πλαισίων που ξεκινούν από το 0. Όταν η επεξεργασία ξεκίνησε μέσω του DetectScenesInFile2, και οι δύο τιμές είναι σχετικές με το Params.StartPosition.

Status

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

Ενεργοποιείται κάθε 50 ms με την τρέχουσα πρόοδο επεξεργασίας. Ορίστε το *AbortProcess σε 1 για να ακυρώσετε την τρέχουσα ανίχνευση.