Απλή Ζωή

Αντιστροφή του βίντεο με χρήση του Computer Vision

Αυτό το άρθρο δημοσιεύτηκε ως μέρος του Data Science Blogathon.

Εισαγωγή

Σε αυτό το άρθρο, θα εργαστούμε για την ανάπτυξη μιας εφαρμογής από τεχνικές όρασης υπολογιστή που θα αντιστρέφει το βίντεο και επίσης, θα μπορούμε να αποθηκεύσουμε αυτό το αντίστροφο βίντεο στο τοπικό μας σύστημα. Σε αυτήν την εφαρμογή, θα έχουμε επίσης πρόσβαση για να αλλάξουμε την ποιότητά της όπως 360/720p.

Ας καταλάβουμε λοιπόν πρώτα τι θα πρέπει να κάνουμε για να φτιάξουμε αυτήν την εφαρμογή.

Βήματα για τη δημιουργία αυτής της εφαρμογής

Αυτή η ενότητα θα συζητήσει τα βήματα που πρέπει να γίνουν για τη δημιουργία αυτής της εφαρμογής. Εδώ, θα ρυθμίσουμε το πρότυπο και θα ακολουθήσουμε αυτήν την προσέγγιση σε όλο το σεμινάριο.

  1. Εισαγωγή της βιβλιοθήκης cv2: Αυτή είναι μια αρκετά απλή δουλειά, επομένως θα εισαγάγουμε απλώς το cv2, δηλαδή τη βιβλιοθήκη όρασης υπολογιστή της Python.
  1. Ανάγνωση/Λήψη βίντεο: Στη συνέχεια, θα διαβάσουμε το βίντεο που θέλουμε να αντιστρέψουμε.
  1. Εργασία με πλαίσια: Σε αυτήν την ενότητα, θα εργαστούμε με καρέ του βίντεο για να λάβουμε την ταχύτητα επεξεργασίας, δηλαδή τα καρέ ανά δευτερόλεπτο και την καταμέτρηση του καρέ.
  1. Ύψος και πλάτος: Εδώ, απλώς θα εξαγάγουμε το ύψος και το πλάτος του βίντεο που έχουμε διαβάσει, ώστε να μπορούμε να το χρησιμοποιήσουμε σε περαιτέρω τμήματα επανακλιμάκωσης.
  1. Επανακλιμάκωση και ρύθμιση του τύπου εξόδου βίντεο: Τώρα, σε αυτό το μέρος, απλώς θα αναπροσαρμόσουμε την κλίμακα του βίντεό μας σε ένα συγκεκριμένο μέγεθος και θα ορίσουμε τον τύπο του βίντεο που θα αποθηκεύσουμε στο τέλος.
  1. Κάντε βρόχο τα πάντα σε: Επιτέλους, θα βάλουμε τα πάντα στο βρόχο με ορισμένες προϋποθέσεις που σχετίζονται με τα καρέ και είμαστε έτοιμοι να αντιστρέψουμε το βίντεό μας.

Πρωτότυπο βίντεο

Πριν εργαστούμε στο κομμάτι της κωδικοποίησης, θα πρέπει να γνωρίζουμε πώς είναι το αρχικό μας βίντεο! ώστε ενώ βλέπουμε τα αποτελέσματα, να μπορούμε εύκολα να τα συγκρίνουμε και τα δύο. Αυτό το βίντεο λοιπόν είναι αλens το άνοιγμα του πακέτου βίντεο από το YouTubeκαι σε αυτό το άρθρο, θα εργαστούμε μόνο σε αυτό το βίντεο και θα αντιστρέψουμε το ίδιο χρησιμοποιώντας τεχνικές όρασης υπολογιστή.

Εδώ λοιπόν εισάγουμε μόνο τη βιβλιοθήκη όρασης υπολογιστή, π.χ cv2.

import cv2

Διαβάζοντας το παράδειγμα του βίντεο

Εδώ λοιπόν έρχεται το βήμα που θα διαβάσουμε το βίντεό μας. Πρώτα λοιπόν, ας δούμε τον κώδικα και μετά θα τον συζητήσουμε.

cap = cv2.VideoCapture('sample2.mp4')

Οπότε βασικά, χρησιμοποιούμε τα cv2 Λειτουργία λήψης βίντεο προς την διαβάστε το βίντεο. Για αυτό, απλώς περνάμε το διαδρομή του βίντεο στην παράμετρο που περικλείεται μέσα εισαγωγικά; μόλις έχετε υπόψη σας ένα πράγμα, εάν το βίντεο βρίσκεται στον ίδιο φάκελο, τότε δεν χρειάζεται αντ’ αυτού χρησιμοποιήστε την πλήρη διαδρομή. χρησιμοποιήστε το όνομα του βίντεο με την επέκτασή του.

Έτσι, σε αυτή τη συγκεκριμένη ενότητα, θα εργαστούμε για την απόκτηση ο συνολικός αριθμός πλαισίων που περιέχει το βίντεό μας και γι’ αυτό θα συνεργαστούμε το FRAME COUNT αντικείμενο

frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)

Έτσι, εδώ, μπορεί κανείς εύκολα να αποκωδικοποιήσει τη λειτουργικότητα ενώ αναλύει το όνομα της συνάρτησης:

  • ΚΑΠ: Λήψη
  • PROP: Ιδιοκτησία
  • FRAME_COUNT: Συνολικός αριθμός καρέ

Χρησιμοποιούμε όμως τον πιο αποτελεσματικό τρόπο για να λάβουμε τον συνολικό αριθμό καρέ ανά δευτερόλεπτο; Η απλή απάντηση είναι «ΝΑΙ!»

Λόγος: Αν πάμε να μετρήσουμε τα πλαίσια χρησιμοποιώντας ένα βρόχο και να αυξήσουμε τον μετρητή κάθε φορά, τότε θα είναι μια εξαντλητική διαδικασία τόσο για τον προγραμματιστή όσο και για την CPU λόγω του χρόνου επεξεργασίας, αλλά αν χρησιμοποιήσουμε την ενσωματωμένη μέθοδο, τότε μπορούμε να ξεφύγουμε και από τα δύο προβλήματα.

Έτσι, λίγο πριν αποκτήσουμε πρόσβαση στον συνολικό αριθμό καρέ του βίντεο τώρα, θα προσπαθήσουμε να το αποκτήσουμε καρέ ανά δευτερόλεπτο (FPS).

fps = cap.get(cv2.CAP_PROP_FPS)

Εάν έχετε την ιδέα της μέτρησης του συνολικού αριθμού καρέ, αυτό θα είναι πολύ εύκολο να το καταλάβετε. Αν αναλύσουμε την ενσωματωμένη συνάρτηση μέτρησης FPS, τότε μπορούμε να δούμε την παρακάτω συντομογραφία:

  • ΚΑΠ: Λήψη
  • PROP: Ιδιοκτησία
  • FPS: Καρέ ανά δευτερόλεπτο

Λάβετε το ύψος και το πλάτος του βίντεο

Εδώ θα είμαστε υπολογίζοντας το ύψος και το πλάτος του βίντεο ώστε να μπορούμε να ανανεώσουμε την κλίμακα του βίντεο εξόδου με βάση τις προτιμήσεις μας.

height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
  • Υψος: Η ενσωματωμένη λειτουργία που χρησιμοποιήσαμε εδώ είναι CAP_PROP_FRAME_HEIGHT, όπου μπορούμε να το δούμε FRAME_HEIGHT θα πάρει το ύψος κάθε καρέ, δηλαδή για το πλήρες βίντεο.
  • Πλάτος: Ομοίως, το FRAME_WIDTH θα χρησιμοποιηθεί για την εύρεση του πλάτους του βίντεο.

Εκκίνηση του Output Writer για το βίντεο

Τώρα θα χρησιμοποιήσουμε πρώτα το Video Writer, ο μέθοδος fourcc, να δώσουμε τον κωδικό 4 χαρακτήρων στο βίντεο εξόδου για να συμπιέσουμε τα καρέ ανάλογα με τις ανάγκες μας. Εδώ χρησιμοποιούμε τον κωδικό χαρακτήρα «MJPG» για να συμπιέσουμε τα καρέ. Είναι επίσης γνωστό ως κωδικοποιητής βίντεο και έχουμε μια ποικιλία από κωδικοποιητές βίντεο ότι μπορούμε να περάσουμε στη συνάρτηση ως παράμετρο αν θέλουμε να δούμε τη λίστα των παραμέτρων, τότε δηλαδή διαθέσιμο στη σελίδα FOURCC.

Σημείωση: Χρησιμοποιούμε τον κωδικό χαρακτήρων MJPG που σημαίνει κωδικοποιητής κίνησης-jpeg.

Τότε είμαστε απλά επαναβαθμίζοντας το βίντεο εξόδου στη μισή αναλογία τους, δηλαδή μειώνεται στο 50% τόσο για το ύψος όσο και για το πλάτος.

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('reversed2.avi', fourcc,fps ,(int(width*0.5), int(height*0.5)))

Ας εκτυπώσουμε μερικά αποτελέσματα

  1. Συνολικός αριθμός πλαισίων
  2. Καρέ ανά δευτερόλεπτο κατά την επεξεργασία.
print("No. of frames are : {}".format(frames))
print("FPS is :{}".format(fps))

Παραγωγή:

No. of frames are : 488.0
FPS is :25.0

Εδώ θα ανακτήσουμε το ευρετήριο, δηλ θέση του τελευταίου καρέ του βίντεο μας.

frame_index = frames-1

Τελικό Βήμα

Ας βάλουμε τα πάντα σε έναν κύκλο για να έχουμε κάποια αποτελέσματα. εδώ, θα εκτελέσουμε όλες τις προηγούμενες λειτουργίες που έχουν ήδη γίνει σε βρόχο και στη συνέχεια θα αποθηκεύσουμε το βίντεο στο τοπικό μας σύστημα

if(cap.isOpened()):

    while(frame_index!=0):

        cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
        ret, frame = cap.read()

        frame = cv2.resize(frame,(int(width*0.5), int(height*0.5)))

        out.write(frame)

        frame_index = frame_index-1

        if(frame_index%100==0):
            print(frame_index)

out.release()
cap.release()
cv2.destroyAllWindows()

Παραγωγή:

400.0
300.0
200.0
100.0
0.0

Ανάλυση κώδικα:

  1. Ας ελέγξουμε πρώτα ότι το στιγμιότυπο του βίντεο είναι έτοιμο; με τη βοήθεια της συνάρτησης open().. Αν ναι,
  2. Μετά θα διαβάσουμε τα καρέ μέχρι το τέλος του βίντεο χρησιμοποιώντας το ευρετήριο πλαισίου
  3. Τώρα, καθώς θέλουμε να λάβουμε το αντίστροφο βίντεο, θα το κάνουμε αρχικοποιήστε τη θέση του τρέχοντος πλαισίου μέχρι το τελευταίο πλαίσιο.
  4. Προαιρετικός: Τώρα, αν θέλουμε να δούμε το ζωντανό αντίστροφο βίντεο, μπορούμε να πάμε για cv2.imshow(‘όνομα’, καρέ), αλλά,
  5. Αν θέλουμε κατεβάστε (γράψτε) το βίντεο στο τοπικό μας σύστημα, τότε θα χρησιμοποιήσουμε τη μέθοδο εγγραφής και μετά από κάθε βήμα, απλώς θα μειώσουμε τον δείκτη πλαισίου.
  6. Το τελευταίο βήμα θα είναι να εκτυπώστε την τιμή του πλαισίου (αυτό είναι μόνο για τον έλεγχο της προόδου) και μετά απελευθερώστε τα στιγμιότυπα και καταστρέψτε το παράθυρο.

Παραγωγή:

Έτσι, εδώ μπορούμε να δούμε ότι το Το αρχικό βίντεο έχει αντιστραφεί με επιτυχία με τη βοήθεια όλης της όρασης υπολογιστή που κάναμε προηγουμένως.

Σημείωση: Αυτό το βίντεο έχω πρώτα με τη βοήθεια του συνάρτηση write(). και αργότερα ανέβηκε στο δικό μου Κανάλι YouTube.

συμπέρασμα

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

  1. Το πρώτο στοιχείο από αυτό το άρθρο είναι ότι μάθαμε πώς να το κάνουμε εργαστείτε με καρέ όταν πρόκειται για βίντεο, τόσο τοπικά όσο και σε πραγματικό χρόνο.
  2. Μάθαμε επίσης τον πιο βέλτιστο τρόπο λήψη των καρέ του βίντεο και του χρόνου επεξεργασίας του χρησιμοποιώντας την ενσωματωμένη λειτουργία.
  3. Στη συνέχεια, μαζί με τη συγγραφή του βίντεο μετά από προεπεξεργασία, παρατηρήσαμε επίσης πώς μια απλή σύσπαση και στροφή θα μπορούσε να μας δώσει τη σωστή έξοδο (εδώ είναι το αντίστροφο βίντεο).

Εδώ είναι το ρεπό Σύνδεσμος σε αυτό το άρθρο. Ελπίζω να σας άρεσε το άρθρο μου σχετικά με την αντιστροφή του βίντεο χρησιμοποιώντας την όραση υπολογιστή. Εάν έχετε οποιεσδήποτε απόψεις ή ερωτήσεις, σχολιάστε παρακάτω.

Συνδεθείτε μαζί μου LinkedIn για περαιτέρω συζήτηση.

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του συγγραφέα.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button