Scene Detector – Αντικείμενο COM για Ανίχνευση Σκηνής Βίντεο
Περιγραφή
Το Scene Detector είναι ένα ισχυρό στοιχείο COM για αναγνώριση και επεξεργασία σκηνών. Ενσωματώνει τις βραβευμένες τεχνολογίες HandySaw DS για εξαιρετικά ακριβή και γρήγορη οπτική αναγνώριση σκηνών. Απευθύνεται σε εταιρείες λογισμικού και προγραμματιστές που θέλουν να επεκτείνουν τα προϊόντα τους. Ένα στοιχείο COM είναι μια επαναχρησιμοποιήσιμη μονάδα λογισμικού που ακολουθεί την αρχιτεκτονική Component Object Model (COM), επιτρέποντάς του να χρησιμοποιηθεί σε διάφορες γλώσσες προγραμματισμού και περιβάλλοντα. Εάν αναζητάτε μια αυτόνομη εφαρμογή για ανίχνευση σκηνών, μπορείτε να χρησιμοποιήσετε το HandySaw DS ακολουθώντας αυτόν τον σύνδεσμο.
Το αντικείμενο Scene Detector επεξεργάζεται αρχείο βίντεο και επιστρέφει μια λίστα με τις σκηνές που βρέθηκαν. Μπορεί επίσης να αποθηκεύσει μικρογραφίες για κάθε σκηνή και να ενημερώσει την εφαρμογή που καλεί αμέσως για κάθε νέα σκηνή που βρέθηκε μέσω διεπαφών callback κατά την επεξεργασία.
Κύρια χαρακτηριστικά
- Εντοπίζει σκηνές σε σχεδόν οποιοδήποτε αρχείο βίντεο που μπορεί να αναπαραχθεί από το Windows Media Player (λόγω χρήσης του DirectShow API)
- Γρήγορος και ακριβής αλγόριθμος
- Εύκολη ενσωμάτωση
- Αναφέρει τη νέα σκηνή αμέσως μετά τον καθορισμό της, κατά τη διάρκεια της επεξεργασίας. Δεν χρειάζεται να περιμένετε να ολοκληρωθεί η ανίχνευση
- Μπορεί να δημιουργήσει μικρογραφίες - εικόνες πρώτου και τελευταίου καρέ για κάθε σκηνή και να τις αποθηκεύσει σε αρχεία BMP ή JPG
- Δυνατότητα καθορισμού φίλτρων πηγής, διαχωριστή και αποκωδικοποιητή βίντεο για χρήση κατά την επεξεργασία
- Μπορεί να εντοπίσει "λευκές" και "μαύρες" σκηνές
- Μπορεί να λειτουργήσει σε χρωματικούς χώρους RGB και YUV
- Μπορεί να επεξεργαστεί μέρος ενός αρχείου πολυμέσων - ο χρήστης μπορεί να καθορίσει τις θέσεις έναρξης και διακοπής της επεξεργασίας
Δημοσιονομική έκδοση και τιμή
Επικοινωνήστε μαζί μου.
Τεκμηρίωση
sdScenesMergeKind enum
Χρησιμοποιείται για να δώσει οδηγίες σχετικά με το τι να κάνετε με σύντομες σκηνές.
sdMergeDelete = 0, | Η σύντομη σκηνή καταργήθηκε |
sdMergeWithPrev = 1, | Η σύντομη σκηνή συγχωνεύτηκε με την προηγούμενη |
sdMergeWithNext = 2, | Η σύντομη σκηνή συγχωνεύτηκε με την επόμενη |
sdMergeWithBoth = 3 | Η σύντομη (μεσαία), η προηγούμενη και η επόμενη σκηνή συγχωνεύτηκαν σε μία ενιαία σκηνή |
Δομή DetectorParameters
Αυτή η δομή περιέχει παραμέτρους μηχανισμού ανίχνευσης σκηνών.
BSTR VideoFileName; | Πλήρες όνομα αρχείου βίντεο για ανίχνευση. |
int Threshold; | Τιμή κατωφλίου ανίχνευσης. Οι συνιστώμενες προεπιλογές είναι 19 για χρωματικό χώρο RGB και 5 για YUV. Μπορεί να είναι από 0 έως 255. Αυτή η παράμετρος είναι η κύρια. Όταν η διαφορά δύο καρέ είναι μεγαλύτερη από αυτή την τιμή, ξεκινά μια νέα σκηνή. Έτσι: χαμηλότερο κατώφλι - περισσότερες σκηνές. |
int UpLumaTresh; | Χρησιμοποιείται στην ανίχνευση "white fadeouts". Συνιστώμενη προεπιλογή -1. Μπορεί να είναι από -1 έως 255. Το "-1" απενεργοποιεί αυτήν τη δυνατότητα. Όταν η συνολική φωτεινότητα του καρέ είναι μεγαλύτερη από αυτή την τιμή, ξεκινά μια νέα σκηνή. Με αυτήν τη δυνατότητα, είναι δυνατός ο καθορισμός ακολουθίας τέτοιων φωτεινών καρέ ως ξεχωριστής σκηνής. |
int BottomLumaTresh; | Χρησιμοποιείται στην ανίχνευση "black fadeouts". Συνιστώμενη προεπιλογή -1. Μπορεί να είναι από -1 έως 255. Το "-1" απενεργοποιεί αυτήν τη δυνατότητα. Όταν η συνολική φωτεινότητα του καρέ είναι μικρότερη από αυτή την τιμή, ξεκινά μια νέα σκηνή. Με αυτήν τη δυνατότητα, είναι δυνατός ο καθορισμός ακολουθίας τέτοιων σκοτεινών καρέ ως ξεχωριστής σκηνής. |
int MinSceneLength; | Ορίζει μια ελάχιστη διάρκεια μιας ανιχνευθείσας σκηνής (σε καρέ). |
int RegisterGraph; | Έλεγχος καταχώρισης του εσωτερικού γραφήματος επεξεργασίας στο
he 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; | Καθορίζει την αρχική θέση μέσου για ανίχνευση σκηνών σε δευτερόλεπτα. Εάν αυτό είναι μη μηδενικό, τότε μην ξεχάσετε ότι όλοι οι χρόνοι σκηνών είναι σχετικοί με αυτήν τη θέση. |
double StopPosition; | Καθορίζει τη θέση διακοπής μέσου για ανίχνευση σκηνών σε δευτερόλεπτα. Ορίστε σε μηδέν για παράβλεψη. |
Δομή ThumbnailsParameters
Αυτή η δομή περιέχει παραμέτρους δημιουργίας μικρογραφιών.
int JpegFormat; | Επιλέξτε μορφή αρχείου. 0 - δημιουργία αρχείων BMP, 1 - δημιουργία αρχείων JPEG. |
int JpegQuality; | Ποιότητα συμπίεσης JPEG. Ακέραιος από 0 έως 100. |
int ImagesPerScene; | Αριθμός εικόνων ανά σκηνή. 1 - μόνο αρχικό καρέ, 2 - αρχικά και τελικά καρέ κάθε σκηνής. |
double Scale; | Συντελεστής κλιμάκωσης μικρογραφιών. 1 - εικόνα πλήρους μεγέθους. Τιμή κινητής υποδιαστολής. |
BSTR FileName; | Πρότυπο ονομάτων αρχείων μικρογραφιών. Συμβολοσειρά για τη συνάρτηση "C" "printf" με ένα ακέραιο πεδίο. |
Διεπαφή ISceneDetector
Αυτή η διεπαφή παρέχει μεθόδους για ανίχνευση σκηνών:
Μέθοδος DetectScenesInFile
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Αυτή είναι η κύρια μέθοδος ανίχνευσης σκηνών.
Περάστε παραμέτρους ανίχνευσης στο Params και δείκτη στο SAFEARRAY στο Scenes.
Εάν το Scenes είναι NULL, η συνάρτηση δεν επιστρέφει τη λίστα ανιχνευμένων σκηνών.
Ο καλούν δεν χρειάζεται να δημιουργήσει SafeArray πριν καλέσει αυτήν τη μέθοδο.
Εάν το Scenes δεν είναι NULL και μετά την κλήση συνάρτησης *Scenes δεν είναι επίσης NULL, ο καλούν πρέπει να καταστρέψει το SafeArray *Scenes.
*Scenes είναι ένας πίνακας δύο διαστάσεων. Για κάθε σκηνή που βρέθηκε, υπάρχουν δύο μακρές τιμές: αριθμοί αρχικού και διακοπής καρέ σκηνής. Αυτές οι τιμές είναι σχετικές με την αρχική θέση μέσου επεξεργασίας.
Περάστε έναν μη NULL δείκτη ως ThumbnailsParams για να ενεργοποιήσετε τη δημιουργία μικρογραφιών και να καθορίσετε τις παραμέτρους του. Περάστε NULL για να απενεργοποιήσετε τη δημιουργία μικρογραφιών.Επιστρέφει μια τιμή HRESULT. Οι πιθανές τιμές περιλαμβάνουν τα ακόλουθα:
0 Επιτυχία 0x80040601 Μη καθορισμένο σφάλμα 0x80040602 Το DirectShow δεν είναι εγκατεστημένο ή η έκδοση είναι πολύ παλιά 0x80040603 Δεν είναι δυνατή η λήψη διάρκειας βίντεο. Μπορεί να είναι ακόμα εικόνα 0x80040604 Εσφαλμένο όρισμα 0x80040605 Δεν είναι δυνατή η δημιουργία περιβάλλοντος συσκευής 0x80040606 Το αντικείμενο είναι απασχολημένο με μια άλλη εργασία 0x80040607 Ο ρυθμός καρέ ισούται με μηδέν. Μπορεί να είναι ακόμα εικόνα 0x80040608 Δεν είναι δυνατή η δημιουργία γραφήματος
Διεπαφή ISceneDetector2
Αυτή η διεπαφή προέρχεται από τη διεπαφή ISceneDetector και παρέχει εκτεταμένες μεθόδους για ανίχνευση σκηνών. Επιπλέον των μεθόδων που κληρονομούνται από το ISceneDetector, η διεπαφή ISceneDetector2 εκθέτει τις ακόλουθες μεθόδους:
Μέθοδος DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Σε αντίθεση με το DetectScenesInFile, αυτή η μέθοδος χρησιμοποιεί το σύνολο παραμέτρων DetectorParameters2, επομένως επιτρέπει τον καθορισμό χρωματικού χώρου, θέσεων έναρξης και διακοπής επεξεργασίας.
Δώστε προσοχή στο γεγονός ότι οι τιμές έναρξης και διακοπής σκηνών που επιστρέφονται από αυτήν τη μέθοδο είναι σχετικές με την τιμή Params.StartPosition.
Ανατρέξτε στην περιγραφή DetectScenesInFile για άλλες πληροφορίες.Μέθοδος GetFrameRate
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
Επιστρέφει ρυθμό καρέ βίντεο του τελευταίου επεξεργασμένου αρχείου. Χρήσιμο για μετάφραση χρόνου σε αριθμό καρέ.
Επιστρέφει S_OK ή E_INVALIDARG εάν το pFrameRate είναι NULL.
Διεπαφή συμβάντων ISceneDetectorEvents
Αυτή η διεπαφή συμβάντων παρέχει μεθόδους για την ανάκτηση πληροφοριών ανίχνευσης σκηνών σε πραγματικό χρόνο.
Μέθοδος NewScene
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
Συμβάν που ενεργοποιείται από τον ανιχνευτή όταν ορίζεται μια νέα σκηνή.
Το SceneIndex ξεκινά από το 0.
Τα Start και Stop ξεκινούν επίσης από το 0 και είναι αριθμοί καρέ.
Όταν η επεξεργασία ξεκίνησε μέσω της μεθόδου DetectScenesInFile2, οι τιμές Start και Stop είναι σχετικές με την τιμή Params.StartPosition.Μέθοδος Status
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
Συμβάν που ενεργοποιείται κάθε 50 ms και ενημερώνει τον πελάτη σχετικά με την κατάσταση της διαδικασίας.
Το AbortProcess είναι δείκτης σε μεταβλητή. Έτσι, ο πελάτης μπορεί να ορίσει *AbortProcess σε τιμή 1 για να ακυρώσει την τρέχουσα ανίχνευση σκηνής.