[PYTHON] Das beste Werkzeug, um Ihre Privatsphäre vor Fotos zu schützen ...!

Einführung

Es versteht sich von selbst, dass die Welt, in der heutzutage Informationen ausgetauscht werden, und die Privatsphäre der Menschen als wichtig angesehen werden. Aufgrund dieser Ära brauchen wir etwas, das unsere Privatsphäre schützt ... Ich dachte schon, ich dachte darüber nach.

** Soll ich mir die Fotos ansehen können ...? **

Also habe ich es geschafft.

(Ehrlich gesagt habe ich es ohne nachzudenken geschafft.)

Eine Sichtlinie setzen

Mir wurde klar, dass man zuerst seine Augen und sein Gesicht erkennen muss, um einen Blick darauf zu werfen. Aus diesem Grund habe ich mich für eine Bibliothek entschieden, die Gesichter erkennt, und für eine Bibliothek, die Augen in OpenCV-Daten erkennt. Ich bin mir über die Details nicht sicher, aber irgendwie ist nur der Code zum Erkennen des Gesichts heruntergekommen, also habe ich ein wenig damit gespielt und das Programm zum Erkennen der Augen wurde abgeschlossen. (Die Bibliothek, die heruntergekommen ist, ist [von hier](https://qiita.com/GoshBird/items/c0c241d08087c70aa394#%E7%94%BB%E5%83%8F%E3%82%92%E8%AA%AD% E3% 82% 80) Siehe.)

Hier ist ein Foto, das damit erstellt wurde. Das Gesicht ist als Quadrat und die Augen als Kreis dargestellt. EJ4zPDIUEAAZevu.jpeg Es sieht so aus, als würde ein Kind mit einem roten Stift ein großes Loch in das Loch im Bild machen. Es gibt jedoch ein Problem mit diesem Bild, und Sie können sehen, dass es die Nase, den Mund und sogar den Doppelkiefer als Augen erkennt. Dies kann die Privatsphäre nicht schützen ...!

Also dachte ich über Gesichtszüge nach. Wenn das Gehirn nicht sehr groß ist, sollten sich die Augen wahrscheinlich über der Hälfte des Gesichts befinden. Daher habe ich beschlossen, nur die Punkte, die mehr als die Hälfte über dem Quadrat des Gesichts liegen, als Augen zu erkennen.

Auf diese Weise konnte ich die Beziehung zwischen Gesicht und Augen schreiben, sodass die Größe des Quadrats der Sichtlinie dem Quadrat des Gesichts in der Breite entspricht und die Vertikale die Oberseite aller als Augen erkannten Stellen ist Ich habe versucht, den Teil und den unteren Teil zu übernehmen.

Programm

Das damit geschriebene Programm ist das folgende Programm.

Wanted_photo.ipynb


import cv2
import matplotlib.pyplot as plt

image_name = input("File Name?")

src=cv2.imread(image_name)
image_gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY) #Graustufen
color=(0,0,255) #Kakomu Typ(rot)
color_c=(255,0,0) #Derjenige, der trifft(Punkt,Blau)
cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml") #Import von Trainingsdaten
# eye_right = cv2.CascadeClassifier("haarcascade_righteye_2splits.xml")#Daten für das rechte Auge
# eye_left = cv2.CascadeClassifier("haarcascade_lefteye_2splits.xml")#Daten für das linke Auge
eyecascade = cv2.CascadeClassifier("haarcascade_eye.xml")#Augendaten

#Ein Zauber zum Verwalten
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(50,50))
# reyerect = eye_right.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(30,30))
# leyerect = eye_left.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(30,30))
eyerect = eyecascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(30,30))

max_width = 0
upper_heigh = 99999
lower_heigh = 0
max_rect = [0,0,0,0]

        
if len(facerect) > 0:#Derjenige, der die Breite entscheidet
    for rect in facerect:
        #print(rect[0:4])
        if rect[2] > max_width:
            max_width = rect[2] - rect[0]
            max_rect = rect[0:4]
            
if len(eyerect) > 0:#Derjenige, der die vertikale Breite bestimmt
    for rect in eyerect:
        #print(rect[0:4])
        if max_rect[0] < rect[0] and max_rect[0] + max_rect[2] > rect[0] + rect[2] and max_rect[1] < rect[1] and max_rect[1] + max_rect[3] /2 > rect[1] + rect[3]/2:
            if upper_heigh >rect[1]:
                upper_heigh = rect[1]
            elif lower_heigh < rect[1] + rect[3]:
                lower_heigh = rect[1] + rect[3]
                
rect[0:4] = [max_rect[0],upper_heigh,max_rect[2],lower_heigh - upper_heigh]#Der Typ, der seine Augen auflegt
cv2.rectangle(src,tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]),(0,0,0),thickness = -10)
print(rect[0:4])
        
cv2.imwrite(image_name+"_result_eye.jpg ",src)#Derjenige, der gerettet werden soll
cv2.destroyAllWindows() #Gefühl der offenen Erinnerung

Es gibt einige Spuren von Versuch und Irrtum, aber keine Sorge!

Ergebnis

Als ich das vorherige Foto verarbeitete, sah es so aus. dandaIMGL5054_TP_V.jpg_result_eye.jpg Gute Stimmung! IVOL_STUDIO_005_TP_V4.jpg_result_eye.jpg Das beste!

So konnte ich die Privatsphäre der Welt schützen.

Probleme mit diesem Programm

Tatsächlich ist es jedoch eine Spezifikation, dass nur eine Person die Privatsphäre pro Foto schützen kann. Ich denke, dass dies nur auf dem Blog eines berühmten Bloggers (und dem ersten Frontfoto) praktisch ist. .. Das ist traurig! (Ich habe alle Gesichter überprüft, und wenn es keine zutreffenden Augen gibt, habe ich das Gefühl, dass ich es mit dem nächsten Gesicht tun kann, ohne es anzusehen ...) Außerdem lag die korrekte Antwortrate bei etwa 70%, wie ich bestätigt habe. Es kann Raum für Verbesserungen in Bezug auf die Genauigkeit geben ...

Oder besser gesagt, ich denke, ich sollte eine andere Bibliothek verwenden, ohne OpenCV zu verwenden ...

Wenn Sie wieder Lust dazu haben, werde ich die Privatsphäre einer großen Anzahl von Menschen schützen!

(Danke, dass du bis zum Ende herumgespielt hast.)

Recommended Posts

Das beste Werkzeug, um Ihre Privatsphäre vor Fotos zu schützen ...!
Führen Sie die Matrix zum Terminal Ihres Chefs!
So bedienen Sie Linux von der Konsole aus
So greifen Sie von außen auf den Datenspeicher zu
3 beste Möglichkeiten, den Befehl less zu verwenden
Übertragen Sie Benachrichtigungen über die Linux-Befehlszeile oder das Skript auf Ihr Smartphone. (Einführung eines Tools namens ntfy)
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
So bedienen Sie Linux von außen Vorgehensweise
POST-Images von ESP32-CAM (MicroPython) an den Server
So messen Sie die Leitungsgeschwindigkeit vom Terminal aus
[Python] Geben Sie Ihr Bestes, um SQL Alchemy zu beschleunigen
Bewegen Sie Ihre Hand, um die Chi-Quadrat-Verteilung zu verstehen
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Die Geschichte vom Umzug von Pipenv zur Poesie
[Für Anfänger] Sprachanalyse mit dem Verarbeitungswerkzeug "GiNZA" (von der morphologischen Analyse bis zur Vektorisierung)