<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
OpenCV 是一個開源的計算機視覺和機器學習庫。它包含成千上萬優化過的演演算法,為各種計算機視覺應用提供了一個通用工具包。根據這個專案的關於頁面,OpenCV 已被廣泛運用在各種專案上,從谷歌街景的圖片拼接,到互動藝術展覽的技術實現中,都有 OpenCV 的身影。
OpenCV 起始於 1999 年 Intel 的一個內部研究專案。從那時起,它的開發就一直很活躍。進化到現在,它已支援如 OpenCL 和 OpenGL 等現代技術,也支援如 iOS 和 Android 等平臺。
1999 年,半條命釋出後大紅大熱。Intel 奔騰 3 處理器是當時最高階的 CPU,400-500 MHZ 的時脈頻率已被認為是相當快。2006 年 OpenCV 1.0 版本釋出的時候,當時主流 CPU 的效能也只和 iPhone 5 的 A6 處理器相當。儘管計算機視覺從傳統上被認為是計算密集型應用,但我們的移動裝置效能已明顯地超出能夠執行有用的計算機視覺任務的閾值,帶著攝像頭的移動裝置可以在計算機視覺平臺上大有所為。
本文為簡單易懂的臉部辨識!
import cv2 face_name = 'cjw' # 該人臉的名字 # 載入OpenCV人臉檢測分類器 face_cascade = cv2.CascadeClassifier("D:/BaiduNetdiskDownload/python/opencv/opencv-4.5.1/" "data/haarcascades/haarcascade_frontalface_default.xml") recognizer = cv2.face.LBPHFaceRecognizer_create() # 準備好識別方法LBPH方法 camera = cv2.VideoCapture(0) # 0:開啟攝像頭 success, img = camera.read() # 從攝像頭讀取照片 W_size = 0.1 * camera.get(3) # 在視訊流的幀的寬度 H_size = 0.1 * camera.get(4) # 在視訊流的幀的高度 def get_face(): print("正在從攝像頭錄入新人臉資訊 n") picture_num = 0 # 設定錄入照片的初始值 while True: # 從攝像頭讀取圖片 global success # 設定全域性變數 global img # 設定全域性變數 ret, frame = camera.read() # 獲得攝像頭讀取到的資料(ret為返回值,frame為視訊中的每一幀) if ret is True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 轉為灰度圖片 else: break face_detector = face_cascade # 記錄攝像頭記錄的每一幀的資料,讓Classifier判斷人臉 faces = face_detector.detectMultiScale(gray, 1.3, 5) # gray是要灰度影象,1.3為每次影象尺寸減小的比例,5為minNeighbors for (x, y, w, h) in faces: # 製造一個矩形框選人臉(xy為左上角的座標,w為寬,h為高) cv2.rectangle(frame, (x, y), (x + w, y + w), (255, 0, 0)) picture_num += 1 # 照片數加一 t = face_name cv2.imwrite("./data/1." + str(t) + '.' + str(picture_num) + '.jpg', gray[y:y + h, x:x + w]) # 儲存影象,將臉部的特徵轉化為二維陣列,儲存在data資料夾內 maximums_picture = 13 # 設定攝像頭拍攝照片的數量的上限 if picture_num > maximums_picture: break cv2.waitKey(1) get_face()
注意:載入分類器的檔案地址;cv2.imwrite:儲存圖片的路徑
import os import cv2 from PIL import Image import numpy as np def getlable(path): facesamples = [] # 儲存人臉資料(該資料為二位陣列) ids = [] # 儲存星門資料 imagepaths = [os.path.join(path, f) for f in os.listdir(path)] # 儲存圖片資訊 face_detector = cv2.CascadeClassifier('D:/BaiduNetdiskDownload/python/opencv/opencv-4.5.1/data/haarcascades/' 'haarcascade_frontalface_alt2.xml') # 載入分類器 print('資料排列:', imagepaths) # 列印陣列imagepaths for imagePath in imagepaths: # 遍歷列表中的圖片 pil_img = Image.open(imagePath).convert('L') # 開啟圖片,灰度化,PIL的兩種不同模式: # (1)1(黑白,有畫素的地方為1,無畫素的地方為0) # (2)L(灰度影象,把每個畫素點變成0~255的數值,顏色越深值越大) img_numpy = np.array(pil_img, 'uint8') # 將影象轉化為陣列 faces = face_detector.detectMultiScale(img_numpy) # 獲取人臉特徵 id = int(os.path.split(imagePath)[1].split('.')[0]) # 獲取每張圖片的id和姓名 for x, y, w, h in faces: # 預防無面容照片 ids.append(id) facesamples.append(img_numpy[y:y+h, x:x+w]) # 列印臉部特徵和id print('id:', id) print('fs:', facesamples) return facesamples, ids if __name__ == '__main__': path = 'D:/BaiduNetdiskDownload/python/opencv/pythonProject/face1/data' # 圖片路徑 faces, ids = getlable(path) # 獲取影象陣列和id標籤陣列和姓名 recognizer = cv2.face.LBPHFaceRecognizer_create() # 獲取訓練物件 recognizer.train(faces, np.array(ids)) recognizer.write('trainer/trainer.yml') # 儲存生成的人臉特徵資料檔案
import cv2 import os # 載入訓練資料集檔案 recogizer = cv2.face.LBPHFaceRecognizer_create() recogizer.read('trainer/trainer.yml') # 獲取臉部特徵資料檔案 names = [] warningtime = 0 def face_detect_demo(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 轉換為灰度影象 face_detector = cv2.CascadeClassifier('D:/BaiduNetdiskDownload/python/opencv/opencv-4.5.1/' 'data/haarcascades/haarcascade_frontalface_default.xml') # 載入分類器 face = face_detector.detectMultiScale(gray, 1.3, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300)) # 進行識別,把整張人臉部分框起來 for x, y, w, h in face: cv2.rectangle(img, (x, y), (x+w, y+h), color=(0, 0, 255), thickness=2) # 矩形 cv2.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=(0, 255, 0), thickness=1) # 圓形 ids, confidence = recogizer.predict(gray[y:y + h, x:x + w]) # 進行預測、評分 if confidence > 80: global warningtime warningtime += 1 if warningtime > 100: # 警報達到一定次數,說明不是這個人 warningtime = 0 cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) else: cv2.putText(img, str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1) # 把姓名打到人臉的框圖上 cv2.imshow('result', img) # print('bug:',ids) def name(): path = 'D:/BaiduNetdiskDownload/python/opencv/pythonProject/face1/data' imagepaths = [os.path.join(path, f) for f in os.listdir(path)] for imagePath in imagepaths: name1 = str(os.path.split(imagePath)[1].split('.', 2)[1]) names.append(name1) cap = cv2.VideoCapture('3.mp4') name() while True: flag, frame = cap.read() # 獲得攝像頭讀取到的資料(flag為返回值,frame為視訊中的每一幀) if not flag: break face_detect_demo(frame) if ord(' ') == cv2.waitKey(10): # 按空格,退出 break cv2.destroyAllWindows() cap.release() # print(names)
到此這篇關於Python基於opencv實現的臉部辨識的文章就介紹到這了,更多相關opencv臉部辨識內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45