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...