Sommario:

Rilevamento, addestramento e riconoscimento dei volti Opencv: 3 passaggi
Rilevamento, addestramento e riconoscimento dei volti Opencv: 3 passaggi

Video: Rilevamento, addestramento e riconoscimento dei volti Opencv: 3 passaggi

Video: Rilevamento, addestramento e riconoscimento dei volti Opencv: 3 passaggi
Video: End to End Face Recognition Project with Django and Machine Learning 2024, Luglio
Anonim
Opencv Face Detection, Training e Riconoscimento
Opencv Face Detection, Training e Riconoscimento

OpenCV è una libreria di visione artificiale open source molto popolare per l'esecuzione di attività di elaborazione delle immagini di base come sfocatura, fusione di immagini, miglioramento dell'immagine e della qualità video, sogliatura ecc. Oltre all'elaborazione delle immagini, fornisce vari deep learning pre-addestrati modelli che possono essere utilizzati direttamente per risolvere semplici compiti a portata di mano.

per l'installazione di opencv usa questo link

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

Passaggio 1: rilevamento del volto in un video in tempo reale

puoi cercare su Google molti programmi di rilevamento dei volti e i volti rilevati dovrebbero essere salvati in una cartella per ulteriori operazioni di elaborazione delle immagini come l'addestramento e l'etichettatura. raccoglieremo 30 campioni

importa cv2

importa numpy come np

import os import sys

fotocamera = cv2. VideoCapture(0)

faceCascade = cv2. CascadeClassifier("haarcascade_frontalface_default.xml") #aggiungi il percorso del tuo file haarcascade

name = raw_input("Come si chiama?")

#tutti i file verranno salvati nella cartella Utenti/prasad/Documenti/immagini

dirName = "/Users/prasad/Documents/images/" + name

print(dirName) if not os.path.exists(dirName): os.makedirs(dirName) print("Directory creata") else: print("Il nome esiste già") sys.exit()

conteggio = 1

#raccoglieremo 30 campioni

mentre conta 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 faces: roiGray = gray[y:y+h, x:x+w] fileName = dirName + "/" + name + str(count) + ".jpg" cv2.imwrite(fileName, roiGray) cv2.imshow("face", roiGray) cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) count += 1 cv2.imshow('frame', frame) key = cv2.waitKey(1)

se chiave == 27:

rottura

#fotocamera.rilascia()

cv2.destroyAllWindows()

Passaggio 2: addestrare le immagini di esempio

Dopo che il rilevamento dei volti è stato completato, possiamo iniziare ad addestrare le immagini

import osimport numpy as np from PIL import Image import cv2 import pickle #import serial

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

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

riconoscitore = cv2.face. LBPHFaceRecognizer_create()

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

#addestrare le immagini nella cartella delle immagini

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

idcorrente = 1

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

per root, dirs, file in os.walk(imageDir):

print(root, dirs, files) per file in files: print(file) if file.endswith("png") o file.endswith("jpg"): path = os.path.join(root, file) label = os.path.basename(root) print(label)

se non etichetta in labelIds:

labelIds[label] = currentId print(labelIds) currentId += 1

id_ = labelIds[etichetta]

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

per (x, y, w, h) nelle facce:

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

con open("etichette", "wb") come f:

pickle.dump(labelIds, f) f.close()

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

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

Passaggio 3: riconoscimento dei volti

dopo che la formazione è terminata, ora puoi eseguire il codice seguente in modo che inizi a riconoscere i tuoi volti addestrati

import osos.environ['PYTHONINSPECT'] = 'on' import cv2 import numpy as np import pickle #import RPi. GPIO as GPIO from time import sleep

con open('labels', 'rb') come f:

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

fotocamera = cv2. VideoCapture(0)

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

riconoscitore = cv2.face. LBPHFaceRecognizer_create() riconoscitore.read("trainer.yml")

carattere = cv2. FONT_HERSHEY_SIMPLEX

ultimo=''

#for frame in 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) in facce: roiGray = grigio[y:y+h, x:x+w]

id_, conf = riconoscitore.predict(roiGray)

per nome, valore in dicti.items():

if value == id_: print(name) cv2.putText(frame, name, (x, y), font, 2, (0, 0, 255), 2, cv2. LINE_AA) if name!=last: last= nome se conf <= 70: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow('cornice', cornice)

chiave = cv2.waitKey(1)

se chiave == 27:

break cv2.destroyAllWindows()

Consigliato: