[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV

Ich habe die Gesichtserkennung von dlib und OpenCV verglichen. Es ist ein Video, das ich von Zeit zu Zeit sehe, aber ich wollte es selbst ausprobieren, also probieren Sie es aus.

dlib ist genauer in Bezug auf die Orientierung, OpenCV fühlt sich schneller an (dank Adaboost? Wenn es im Geschäftsleben eingesetzt werden soll, wird es genauer untersucht.

Linux ist einfacher zu installieren, also mache ich es mit Ubutntu. Selbst unter Windows sollte die Installation von dlib mit derselben Quelle funktionieren. .. .. ??

Das Video ist unten. Rot ist die Erkennung durch OpenCV und Blau ist die Erkennung durch dlib. https://www.youtube.com/watch?v=SQTXLfwlPjQ [Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV

Der Quellcode ist unten. Damit dies funktioniert, legen Sie die von OpenCV trainierten Daten im selben Verzeichnis wie die py-Datei ab. Muss platziert werden. →./data/haarcascades/haarcascade_frontalface_alt.xml


#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
face_landmark_detector.py.

Usage:
  face_landmark_detector.py [<video source>] [<resize rate>]
'''

import sys
import dlib
import cv2
import time
import copy

try:
    fn = sys.argv[1]
    if fn.isdigit() == True:
        fn = int(fn)
except:
    fn = 0

try:
    resize_rate = sys.argv[2]
    resize_rate = int(resize_rate)
except:
    resize_rate = 1

# Dlib
detector = dlib.get_frontal_face_detector()

# OpenCV
cascade_fn = "./data/haarcascades/haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_fn)

video_input = cv2.VideoCapture(fn)

total_frame_count = 0
face_detection_frame_count_dlib = 0
face_detection_frame_count_opencv = 0

while(video_input.isOpened() == True):
    total_frame_count += 1

    ret, frame = video_input.read()
    temp_frame = copy.deepcopy(frame)

    #Reduzierung des Zielrahmens zur Reduzierung der Verarbeitungslast (wenn ein Argument angegeben wird)
    height, width = frame.shape[:2]
    temp_frame = cv2.resize(frame, (int(width/resize_rate), int(height/resize_rate)))

    #Gesichtserkennung(dlib)
    start = time.time()
    dets = detector(temp_frame, 1)
    elapsed_time_dlib = time.time() - start

    if len(dets) > 0:
        face_detection_frame_count_dlib += 1

    #Zeichnung des Erkennungsergebnisses (dlib)
    for k, d in enumerate(dets):
        cv2.rectangle(frame, (int(d.left() * resize_rate), int(d.top() * resize_rate)), \
            (int(d.right() * resize_rate), int(d.bottom() * resize_rate)), (255, 0, 0), -1)

    #Gesichtserkennung(opencv)
    gray_image = cv2.cvtColor(temp_frame, cv2.COLOR_BGR2GRAY)
    gray_image = cv2.equalizeHist(gray_image)

    start = time.time()
    rects = cascade.detectMultiScale(gray_image, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
    if len(rects) == 0:
        rects = []
    else:
        rects[:,2:] += rects[:,:2]
    elapsed_time_opencv = time.time() - start


    if len(rects) > 0:
        face_detection_frame_count_opencv += 1

    #Zeichnung des Erkennungsergebnisses (OpenCV)
    for x1, y1, x2, y2 in rects:
        cv2.putText(frame, "OpenCV", (int(x1 * resize_rate), int(y1 * resize_rate)), cv2.FONT_HERSHEY_PLAIN, 2.0, (0, 0, 255), thickness = 2)
        cv2.rectangle(frame, (int(x1 * resize_rate), int(y1 * resize_rate)), (int(x2 * resize_rate), int(y2 * resize_rate)), (0, 0, 255), -1)
    #Zeichnung des Erkennungsergebnisses (dlib)
    for k, d in enumerate(dets):
        cv2.putText(frame, "Dlib", (int(d.left() * resize_rate), int(d.top() * resize_rate)), cv2.FONT_HERSHEY_PLAIN, 2.0, (255, 0, 0), thickness = 2)
        cv2.rectangle(frame, (int(d.left() * resize_rate), int(d.top() * resize_rate)), \
            (int(d.right() * resize_rate), int(d.bottom() * resize_rate)), (255, 0, 0), 2)

    print ("face detect(dlib) processing time:{0}".format(elapsed_time_dlib)) + "[sec]"
    print ("face detect(opencv) processing time:{0}".format(elapsed_time_opencv)) + "[sec]"
    print ("face detect(dlib) success count:" + '%06d' % face_detection_frame_count_dlib + "/" + '%06d' % total_frame_count)
    print ("face detect(opencv) success count:" + '%06d' % face_detection_frame_count_opencv + "/" + '%06d' % total_frame_count)
    print

    cv2.imshow('face detector vs', frame)

    c = cv2.waitKey(50) & 0xFF

    if c==27: # ESC
        break

video_input.release()
cv2.destroyAllWindows()

das ist alles.

Recommended Posts

[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV
Dlib-Gesichtserkennung und Blinkzähler von Python
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Gesichtserkennung mit Python + dlib
Gesichtserkennung mit Python + OpenCV
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
[Python] Gesichtserkennung durch OpenCV (Haar Cascade)
Erstellen Sie Python 3 und OpenCV unter Ubuntu 18.04
Schätzung der Kopforientierung mit Python und OpenCV + dlib
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Experiment zum Vergleich der Schreibgeschwindigkeit von Dateien zwischen Python 2.7.9 und Pypy 2.5.0
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Installieren Sie OpenCV unter Ubuntu + Python
Zusammenfassung der Gesichtserkennung in Python
Python 3 Sortier- und Vergleichsfunktionen
Anime-Gesichtserkennung mit OpenCV
Umgebungskonstruktion von Python und OpenCV
Unterschied zwischen Ruby und Python Split
Leuchtendes Leben mit Python und OpenCV
Unterschied zwischen Java und Python (Memo)
Gesichtserkennung mit YOLO Face (Windows10, Python3.6)
[Ubuntu] [Python] Objektverfolgung mit dlib
Unterschied zwischen list () und [] in Python
Vergleich der grundlegenden Grammatik zwischen Java und Python
Neuronales Netzwerk mit OpenCV 3 und Python 3
Installieren Sie OpenCV und Chainer unter Ubuntu
Gesichtserkennung mit Lambda (Python) + Erkennung
Setzen Sie Python, Numpy, OpenCV3 in Ubuntu14
Unterschied zwischen Python, Stftime und Strptime
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Bildverarbeitung] Poo-san ist durch Kantenerkennung mit Python und OpenCV nackt!
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Geschwindigkeitsvergleich zwischen CPython und PyPy
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
[Python] Unterschied zwischen Funktion und Methode
Zusammenfassung der Unterschiede zwischen Python und PHP (Vergleichstabelle der Hauptelemente)
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Erklärung für Anfänger] OpenCV-Gesichtserkennungsmechanismus und -praxis (MultiScale erkennen)
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
OpenCV3 & Python3 Umgebungskonstruktion unter Ubuntu
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
Arbeiten Sie nicht mit Python mit OpenCV auf AMD Ryzen CPU unter WSL2 Ubuntu 18.04 und 20.04
Gesichtserkennung aus mehreren Bilddateien mit openCV, ausschneiden und speichern
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Hallo Welt- und Gesichtserkennung mit opencv-python 4.2
Unterschied in der Authentizität zwischen Python und JavaScript
Unterschiede zwischen Ruby und Python im Umfang
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Virtuelle Python-Umgebung und Pakete unter Ubuntu
Bilder mit Pupil, Python und OpenCV aufnehmen
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
[Python] Unterschied zwischen Klassenmethode und statischer Methode