EDIT : Ich habe ein Python-Skript dafür geschrieben.
Da Ihr Ziel verschwimmt (zum Schutz der Privatsphäre), benötigen Sie als ersten Schritt grundsätzlich einen Detektor mit hohem Rückruf . Hier erfahren Sie, wie Sie dies tun. Die enthaltenen Codehinweise verwenden OpenCV mit Python.
- In Graustufen konvertieren.
Wenden Sie Gaußsche Unschärfe an.
img = cv2.imread('input.jpg',1)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)
Das Eingabebild sei das folgende.
- Wenden Sie den Sobel-Filter an, um vertikale Kanten zu erkennen.
Schwellenwert für das resultierende Bild unter Verwendung eines strengen Schwellenwerts oder der Binärisierung von OTSU.
cv2.Sobel(image, -1, 1, 0)
cv2.threshold()
Wenden Sie eine morphologische Schließoperation mit einem geeigneten Strukturierungselement an. (Ich habe 16x4 als Strukturierungselement verwendet)
se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)
Ergebnisbild nach Schritt 5.
Finden Sie Außenkonturen dieses Bildes.
cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
Finden minAreaRect()Sie für jede Kontur die Begrenzung.
- Wählen Sie Rechtecke basierend auf dem Seitenverhältnis, der minimalen und maximalen Fläche und dem Winkel zur Horizontalen aus. (Ich habe 2,2 <= Seitenverhältnis <= 8, 500 <= Fläche <= 15000 und Winkel <= 45 Grad verwendet)
Alle minAreaRect()s sind orange dargestellt und diejenige, die unsere Kriterien erfüllt, ist grün.
- Nach diesem Schritt kann es zu Fehlalarmen kommen. Verwenden Sie zum Filtern die Kantendichte. Die Kantendichte ist definiert als die Anzahl der weißen Pixel / die Gesamtzahl der Pixel in einem Rechteck. Legen Sie einen Schwellenwert für die Kantendichte fest. (Ich habe 0,5 verwendet)
- Verwischen Sie die erkannten Regionen.

Sie können andere Filter anwenden, die Sie für geeignet halten, um den Rückruf und die Präzision zu erhöhen. Die Erkennung kann auch mit HOG + SVM trainiert werden, um die Präzision zu erhöhen.