Spisu treści:

Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv: 3 kroki
Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv: 3 kroki

Wideo: Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv: 3 kroki

Wideo: Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv: 3 kroki
Wideo: Home Assistant - Rozpoznawanie twarzy - część 1 - Teoria 2024, Listopad
Anonim
Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv
Wykrywanie, szkolenie i rozpoznawanie twarzy Opencv

OpenCV to biblioteka wizyjna 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 zapewnia różne wstępnie przeszkolone głębokie uczenie modele, które można bezpośrednio wykorzystać do rozwiązywania prostych zadań.

do instalacji opencv użyj tego linku

www.instructables.com/id/Opencv-and-Python…

Krok 1: Wykrywanie twarzy w wideo w czasie rzeczywistym

możesz wyszukać w google wiele programów do wykrywania twarzy, a wykryte twarze należy zapisać w folderze w celu dalszego przetwarzania obrazu, takich jak szkolenie i etykietowanie. zbierzemy 30 próbek

importuj cv2

importuj numer jako np

import systemu importu systemu

kamera = cv2. VideoCapture(0)

faceCascade = cv2. CascadeClassifier("haarcascade_frontalface_default.xml") #dodaj ścieżkę do pliku harcascade

name = raw_input("Jak ma na imię? ")

#wszystkie pliki zostaną zapisane w folderze Users/prasad/Documents/images

dirName = "/Użytkownicy/prasad/Dokumenty/obrazy/" + nazwa

print(dirName) if nie os.path.exists(dirName): os.makedirs(dirName) print("Utworzono katalog") else: print("Nazwa już istnieje") sys.exit()

liczba = 1

#zbierzemy 30 próbek

while count 30: break # frame = frame.array gray = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) in face: roiGray = gray[y:y+h, x:x+w] fileName = dirName + "/" + nazwa + str(liczba) + ".jpg" cv2.imwrite(fileName, roiGray) cv2.imshow("face", roiGray) cv2.rectangle(ramka, (x, y), (x+w, y+h), (0, 255, 0), 2) liczba += 1 cv2.imshow('ramka', ramka) klucz = cv2.waitKey(1)

jeśli klucz == 27:

przerwa

#kamera.zwolnienie()

cv2.zniszczWszystkieOkna()

Krok 2: Trenuj swoje przykładowe obrazy

Po zakończeniu wykrywania twarzy możemy przejść do treningu obrazów

import osimport numpy jako np z PIL import Image import cv2 import pickle #import serial

#ser = serial. Serial('/dev/ttyACM0', 9600, timeout=1)

faceCascade = cv2. CascadeClassifier("haarcascade_frontalface_default.xml")

aparat rozpoznawania = cv2.face. LBPFaceRecognizer_create()

baseDir = os.path.dirname(os.path.abspath(_file_))

#trening obrazów w folderze obrazów

imageDir = os.path.join(baseDir, "obrazy")

obecnyId = 1

labelIds = {} yLabels = xTrain = #ser.write("Szkolenie…..".encode())

dla roota, katalogów, plików w os.walk(imageDir):

print(root, dirs, files) dla pliku w plikach: print(file) if file.endswith("png") lub file.endswith("jpg"): path = os.path.join(root, file) label = os.path.basename(root) print(etykieta)

jeśli nie etykieta w labelIds:

identyfikatoretykiety[etykieta] = identyfikator bieżący print(identyfikatoretykiety) identyfikator bieżący += 1

id_ = identyfikatory etykiet[etykieta]

pilImage = Image.open(path).convert("L") imageArray = np.array(pilImage, "uint8") faces = faceCascade.detectMultiScale(imageArray, scaleFactor=1,1, minNeighbors=5)

dla (x, y, w, h) w ścianach:

roi = imageArray[y:y+h, x:x+w] xTrain.append(roi) yLabels.append(id_)

z open("etykiety", "wb") jako f:

pickle.dump(identyfikatory etykiet, f) f.close()

rozpoznanie.train(xTrain, np.array(yLabels))

rozpoznanie.save("trainer.yml") print(labelIds)

Krok 3: Rozpoznawanie twarzy

po zakończeniu treningu możesz uruchomić poniższy kod, aby zaczął rozpoznawać Twoje wytrenowane twarze

import osos.environ['PYTHONINSPECT'] = 'on' import cv2 import numpy as np import pickle #import RPi. GPIO jako GPIO od czasu import sleep

z open('etykiety', 'rb') jako f:

dicti = pickle.load(f) f.close()

kamera = cv2. VideoCapture(0)

faceCascade = cv2. CascadeClassifier("haarcascade_frontalface_default.xml")

aparat rozpoznawania = cv2.face. LBPFaceRecognizer_create()cognizer.read("trainer.yml")

czcionka = cv2. FONT_HERSHEY_SIMPLEX

ostatni=''

#for frame w camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

while True: ret, frame = camera.read() gray = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 5) for (x, y, w, h) w twarzach: roiGray = szary[y:y+h, x:x+w]

id_, konf = rozpoznawanie.predict(roiGray)

dla nazwy wartość w dicti.items():

if value == id_: print(name) cv2.putText(ramka, nazwa, (x, y), font, 2, (0, 0, 255), 2, cv2. LINE_AA) if name!=last: last= nazwa jeśli conf <= 70: cv2.rectangle(ramka, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('ramka', ramka)

klucz = cv2.waitKey(1)

jeśli klucz == 27:

przerwać cv2.destroyAllWindows()

Zalecana: