Spisu treści:

Wykrywanie twarzy + rozpoznawanie: 8 kroków (ze zdjęciami)
Wykrywanie twarzy + rozpoznawanie: 8 kroków (ze zdjęciami)

Wideo: Wykrywanie twarzy + rozpoznawanie: 8 kroków (ze zdjęciami)

Wideo: Wykrywanie twarzy + rozpoznawanie: 8 kroków (ze zdjęciami)
Wideo: OpenCV i wykrywanie twarzy - Projekt w Pythonie 2024, Listopad
Anonim
Image
Image
Wykrywanie twarzy + rozpoznawanie
Wykrywanie twarzy + rozpoznawanie

Jest to prosty przykład uruchamiania wykrywania i rozpoznawania twarzy za pomocą OpenCV z kamery. UWAGA: ZROBIŁEM TEN PROJEKT DO KONKURSU NA CZUJNIKI I UŻYŁEM KAMERY JAKO CZUJNIKA DO ŚLEDZENIA I ROZPOZNAWANIA TWARZY. Tak więc nasz celW tej sesji 1. Zainstaluj Anacondę 2. Pobierz pakiet Open CV 3. Ustaw zmienne środowiskowe 4. Test potwierdzający 5, Utwórz kod do wykrywania twarzy 6. Utwórz kod, aby utworzyć zestaw danych 7. Utwórz kod, aby wyszkolić aparat rozpoznawania 8. Utwórz kod, aby rozpoznać twarze i wynik.

Krok 1: Zainstaluj Anacondę

Zainstaluj Anakondę
Zainstaluj Anakondę

Anaconda to zasadniczo ładnie zapakowane IDE Pythona, które jest dostarczane z mnóstwem przydatnych pakietów, takich jak NumPy, Pandas, IPython Notebook itp. Wydaje się, że jest zalecany wszędzie w społeczności naukowej. Sprawdź Anacondę, aby ją zainstalować.

Krok 2: Pobierz pakiet Open CV

Pobierz pakiet Open CV
Pobierz pakiet Open CV

Najpierw przejdź do oficjalnej strony OpenCV, aby pobrać kompletny pakiet OpenCV. Wybierz wersję, którą lubisz (2.x lub 3.x). Jestem na Python 2.x i OpenCV 2.x - głównie dlatego, że tak są konfigurowane/oparte na samouczkach OpenCV-Python.

W moim przypadku wypakowałem pakiet (w zasadzie folder) bezpośrednio na mój dysk F. (F:\opencv).

Krok 3: Ustaw zmienne środowiskowe

Ustaw zmienne środowiskowe
Ustaw zmienne środowiskowe

Skopiuj i wklej plik cv2.pyd

Katalog Anaconda Site-packages (np. F:\Program Files\Anaconda2\Lib\site-packages w moim przypadku) zawiera pakiety Pythona, które możesz zaimportować. Naszym celem jest skopiowanie i wklejenie pliku cv2.pyd do tego katalogu (abyśmy mogli użyć importu cv2 w naszych kodach Pythona).

Aby to zrobić, skopiuj plik cv2.pyd…

Z tego katalogu OpenCV (początkowa część może być nieco inna na twoim komputerze):

# Python 2.7 i maszyna 64-bitowa: F:\opencv\build\python\2.7\x64# Python 2.7 i maszyna 32-bitowa: F:\opencv\build\python\2.7\x84

Do tego katalogu Anaconda (początkowa część może być nieco inna na twoim komputerze):

F:\Program Files\Anaconda2\Lib\site-packages

Po wykonaniu tego kroku będziemy mogli teraz używać import cv2 w kodzie Pythona. ALE, nadal musimy wykonać trochę więcej pracy, aby uruchomić FFMPEG (kodek wideo) (aby umożliwić nam wykonywanie takich czynności, jak przetwarzanie filmów).

Kliknij prawym przyciskiem myszy „Mój komputer” (lub „Ten komputer” w systemie Windows 8.1) -> kliknij lewym przyciskiem Właściwości -> kliknij lewym przyciskiem myszy zakładkę „Zaawansowane” -> kliknij lewym przyciskiem myszy przycisk „Zmienne środowiskowe…”. Dodaj nową zmienną użytkownika aby wskazać OpenCV (albo x86 dla systemu 32-bitowego lub x64 dla systemu 64-bitowego). Obecnie korzystam z maszyny 64-bitowej.

32-bitowyOPENCV_DIRC:\opencv\build\x86\vc12

64-bitowyOPENCV_DIRC:\opencv\build\x64\vc12

Dołącz %OPENCV_DIR%\bin do zmiennej użytkownika PATH.

Na przykład moja zmienna użytkownika PATH wygląda tak…

Przed:

F:\Użytkownicy\Johnny\Anaconda; C:\Użytkownicy\Johnny\Anaconda\Scripts

Później:

F:\Użytkownicy\Johnny\Anaconda;C:\Użytkownicy\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

To już koniec! FFMPEG jest gotowy do użycia!

Krok 4: Przetestuj, aby potwierdzić

Przetestuj, aby potwierdzić
Przetestuj, aby potwierdzić
Przetestuj, aby potwierdzić
Przetestuj, aby potwierdzić

Musimy sprawdzić, czy teraz możemy to zrobić w Anacondzie (poprzez Spyder IDE):

  • Importuj pakiet OpenCV
  • Użyj narzędzia FFMPEG (do odczytu/zapisu/przetwarzania filmów)

Test 1: Czy możemy zaimportować OpenCV?

Aby potwierdzić, że Anaconda jest teraz w stanie zaimportować pakiet OpenCV-Python (mianowicie cv2), wydaj je w konsoli IPython:

importuj cv2

drukuj cv2._wersja_

Jeśli pakiet cv2 został zaimportowany bez błędów, a wersja cv2 została wydrukowana, to wszyscy jesteśmy w porządku!

Test 2: Czy możemy użyć kodeka FFMPEG?

Umieść próbkę

input_video.mp4

plik wideo w katalogu. Chcemy sprawdzić, czy możemy:

  • przeczytaj ten plik wideo.mp4 i
  • napisz nowy plik wideo (może to być.avi lub.mp4 itp.)

Aby to zrobić, musimy mieć testowy kod Pythona, nazwijmy go test.py. Umieść go w tym samym katalogu co próbka

input_video.mp4

plik.

Co to jest

test.py

może wyglądać (Uwaga: wielkie dzięki sugestiom Pete'a i Warrena w polu komentarza - zastąpiłem swój oryginalny kod testowy jego - przetestuj go sam i daj nam znać, czy działa lepiej):

importuj cv2

cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = odczyt wideo pomyślnie. Fałsz - nie można odczytać wideo. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = zapis wideo pomyślnie. Fałsz - nie można zapisać wideo. cap.release() out.release()

Ten test jest BARDZO WAŻNY. Jeśli chcesz przetwarzać pliki wideo, musisz upewnić się, że Anaconda / Spyder IDE może używać FFMPEG (kodek wideo). Zajęło mi kilka dni, aby to zadziałało. Ale mam nadzieję, że zajmie Ci to znacznie mniej czasu!:) Uwaga: jeszcze jedna bardzo ważna wskazówka podczas korzystania z Anaconda Spyder IDE. Upewnij się, że sprawdziłeś Aktualny Katalog Roboczy (CWD)!!!

Krok 5: Utwórz kod do wykrywania twarzy

Utwórz kod do wykrywania twarzy
Utwórz kod do wykrywania twarzy
Utwórz kod do wykrywania twarzy
Utwórz kod do wykrywania twarzy

Bramka

W tej sesji

  • Zobaczymy podstawy wykrywania twarzy za pomocą klasyfikatorów kaskadowych opartych na cechach Haar
  • Rozszerzymy to samo dla wykrywania oczu itp.

Wykrywanie kaskady haar w OpenCV

Tutaj zajmiemy się wykrywaniem. OpenCV zawiera już wiele przeszkolonych klasyfikatorów twarzy, oczu, uśmiechu itp. Te pliki XML są przechowywane w folderze opencv/data/haarcascades/. Stwórzmy wykrywacz twarzy i oczu za pomocą OpenCV. Najpierw musimy załadować wymagane klasyfikatory XML. Następnie załaduj nasz obraz wejściowy (lub wideo) w trybie skali szarości LUB możemy użyć kamery (do wykrywania twarzy w czasie rzeczywistym)

importuj numer jako np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascade_eyar.xml') cap = cv2. VideoCapture(0) while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) w ścianach: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = gray[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex, ey, ew, eh) w oczach: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "znaleziono " +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff jeśli k == 27: zerwij cap.release() cv2.destroyAllWindows()

Krok 6: Utwórz kod, aby utworzyć zestaw danych

Utwórz kod, aby utworzyć zestaw danych
Utwórz kod, aby utworzyć zestaw danych
Utwórz kod, aby utworzyć zestaw danych
Utwórz kod, aby utworzyć zestaw danych

Rozpoznajemy twarze, więc będziesz potrzebować zdjęć twarzy! Możesz utworzyć własny zestaw danych lub zacząć od jednej z dostępnych baz danych twarzy, https://face-rec.org/databases/ zapewnia aktualny przegląd. Trzy interesujące bazy danych to (części opisu zaczerpnięto z

  • Baza danych twarzy AT&T
  • Yale Facedatabase A
  • Rozszerzona baza danych Yale Facedata B

TUTAJ używam własnego zestawu danych….za pomocą kodu, który jest podany poniżej:

importuj numer jako np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('wprowadź identyfikator użytkownika') sampleN=0; while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) w twarzach: sampleN =próbkaN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", szary[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) jeśli sampleN > 20: przerwij cap.release() cv2.destroyAllWindows()

Krok 7: Utwórz kod, aby wytrenować urządzenie rozpoznające

Utwórz kod, aby wyszkolić osobę rozpoznającą
Utwórz kod, aby wyszkolić osobę rozpoznającą

Utwórz funkcję do przygotowania zestawu treningowego

Teraz zdefiniujemy funkcję

pobierzObrazyZID(ścieżka)

który przyjmuje bezwzględną ścieżkę do bazy danych obrazów jako argument wejściowy i zwraca krotkę listy 2, z której jedna zawiera wykryte twarze, a druga odpowiadającą jej etykietę. Na przykład, jeśli i-ty indeks na liście twarzy reprezentuje piątą osobę w bazie danych, to odpowiadająca i-ta lokalizacja na liście etykiet ma wartość równą 5.

Teraz przekonwertuj twarze zestawu danych (utworzone w kroku 6) do pliku.yml za pomocą kodu podanego poniżej:

importuj system

import numpy as np import cv2 z PIL import Image # Do rozpoznawania twarzy użyjemy rozpoznawania twarzy LBPH Face Recognizer = cv2.createLBPHaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) faces = IDs = for imagePath w imagePaths: # Odczytaj obraz i przekonwertuj go na skalę szarości facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Pobierz etykietę obrazu ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Wykryj twarz na obrazie faces.append(faceNP) IDs.append (ID) cv2.imshow("Dodawanie twarzy do szkolenia", faceNP) cv2.waitKey(10) return np.array(ID), identyfikatory twarzy, twarze = getImagesWithID(ścieżka)cognizer.train(faces, Ids)cognizer.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

za pomocą tego kodu wszystkie zestawy danych twarzy przekonwertowane na jeden plik.yml…..ścieżka to („F:/Program Files/projects/face_rec/faceREC/trainingdata.yml”)

Krok 8: Utwórz kod, aby rozpoznać twarze i wynik

Guyzz to jest ostatni krok, w którym możemy stworzyć kod rozpoznający twarze za pomocą Twojej kamery internetowejW TYM KROKU SĄ DWIE OPERACJE, KTÓRE BĘDĄ WYKONYWAĆ…. 1. przechwytywanie wideo z kamery 2. porównanie go z plikiem.yml

importuj numpy jako npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) podczas gdy 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) w twarzach: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(szary[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if id= =5: id='rahul' if id==6: id="akshay" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), czcionka, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): przerwij cap.release()

cv2.zniszczWszystkieOkna()

i w końcu wynik pojawi się na twoich oczach…… możesz również pobrać plik zip z poniższego linku:Kliknij tutaj, aby pobrać kodyWięc w tej instrukcji wykonaliśmy zadanie wykrywania twarzy + rozpoznawanie za pomocą OpenCV…..jeśli ty jak to pouczające….. plzzz zapisz się i zagłosuj na mnie…..dziękuję znajomym:)

Zalecana: