Spisu treści:
- Krok 1: Zainstaluj Anacondę
- Krok 2: Pobierz pakiet Open CV
- Krok 3: Ustaw zmienne środowiskowe
- Krok 4: Przetestuj, aby potwierdzić
- Krok 5: Utwórz kod do wykrywania twarzy
- Krok 6: Utwórz kod, aby utworzyć zestaw danych
- Krok 7: Utwórz kod, aby wytrenować urządzenie rozpoznające
- Krok 8: Utwórz kod, aby rozpoznać twarze i wynik
Wideo: Wykrywanie twarzy + rozpoznawanie: 8 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
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ę
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
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
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ć
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
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
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 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:
Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv: 3 kroki
Opencv Face Detection, Training and Recognition: OpenCV to biblioteka komputerowa o otwartym kodzie źródłowym, która jest bardzo popularna do wykonywania podstawowych zadań przetwarzania obrazu, takich jak rozmycie, mieszanie obrazów, poprawianie jakości obrazu i wideo, progowanie itp. Oprócz przetwarzania obrazu, to udowodnić
Rozpoznawanie i identyfikacja twarzy - Arduino Face ID przy użyciu OpenCV Python i Arduino.: 6 kroków
Rozpoznawanie i identyfikacja twarzy | Arduino Face ID przy użyciu OpenCV Python i Arduino.: Rozpoznawanie twarzy AKA face ID jest obecnie jedną z najważniejszych funkcji w telefonach komórkowych. Tak więc miałem pytanie „czy mogę mieć identyfikator twarzy dla mojego projektu Arduino” a odpowiedź brzmi tak… Moja podróż zaczęła się następująco: Krok 1: Dostęp do nas
Rozpoznawanie twarzy w praktyce: 21 kroków
Rozpoznawanie twarzy w praktyce: Jest to temat, który mnie tak fascynuje, że nie mogę spać: Widzenie komputerowe, wykrywanie obiektów i ludzi za pomocą przeszkolonego modelu
Rozpoznawanie twarzy CAM ESP32 z obsługą MQTT - AI-myśliciel: 4 kroki
Rozpoznawanie twarzy CAM ESP32 z obsługą MQTT | AI-Thinker: Witam! Chciałem udostępnić mój kod do projektu, w którym potrzebowałem mieć ESP CAM z rozpoznawaniem twarzy, który mógłby wysyłać dane do MQTT. No cóż… po może 7 godzinach przeszukiwania wielu przykładów kodu i szukania tego, co jest, mam skończenie
Rozpoznawanie twarzy w czasie rzeczywistym: kompleksowy projekt: 8 kroków (ze zdjęciami)
Rozpoznawanie twarzy w czasie rzeczywistym: kompleksowy projekt: W moim ostatnim samouczku dotyczącym OpenCV nauczyliśmy się AUTOMATYCZNEGO ŚLEDZENIA OBIEKTÓW WIZJI. Teraz użyjemy naszego PiCam do rozpoznawania twarzy w czasie rzeczywistym, jak widać poniżej:Ten projekt został wykonany przy użyciu tej fantastycznej biblioteki „Open Source Computer Vision Library”