老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Python中基于Opencv怎么實現人臉識別

這篇文章主要講解了“Python中基于Opencv怎么實現人臉識別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中基于Opencv怎么實現人臉識別”吧!

創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的安澤網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

  1. 檢測人臉。這應該是最基本的,給我們一張圖片,我們要先檢測出人臉的區域,然后才能

進行操作,opencv已經內置了很多分類檢測器,我們這次用haar:

def detect_face(img):
 #將測試圖像轉換為灰度圖像,因為opencv人臉檢測器需要灰度圖像
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 #加載OpenCV人臉檢測分類器Haar
 face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
 #檢測多尺度圖像,返回值是一張臉部區域信息的列表(x,y,寬,高)
 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
 # 如果未檢測到面部,則返回原始圖像
 if (len(faces) == 0):
 return None, None
 #目前假設只有一張臉,xy為左上角坐標,wh為矩形的寬高
 (x, y, w, h) = faces[0]
 #返回圖像的正面部分
 return gray[y:y + w, x:x + h], faces[0]

2.有了數據集和檢測人臉的功能后,我們就可以進行預訓練了,最后返回所有訓練圖片的人臉檢測信息和標簽:

# 該函數將讀取所有的訓練圖像,從每個圖像檢測人臉并將返回兩個相同大小的列表,分別為臉部信息和標簽
def prepare_training_data(data_folder_path):
 # 獲取數據文件夾中的目錄(每個主題的一個目錄)
 dirs = os.listdir(data_folder_path)
 # 兩個列表分別保存所有的臉部和標簽
 faces = []
 labels = []
 # 瀏覽每個目錄并訪問其中的圖像
 for dir_name in dirs:
 # dir_name(str類型)即標簽
 label = int(dir_name)
 # 建立包含當前主題主題圖像的目錄路徑
 subject_dir_path = data_folder_path + "/" + dir_name
 # 獲取給定主題目錄內的圖像名稱
 subject_images_names = os.listdir(subject_dir_path)
 # 瀏覽每張圖片并檢測臉部,然后將臉部信息添加到臉部列表faces[]
 for image_name in subject_images_names:
 # 建立圖像路徑
 image_path = subject_dir_path + "/" + image_name
 # 讀取圖像
 image = cv2.imread(image_path)
 # 顯示圖像0.1s
 cv2.imshow("Training on image...", image)
 cv2.waitKey(100)
 # 檢測臉部
 face, rect = detect_face(image)
 # 我們忽略未檢測到的臉部
 if face is not None:
 #將臉添加到臉部列表并添加相應的標簽
 faces.append(face)
 labels.append(label)
 cv2.waitKey(1)
 cv2.destroyAllWindows()
 #最終返回值為人臉和標簽列表
 return faces, labels

3.有了臉部信息和對應標簽后,我們就可以使用opencv自帶的識別器來進行訓練了:

#調用prepare_training_data()函數
faces, labels = prepare_training_data("training_data")
#創建LBPH識別器并開始訓練,當然也可以選擇Eigen或者Fisher識別器
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
face_recognizer.train(faces, np.array(labels))

4.訓練完畢后就可以進行預測了,在這之前我們可以設定一下預測的格式,包括用矩形框框出人臉并標出其名字,當然最后別忘了建立標簽與真實姓名直接的映射表:

#根據給定的(x,y)坐標和寬度高度在圖像上繪制矩形
def draw_rectangle(img, rect):
 (x, y, w, h) = rect
 cv2.rectangle(img, (x, y), (x + w, y + h), (128, 128, 0), 2)
# 根據給定的(x,y)坐標標識出人名
def draw_text(img, text, x, y):
 cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)
#建立標簽與人名的映射列表(標簽只能為整數)
subjects = ["jiaju", "jiaqiang"]

5.現在就可以定義我們的預測函數了:

# 此函數識別傳遞的圖像中的人物并在檢測到的臉部周圍繪制一個矩形及其名稱
def predict(test_img):
 #生成圖像的副本,這樣就能保留原始圖像
 img = test_img.copy()
 #檢測人臉
 face, rect = detect_face(img)
 #預測人臉
 label = face_recognizer.predict(face)
 # 獲取由人臉識別器返回的相應標簽的名稱
 label_text = subjects[label[0]]
 # 在檢測到的臉部周圍畫一個矩形
 draw_rectangle(img, rect)
 # 標出預測的名字
 draw_text(img, label_text, rect[0], rect[1] - 5)
 #返回預測的圖像
 return img

6.最后使用我們test_data中的圖片進行預測并顯示最終效果:

#加載測試圖像
test_img1 = cv2.imread("test_data/test1.jpg")
test_img2 = cv2.imread("test_data/test2.jpg")
#執行預測
predicted_img1 = predict(test_img1)
predicted_img2 = predict(test_img2)
#顯示兩個圖像
cv2.imshow(subjects[0], predicted_img1)
cv2.imshow(subjects[1], predicted_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

這就是人臉識別最基本的流程,后續還會進一步的研究,下一篇我們將討論本次實驗的一些細節和注意事項,算是對本篇的一次挖掘和總結吧。最后附上完整代碼:

# # -*- coding:utf-8 -*-
import cv2
import os
import numpy as np
# 檢測人臉
def detect_face(img):
 #將測試圖像轉換為灰度圖像,因為opencv人臉檢測器需要灰度圖像
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 #加載OpenCV人臉檢測分類器Haar
 face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
 #檢測多尺度圖像,返回值是一張臉部區域信息的列表(x,y,寬,高)
 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
 # 如果未檢測到面部,則返回原始圖像
 if (len(faces) == 0):
 return None, None
 #目前假設只有一張臉,xy為左上角坐標,wh為矩形的寬高
 (x, y, w, h) = faces[0]
 #返回圖像的正面部分
 return gray[y:y + w, x:x + h], faces[0]
# 該函數將讀取所有的訓練圖像,從每個圖像檢測人臉并將返回兩個相同大小的列表,分別為臉部信息和標簽
def prepare_training_data(data_folder_path):
 # 獲取數據文件夾中的目錄(每個主題的一個目錄)
 dirs = os.listdir(data_folder_path)
 # 兩個列表分別保存所有的臉部和標簽
 faces = []
 labels = []
 # 瀏覽每個目錄并訪問其中的圖像
 for dir_name in dirs:
 # dir_name(str類型)即標簽
 label = int(dir_name)
 # 建立包含當前主題主題圖像的目錄路徑
 subject_dir_path = data_folder_path + "/" + dir_name
 # 獲取給定主題目錄內的圖像名稱
 subject_images_names = os.listdir(subject_dir_path)
 # 瀏覽每張圖片并檢測臉部,然后將臉部信息添加到臉部列表faces[]
 for image_name in subject_images_names:
 # 建立圖像路徑
 image_path = subject_dir_path + "/" + image_name
 # 讀取圖像
 image = cv2.imread(image_path)
 # 顯示圖像0.1s
 cv2.imshow("Training on image...", image)
 cv2.waitKey(100)
 # 檢測臉部
 face, rect = detect_face(image)
 # 我們忽略未檢測到的臉部
 if face is not None:
 #將臉添加到臉部列表并添加相應的標簽
 faces.append(face)
 labels.append(label)
 cv2.waitKey(1)
 cv2.destroyAllWindows()
 #最終返回值為人臉和標簽列表
 return faces, labels
#調用prepare_training_data()函數
faces, labels = prepare_training_data("training_data")
#創建LBPH識別器并開始訓練,當然也可以選擇Eigen或者Fisher識別器
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
face_recognizer.train(faces, np.array(labels))
#根據給定的(x,y)坐標和寬度高度在圖像上繪制矩形
def draw_rectangle(img, rect):
 (x, y, w, h) = rect
 cv2.rectangle(img, (x, y), (x + w, y + h), (128, 128, 0), 2)
# 根據給定的(x,y)坐標標識出人名
def draw_text(img, text, x, y):
 cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)
#建立標簽與人名的映射列表(標簽只能為整數)
subjects = ["jiaju", "jiaqiang"]
# 此函數識別傳遞的圖像中的人物并在檢測到的臉部周圍繪制一個矩形及其名稱
def predict(test_img):
 #生成圖像的副本,這樣就能保留原始圖像
 img = test_img.copy()
 #檢測人臉
 face, rect = detect_face(img)
 #預測人臉
 label = face_recognizer.predict(face)
 # 獲取由人臉識別器返回的相應標簽的名稱
 label_text = subjects[label[0]]
 # 在檢測到的臉部周圍畫一個矩形
 draw_rectangle(img, rect)
 # 標出預測的名字
 draw_text(img, label_text, rect[0], rect[1] - 5)
 #返回預測的圖像
 return img
#加載測試圖像
test_img1 = cv2.imread("test_data/test1.jpg")
test_img2 = cv2.imread("test_data/test2.jpg")
#執行預測
predicted_img1 = predict(test_img1)
predicted_img2 = predict(test_img2)
#顯示兩個圖像
cv2.imshow(subjects[0], predicted_img1)
cv2.imshow(subjects[1], predicted_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

感謝各位的閱讀,以上就是“Python中基于Opencv怎么實現人臉識別”的內容了,經過本文的學習后,相信大家對Python中基于Opencv怎么實現人臉識別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!


網站標題:Python中基于Opencv怎么實現人臉識別
網頁地址:http://www.xueling.net.cn/article/ihocdi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产麻豆精品福利在线 | av成人一区二区 | 黄色片免费在线播放 | 中文字幕久久波多野结衣av不卡 | a级毛片黄| 久久AⅤ无码AV高潮AV喷吹 | 成年av网站全部免费毛片 | 欧美一级淫片免费视频欧美辣图 | 毛片一级网站 | 韩国理伦三级做爰观看向日葵 | 国产精品露脸国语对白99 | 日韩精品久久久肉伦网站 | 无套内射chinesehd熟女 | 少妇厨房愉情理9仑片视频 91国?视频在线?看 | 国产911情侣拍拍在线播放 | 91大神久久 | h免费观看| 99热这里只有精品5 曼谷av女郎 | 国产精品vⅰdeoXXXX国产 | 国产老师做www爽爽爽视频 | 国产一二三四2021精字窝 | 青青在线免费视频 | 国产精品揄拍一区二区 | 欧美日韩高清 | 抽搐一进一出gif日本 | 日韩在线91 | 成人影院午夜 | 韩日精品中文字幕 | 麻豆国产一区二区三区四区 | 中出一区二区三区 | 在线一区二区三区四区五区 | 粉嫩饱饱鱼一线天在线观看 | 日韩欧美综合在线 | 俺去俺来也在线WWW色官网 | 国产精品乱码一区二三区 | 国产成人高清啪免费观看软件 | 午夜免费在线 | 亚洲干干 | 日本欧美一区二区三区在线播 | 久热精品视频 | 奇米7777狠狠狠琪琪视频 |