python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
1 #-*- coding: utf-8 -*-
2 from __future__ importunicode_literals3 #操作文件
4 importos5 #科學計算
6 importnumpy as np7 #圖像識別
8 importcv2 as cv9 #數據預處理, 該項目中只使用了標簽編碼
10 importsklearn.preprocessing as sp11
12
13 defload_imgs(directory):14 '''加載 directory 該文件夾下所有以 .jpg 結尾的圖片'''
15 #識別 系統環境 自動分配當前系統的路徑分隔符并替換
16 directory =os.path.normpath(directory)17 #判斷當前路徑是否為存在
18 if notos.path.isdir(directory):19 #手動拋出異常 biu biu biu
20 raise IOError("The directory '" + directory + "' doesn't exist!")21 #創建圖片集合 用于存儲文件夾名和該文件夾下所有的圖片
22 faces ={}23 #os.walk(directory) 獲取當前文件夾下所有的文件夾以及文件
24 #curdir: 當前文件夾路徑
25 #subdirs: 當前文件夾下所有文件夾 (列表)
26 #files: 當前文件夾下所有文件 (列表)
27 for curdir, subdirs, files inos.walk(directory):28 #首先便利所有的文件 篩選.jpg結尾文件并循環
29 for jpeg in (file for file in files if file.endswith('.jpg')):30 #拼接圖片路徑
31 path =os.path.join(curdir, jpeg)32 #獲取該圖片分類名稱
33 label = path.split(os.path.sep)[-2]34 #判斷當前key值是否存在圖片集合中, 如果為空則創建該鍵并賦值空列表
35 #否則給圖片集合中的 key 添加圖片路徑
36 if label not infaces:37 faces[label] =[]38 faces[label].append(path)39 #返回圖片集合
40 returnfaces41
42
43 defLBPHModel(fd, codec, train_path):44 '''
45 -------------------46 參數說明: fd, codec, [model_path]47 fd: Haar-like(人臉特征模型對象)48 codec: LabelEncoder(標簽編碼器對象)49 model_path: 服用模型路徑(功能未實現, 沒找到讀取的函數...)50 -------------------51 返回: 訓練后的模型對象52 '''
53 #加載當前文件加下所有.jpg結尾的圖片
54 train_faces = load_imgs(train_path) #'traom_imgs'
55 #將所有標簽放入編碼器進行訓練
56 codec.fit(list(train_faces.keys()))57 #創建空的訓練集數組x y
58 train_x, train_y =[], []59 #循環所有訓練組
60 for label, filenames intrain_faces.items():61 #循環當前樣本組中的圖片
62 for filename infilenames:63 #讀取圖片
64 image =cv.imread(filename)65 #將圖片轉成灰度圖
66 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)67 #獲取人臉特征位置
68 faces =fd.detectMultiScale(69 gray, 1.1, 2, minSize=(100, 100))70 #循環臉部特征數組
71 for l, t, w, h infaces:72 #將圖片中的臉部特征裁剪下來
73 train_x.append(gray[t:t + h, l:l +w])74 #標簽編碼結果存儲
75 train_y.append(codec.transform([label])[0])76 train_y =np.array(train_y)77 #創建LBPH人臉檢測器
78 model =cv.face.LBPHFaceRecognizer_create()79 #對訓練集進行訓練
80 model.train(train_x, train_y)81 returnmodel82
83
84 if __name__ == "__main__":85 #訓練集圖片存儲路徑
86 train_path = 'train_imgs'
87 #讀取人臉描述文件, 構建人臉檢測器
88 fd = cv.CascadeClassifier('face.xml')89 #創建標簽編碼器
90 codec =sp.LabelEncoder()91 #獲取model
92 model =LBPHModel(fd, codec, train_path)93 #打開視頻捕捉設備
94 vc =cv.VideoCapture(0)95 whileTrue:96 #讀取視頻幀
97 frame = vc.read()[1]98 #反轉圖片
99 frame = cv.flip(frame, 1)100 #print(frame)
101 #人臉位置檢測, 返回數組
102 faces = fd.detectMultiScale(frame, 1.3, 5)103 #循環人臉位置數組
104 for l, t, w, h infaces:105 #給人臉描邊
106 cv.rectangle(frame, (l, t), (l + w, t +h),107 (255, 0, 0), 4)108 #復制原圖片文本
109 gray =frame.copy()110 #將圖片變化成灰度圖
111 gray =cv.cvtColor(gray, cv.COLOR_BGR2GRAY)112 #對面部特征進行識別
113 pred_test_y = model.predict(gray[t:t + h, l:l +w])[0]114 #將預測后的結果進行標簽解碼
115 face_name =codec.inverse_transform([pred_test_y])[0]116 #給圖片添加文本 圖片矩陣, 添加文本名稱, 設置文本顯示位置,
117 #字體樣式, 字體大小, 字體顏色, 字體粗細
118 cv.putText(frame, face_name, (l + 5, t - 15),119 cv.FONT_HERSHEY_SIMPLEX, 1,120 (255, 255, 255), 3)121 #打印名稱
122 #print(face_name)
123
124 #顯示圖片
125 cv.imshow('VideoCapture', frame)126 #等待按下ESC鍵退出, 每次等待33毫秒
127 if cv.waitKey(33) == 27:128 break
129 #關閉視頻捕捉設備
130 vc.release()131 #關閉視頻窗口
132 cv.destroyAllWindows()
總結
以上是生活随笔為你收集整理的python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse项目无错误但是有红叉问题解
- 下一篇: 人工蜂群算法python_教程 | 用人