人臉識別 通過opencv進行人臉識別

2021-08-21 07:42:11 字數 4354 閱讀 9721

opencv人臉識別主要有3種演算法

具體步驟:

一、人臉的訓練,需要將訓練中人臉扣出->正臉->轉化灰度圖->直方圖均衡化->訓練

二、經過同樣步驟處理,然後**

每個檔案裡有幾張訓練:

# 使用官方提供的模型構建特徵提取器

predictor = dlib.shape_predictor(predictor_path)

images =

labels =

filenum = 0

i=0for image_path in image_paths:

filenum = filenum + 1

for (root, dirs, files) in os.walk(image_path):

print(root)

for f in files:

bgr_image = cv2.imread(image_path+'/'+f)

faces = dlib.full_object_detections()

rgb_image = cv2.cvtcolor(bgr_image, cv2.color_bgr2rgb)

dets = detector(rgb_image, 1)

if len(dets) > 0: # 如果檢測到人臉,則將人臉進行標記

for det in dets:

imagechips = dlib.get_face_chips(rgb_image, faces, size=120)

if len(imagechips) > 0:

for image in imagechips:

cv_rgb_image = np.array(image).astype(np.uint8) # 先轉換為numpy陣列

grap = cv2.cvtcolor(cv_rgb_image, cv2.color_bgr2gray) # 灰度化

img = cv2.equalizehist(grap)

# cv2.imshow('img',img)

# key = cv2.waitkey(2000)

indx = i

print('總共載入資料夾數量為:',filenum)

i=i+1

return images, labels

因為opencv訓練標籤只能用數字,所以建了字典使數字與label對應

import os

#把乙個資料夾裡的檔案對應生成字典

def create_of(path):

dirs=os.listdir(path)

i=0dic = {}

for d in dirs:

updic=

i=i+1

dic.update(updic)

return dic

主方法:

import cv2

import numpy as np

from tool.createdic import create_of

from tool.loadphoto import get_images_and_labels

import dlib

#建立字典

dic=create_of('c:\\users\\51530\\desktop\\image')

#-----------dlib部分

predictor_path = "c:\\users\\51530\\desktop\\openface\\shape_predictor_68_face_landmarks.dat"

#與人臉檢測相同,使用dlib自帶的frontal_face_detector作為人臉檢測器

detector = dlib.get_frontal_face_detector()

#使用官方提供的模型構建特徵提取器

predictor = dlib.shape_predictor(predictor_path)

#載入訓練

images, labels=get_images_and_labels('c:\\users\\51530\\desktop\\image')

print(np.array(labels))

cap=cv2.videocapture(0)#開啟1號攝像頭

color = (134,126,255)#設定人臉框的顏色

fenlei=cv2.face.lbphfacerecognizer_create()

fenlei.train(images,np.array(labels))

success, frame = cap.read()

font = cv2.font_hershey_******x

divisor = 0

while success:

success, frame = cap.read() # 讀取一楨影象,這個影象用來獲取它的大小

#轉rgb方便後面dlib操作

rgb_img = cv2.cvtcolor(frame, cv2.color_bgr2rgb)

# minsize=int((w/divisor, h/divisor))

dets = detector(rgb_img, 1)

faces = dlib.full_object_detections()

left=0

top=0

right=0

bottom=0

#對於每找到的人臉作以下操作

if len(dets)>0:

for det in dets:

left = det.left()

top = det.top()

right = det.right()

bottom = det.bottom()

cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 1)

shape = predictor(rgb_img,det)

for index, pt in enumerate(shape.parts()):

# print('part {}: {}'.format(index, pt))

pt_pos = (pt.x, pt.y)

cv2.circle(frame, pt_pos, 2, (255, 0, 0), 1)

images = dlib.get_face_chips(rgb_img, faces, size=120)

if len(images)>0:

for image in images:

cv_rgb_image = np.array(image).astype(np.uint8) # 先轉換為numpy陣列

grap = cv2.cvtcolor(cv_rgb_image, cv2.color_bgr2gray)#灰度化

cv2.equalizehist(grap,grap)

print(cv_rgb_image.shape)

res, q = fenlei.predict(grap)#**

try:

resname=dic[int(res)]

except keyerror:

resname='unknown'

cv2.puttext(frame, resname, (right, bottom), font, 0.5, (255, 255, 255), 2)

cv2.imshow("test", frame)#顯示影象

key=cv2.waitkey(1)

c = chr(key & 255)

if c in ['q', 'q', chr(27)]:

break

cv2.destroyallwindows

執行後效果圖:

使用opencv進行人臉識別

最近由於大作業需要,使用了opencv進行人臉識別。一般來說,識別分為兩部,即人臉檢測 人臉識別,opencv提供了乙個人臉檢測的sample,有乙個比較成熟的訓練人臉正面訓練檔案,這是我所知的乙個很成熟的人臉識別工具,而且已用於一些前沿3d愛情動作遊戲中,這裡主要是對其提供的sample作了一定的...

使用opencv進行人臉識別

最近由於大作業需要,使用了opencv進行人臉識別。一般來說,識別分為兩部,即人臉檢測 人臉識別,opencv提供了乙個人臉檢測的sample,有乙個比較成熟的訓練人臉正面訓練檔案,這是我所知的乙個很成熟的人臉識別工具,而且已用於一些前沿3d愛情動作遊戲中,這裡主要是對其提供的sample作了一定的...

使用opencv進行人臉識別

標籤 opencv 人臉識別 python emmm,其實流程很簡單,首先通過cv讀入乙個,然後灰度化了。其次我們載入上面說的那個模型,最後我們進行識別,識別的結果會是乙個矩陣,我們就把這個矩陣畫到上就ok了。import cv2 as cv 傳入乙個img,結果是在人臉上面畫乙個矩形框 deffa...