Μπορείτε να χρησιμοποιήσετε το θάμπωμα προσώπου για να κρύψετε το πρόσωπο ενός ατόμου, σε ένα βίντεο ή μια εικόνα, για διάφορους λόγους. Τα ζητήματα απορρήτου και ασφάλειας είναι τα πιο κυρίαρχα. Οι περισσότερες πλατφόρμες κοινής χρήσης βίντεο και λογισμικό επεξεργασίας βίντεο έχουν ενσωματωμένη λειτουργία θολώματος προσώπου.
Μπορείτε να δημιουργήσετε το δικό σας πρόγραμμα θολώματος προσώπου από την αρχή χρησιμοποιώντας την Python και τις βιβλιοθήκες OpenCV και NumPy.
Ρύθμιση του περιβάλλοντος σας
Για να συνεχίσετε με αυτό το άρθρο, πρέπει να είστε εξοικειωμένοι με το βασικά της Python και έχουν μια βασική κατανόηση χρησιμοποιώντας τη βιβλιοθήκη NumPy.
Ανοίξτε οποιοδήποτε Python IDE με το οποίο αισθάνεστε άνετα. Δημιουργήστε ένα εικονικό περιβάλλον στο οποίο θα εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες. Δημιουργήστε ένα νέο αρχείο Python. Μεταβείτε στο τερματικό και εκτελέστε την ακόλουθη εντολή για να εγκαταστήσετε τις απαιτούμενες βιβλιοθήκες. Μεταβιβάστε τις βιβλιοθήκες ως λίστα οριοθετημένη με χώρο.
pip εγκατάσταση OpenCV-python NumPy
Θα χρησιμοποιήσετε το OpenCV για λήψη και προεπεξεργασία της εισόδου βίντεο και το NumPy για εργασία με πίνακες.
Αφού εγκαταστήσετε τις βιβλιοθήκες, περιμένετε μέχρι το IDE να ενημερώσει τους σκελετούς του έργου. Όταν ολοκληρωθεί η ενημέρωση και το περιβάλλον είναι έτοιμο, είστε ελεύθεροι να ξεκινήσετε την κωδικοποίηση.
Ο πλήρης πηγαίος κώδικας είναι διαθέσιμος σε α Αποθετήριο GitHub.
Εισαγωγή των Απαιτούμενων Βιβλιοθηκών
Ξεκινήστε εισάγοντας βιβλιοθήκες OpenCV και NumPy. Αυτό θα σας επιτρέψει να καλέσετε και να χρησιμοποιήσετε όλες τις λειτουργίες που υποστηρίζουν. Εισαγάγετε το OpenCV-python ως cv2.
εισαγωγή cv2
εισαγωγή μουδιασμένος όπως και np
Οι λειτουργικές μονάδες OpenCV-python χρησιμοποιούν το όνομα cv2 ως σύμβαση που δημιούργησε η κοινότητα OpenCV. Το OpenCV-python είναι ένα περιτύλιγμα Python της βιβλιοθήκης OpenCV που είναι γραμμένο σε C++.
Λαμβάνοντας τη συμβολή σας
Δημιουργήστε μια μεταβλητή και αρχικοποιήστε την Λήψη βίντεο αντικείμενο. Περάστε το μηδέν ως το όρισμα εάν θέλετε να χρησιμοποιήσετε την κύρια κάμερα του υπολογιστή σας ως πηγή εισόδου. Για να χρησιμοποιήσετε μια εξωτερική κάμερα συνδεδεμένη στον υπολογιστή σας περάστε ένα. Για να εκτελέσετε θόλωση προσώπου σε ένα προεγγεγραμμένο βίντεο, περάστε τη διαδρομή του βίντεο. Προς την χρησιμοποιήστε μια απομακρυσμένη κάμερα, περάστε τη διεύθυνση URL της κάμερας που περιέχει τη διεύθυνση IP και τον αριθμό θύρας της.
cap = cv2.VideoCapture(0)
Για να εκτελέσετε θόλωση προσώπου στην είσοδο, θα χρειαστείτε τρεις λειτουργίες:
- Μια συνάρτηση που θα προεπεξεργάζεται την είσοδο.
- Μια λειτουργία που θα θολώσει το πρόσωπο στην είσοδο.
- Μια κύρια λειτουργία που θα ελέγχει τη ροή του προγράμματος και θα εμφανίζει την έξοδο.
Προεπεξεργασία της εισόδου βίντεο
Δημιουργήστε μια συνάρτηση προεπεξεργασίας εισόδου που θα παίρνει ως είσοδο κάθε καρέ του βίντεο εισόδου. Εκκινήστε την κλάση CascadeClassifier που θα χρησιμοποιήσετε για την ανίχνευση προσώπου. Αλλάξτε το μέγεθος του πλαισίου σε 640 επί 640 pixel. Μετατρέψτε το μέγεθος του πλαισίου σε κλίμακα του γκρι για ευκολότερη επεξεργασία και, τέλος, εντοπίστε τα πρόσωπα στην είσοδο και συνδέστε τα με ορθογώνια.
defimage_preprocess(πλαίσιο):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')resized_image = cv2.resize (πλαίσιο, (640, 640))
gray_image = cv2.cvtColor (resized_image,
cv2.COLOR_BGR2GRAY)face_rects = face_detector.detectMultiScale(
γκρι_εικόνα, 1.04, 5, minSize=(20, 20))
ΕΠΙΣΤΡΟΦΗ resized_image, face_rects
Αυτή η συνάρτηση επιστρέφει μια πλειάδα που περιέχει την εικόνα με αλλαγή μεγέθους και μια λίστα ορθογωνίων που αντιπροσωπεύει τα πρόσωπα που έχουν εντοπιστεί.
Θάμπωμα του προσώπου
Δημιουργήστε μια λειτουργία θολώματος που θα θολώνει τα πρόσωπα στην καταχώρισή σας. Η συνάρτηση λαμβάνει ως είσοδο το πλαίσιο αλλαγής μεγέθους και τη λίστα των ορθογωνίων που οριοθετούν τις όψεις που επιστρέφονται από τη συνάρτηση προεπεξεργασίας. Βρόχοι πάνω από κάθε ορθογώνιο όψης. Υπολογίζει το κέντρο κάθε ορθογωνίου και την ακτίνα του κύκλου που θολώνει. Δημιουργεί μια μαύρη εικόνα με τις ίδιες διαστάσεις με το πλαίσιο αλλαγής μεγέθους αρχικοποιώντας όλα τα pixel στο μηδέν. Σχεδιάζει έναν λευκό κύκλο στη μαύρη εικόνα του οποίου το κέντρο βρίσκεται στο ορθογώνιο της όψης χρησιμοποιώντας την υπολογισμένη ακτίνα. Τέλος, θολώνει την εικόνα στον λευκό κύκλο.
defface_blur(resized_frame, face_rects):
Για (x, y, w, h) σε face_rects:
# Καθορισμός του κέντρου και της ακτίνας
# του θολώματος κύκλου
κέντρο_x = x + w // 3
κέντρο_υ = y + h // 3
ακτίνα = h // 1# δημιουργία μιας μαύρης εικόνας με παρόμοια
# διαστάσεις ως πλαίσιο
mask = np.zeros((resized_frame.shape[:3]), np.uint8)# σχεδιάστε έναν λευκό κύκλο στην περιοχή του προσώπου του πλαισίου
cv2.circle (μάσκα, (center_x, center_y), ακτίνα,
(255, 255, 255), -1)# θόλωση ολόκληρου του καρέ
blurred_image = cv2.medianBlur (μεταβολή μεγέθους_πλαισίου, 99)# ανακατασκευή του πλαισίου:
# - τα εικονοστοιχεία από το θολό πλαίσιο εάν μάσκα > 0
# - διαφορετικά, πάρτε τα pixel από το αρχικό πλαίσιο
resized_frame = np.where (μάσκα > 0, blurred_image,
resized_frame)
ΕΠΙΣΤΡΟΦΗ αλλαγή μεγέθους_πλαισίου
Η συνάρτηση χρησιμοποιεί το NumPy που() λειτουργία για ανακατασκευή του πλαισίου κατά τη διάρκεια του θολώματος.
Έλεγχος της ροής του προγράμματός σας
Δημιουργήστε μια κύρια συνάρτηση που θα λειτουργεί ως το σημείο εισόδου του προγράμματός σας. Στη συνέχεια θα ελέγχει τη ροή του προγράμματος. Η λειτουργία θα ξεκινήσει έναν άπειρο βρόχο για να καταγράφει συνεχώς τα καρέ της εισόδου βίντεο. Καλέστε τη μέθοδο ανάγνωσης του αντικειμένου καλύμματος για να διαβάσετε ένα πλαίσιο από την κάμερα.
Στη συνέχεια, η συνάρτηση θα περάσει το πλαίσιο στη συνάρτηση προεπεξεργασίας και θα μεταβιβάσει τις επιστρεφόμενες τιμές σε μια άλλη συνάρτηση, face_blur, για να αποκτήσει μια θολή εικόνα. Στη συνέχεια αλλάζει το μέγεθος του πλαισίου που επιστρέφεται από τη λειτουργία θολώματος και εμφανίζει την έξοδο.
defκύριος():
ενώΑληθής:
επιτυχία, πλαίσιο = cap.read()
resized_input, face_rects = image_preprocess (πλαίσιο)
blurred_image = face_blur (μετατροπή_εισόδου, face_rects)# Εμφάνιση της θολής εικόνας
cv2.imshow("Θολή εικόνα", cv2.resize (blurred_image, (500, 500)))
αν cv2.waitKey(1) == Ord("q"):
Διακοπή
Η λειτουργία τερματίζει επίσης την εμφάνιση εξόδου όταν ο χρήστης πατήσει το πλήκτρο q.
Εκτέλεση του Προγράμματος
Βεβαιωθείτε ότι η κύρια λειτουργία εκτελείται πρώτη όταν εκτελείτε το σενάριο. Αυτή η συνθήκη θα είναι ψευδής εάν εισαγάγετε το σενάριο ως λειτουργική μονάδα σε άλλο πρόγραμμα.
αν __όνομα__ == "__κύριος__":
κύριος()
Αυτό σας επιτρέπει να χρησιμοποιήσετε το σενάριο ως λειτουργική μονάδα ή να το εκτελέσετε ως αυτόνομο πρόγραμμα. Όταν εκτελείται το πρόγραμμα, θα πρέπει να δείτε έξοδο παρόμοια με αυτό:
Το πρόσωπο είναι θολό και αγνώριστο.
Εφαρμογές θόλωσης προσώπου στον πραγματικό κόσμο
Μπορείτε να εφαρμόσετε θόλωση προσώπου σε πολλούς τύπους εφαρμογών για να προστατεύσετε το απόρρητο των ατόμων. Οι υπηρεσίες Street View και χαρτογράφησης χρησιμοποιούν το θάμπωμα για να θολώνουν τα πρόσωπα των ανθρώπων στις εικόνες που τραβούν. Οι αρχές επιβολής του νόμου χρησιμοποιούν θόλωση προσώπου για την προστασία της ταυτότητας των μαρτύρων.
Πολλές πλατφόρμες κοινής χρήσης βίντεο έχουν επίσης ενσωματώσει μια λειτουργία θαμπώματος προσώπου για τους χρήστες τους. Η σύγκριση της χρήσης του θαμπώματος προσώπου σε αυτές τις περιοχές θα σας βοηθήσει να παρατηρήσετε πώς άλλες πλατφόρμες ενσωματώνουν την τεχνολογία.