成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過opencv制作人臉識別的窗口

開發 后端
今天,Runsen教大家將構建一個簡單的Python腳本來處理圖像中的人臉,使在OpenCV庫中兩種方法 。

[[402533]]

人臉檢測,看似要使用深度學習,覺得很高大牛逼,其實通過opencv就可以制作人臉識別的窗口。

圖片

今天,Runsen教大家將構建一個簡單的Python腳本來處理圖像中的人臉,使在OpenCV庫中兩種方法 。

首先,我們將使用haar級聯分類器,這對初學者來說是一種簡單的方法(也不太準確),也是最方便的方法。

其次是單發多盒檢測器(或簡稱SSD),這是一種深度神經網絡檢測圖像中對象的方法。

使用Haar級聯進行人臉檢測

基于haar特征的級聯分類器的,OpenCV已經為我們提供了一些分類器參數,因此我們無需訓練任何模型,直接使用。

opencv的安裝

  1. pip install opencv-python 

我們首先導入OpenCV:

  1. import cv2 

下面對示例圖像進行測試,我找來了我學校的兩個漂亮美女的圖像:

  1. image = cv2.imread("beauty.jpg"

函數imread()從指定的文件加載圖像,并將其作為numpy的 N維數組返回。

在檢測圖像中的面部之前,我們首先需要將圖像轉換為灰度圖:

  1. image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

下面,因為要初始化人臉識別器(默認的人臉haar級聯),需要下載對應的參數xml文件,

這里選擇最初的haarcascade_frontalface_default.xml

下面代碼就是加載使用人臉識別器

  1. face_cascade = cv2.CascadeClassifier("haarcascade_fontalface_default.xml"

現在讓我們檢測圖像中的所有面孔:

  1. # 檢測圖像中的所有人臉 
  2. faces = face_cascade.detectMultiScale(image_gray) 
  3. print(f"{len(faces)} faces detected in the image."

detectMultiScale() 函數將圖像作為參數并將不同大小的對象檢測為矩形列表,因此我們繪制矩形,同樣有rectangle方法提供

  1. #為每個人臉繪制一個藍色矩形 
  2. for x, y, width, height in faces: 
  3.  # 這里的color是 藍 黃 紅,與rgb相反,thickness設置寬度 
  4.  cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2) 

最后,讓我們保存新圖像:

  1. cv2.imwrite("beauty_detected.jpg", image) 

基于haar特征的級聯分類器的結果圖

我們驚奇的發現圖片1是沒有設備出來的,這是因為存在障礙物,

我們驚奇的發現圖片2是竟然設別出來了兩個窗口。

Haar級聯結合攝像頭

使用Haar級聯進行人臉檢測可以說是opencv最基礎的效果,下面我們利用攝像頭將Haar級聯進行合并,這樣就可以達到開頭的效果。

  1. import cv2 
  2.  
  3. #創建新的cam對象 
  4. cap = cv2.VideoCapture(0) 
  5. #初始化人臉識別器(默認的人臉haar級聯) 
  6. face_cascade = cv2.CascadeClassifier("haarcascade_fontalface_default.xml"
  7.  
  8. while True
  9.     # 從攝像頭讀取圖像 
  10.     _, image = cap.read() 
  11.     # 轉換為灰度 
  12.     image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
  13.     # 檢測圖像中的所有人臉 
  14.     faces = face_cascade.detectMultiScale(image_gray, 1.3, 5) 
  15.     # 為每個人臉繪制一個藍色矩形 
  16.     for x, y, width, height in faces: 
  17.         cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2) 
  18.     cv2.imshow("image", image) 
  19.     if cv2.waitKey(1) == ord("q"): 
  20.         break 
  21.  
  22. cap.release() 
  23. cv2.destroyAllWindows() 

使用SSD的人臉檢測

上面的效果是已經過時了,但是OpenCV為我們提供了包裝中dnn模塊cv2,從而可以直接加載經過預訓練的深度學習模型。

2015年底有人提出了一個實時對象檢測網絡Single Shot MultiBox Detector縮寫為SSD

SSD對象檢測的Model

SSD對象檢測網絡簡單說可以分為三個部分:

  • 基礎網絡(backbone) 這里為VGG16
  • 特征提取Neck,構建多尺度特征
  • 檢測頭 – 非最大抑制與輸出

要開始使用SSD在OpenCV中,需要下載RESNET人臉檢測模型和其預訓練的權重,然后將其保存到代碼weights工作目錄:

RESNET人臉檢測模型和權重

  1. import cv2 
  2. import numpy as np 
  3.  
  4. # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt 
  5. prototxt_path = "weights/deploy.prototxt.txt" 
  6. # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel  
  7. model_path = "weights/res10_300x300_ssd_iter_140000_fp16.caffemodel" 
  8. # 加載Caffe model 
  9. model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path) 
  10. # 讀取所需圖像 
  11. image = cv2.imread("beauty.jpg"
  12. # 獲取圖像的寬度和高度 
  13. h, w = image.shape[:2] 

現在,需要這個圖像傳遞到神經網絡中,由于下載的模型是(300, 300) px的。

因此,我們需要將圖像調整為的(300, 300)px形狀:

  1. # 預處理圖像:調整大小并執行平均減法。104.0, 177.0, 123.0 表示b通道的值-104,g-177,r-123   
  2. # 在深度學習中通過減去數人臉據集的圖像均值而不是當前圖像均值來對圖像進行歸一化,因此這里寫死了 
  3. blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0)) 

將此blob對象用作神經網絡的輸入,獲取檢測到的面部:

  1. # 將圖像輸入神經網絡 
  2. model.setInput(blob) 
  3. # 得到結果 
  4. output = np.squeeze(model.forward()) 

輸出對象output 具有所有檢測到的對象,在這種情況下一般都是人臉,讓我們遍歷output,并在取一個置信度大于50%的判斷條件:

  1. font_scale = 1.0 
  2. output.shape ==(200, 7) 
  3. for i in range(0, output.shape[0]): 
  4.     # 置信度  
  5.     confidence = output[i, 2] 
  6.     # 如果置信度高于50%,則繪制周圍的方框 
  7.     if confidence > 0.5: 
  8.         # 之前將圖片變成300*300,接下來提取檢測到的對象的模型的置信度后,我們得到周圍的框 output[i, 3:7],然后將其width與height原始圖像的和相乘,以獲得正確的框坐標 
  9.         box = output[i, 3:7] * np.array([w, h, w, h]) 
  10.         # 轉換為整數 
  11.         start_x, start_y, end_x, end_y = box.astype(np.int
  12.         # 繪制矩形 
  13.         cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2) 
  14.         # 添加文本 
  15.         cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2) 

最后我們展示并保存新圖像:

  1. cv2.imshow("image", image) 
  2. cv2.waitKey(0) 
  3. cv2.imwrite("beauty_detected.jpg", image) 

 

下面是完整代碼

  1. import cv2 
  2. import numpy as np 
  3. # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt 
  4. prototxt_path = "weights/deploy.prototxt.txt" 
  5. # 下載鏈接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel  
  6. model_path = "weights/res10_300x300_ssd_iter_140000_fp16.caffemodel" 
  7. model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path) 
  8. image = cv2.imread("beauty.jpg"
  9. h, w = image.shape[:2] 
  10. blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0)) 
  11. model.setInput(blob) 
  12. output = np.squeeze(model.forward()) 
  13. font_scale = 1.0 
  14. for i in range(0, output.shape[0]): 
  15.     confidence = output[i, 2] 
  16.     if confidence > 0.5: 
  17.         box = output[i, 3:7] * np.array([w, h, w, h]) 
  18.         start_x, start_y, end_x, end_y = box.astype(np.int
  19.         cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2) 
  20.         cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2) 
  21. cv2.imshow("image", image) 
  22. cv2.waitKey(0) 
  23. cv2.imwrite("beauty_detected.jpg", image) 

SSD結合攝像頭的人臉檢測

SSD結合攝像頭的人臉檢測方法更好,更準確,但是每秒傳輸幀數FPS方面可能低,因為它不如Haar級聯方法快,但這問題并不大。

下面是SSD結合攝像頭的人臉檢測的全部代碼

  1. import cv2 
  2. import numpy as np 
  3. prototxt_path = "weights/deploy.prototxt.txt" 
  4. model_path = "weights/res10_300x300_ssd_iter_140000_fp16.caffemodel" 
  5. model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path) 
  6. cap = cv2.VideoCapture(0) 
  7. while True
  8.     _, image = cap.read() 
  9.     h, w = image.shape[:2] 
  10.     blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0)) 
  11.     model.setInput(blob) 
  12.     output = np.squeeze(model.forward()) 
  13.     font_scale = 1.0 
  14.     for i in range(0, output.shape[0]): 
  15.         confidence = output[i, 2] 
  16.         if confidence > 0.5: 
  17.             box = output[i, 3:7] * np.array([w, h, w, h]) 
  18.             start_x, start_y, end_x, end_y = box.astype(np.int
  19.             cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2) 
  20.             cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2) 
  21.     cv2.imshow("image", image) 
  22.     if cv2.waitKey(1) == ord("q"): 
  23.         break 
  24. cv2.destroyAllWindows() 
  25. cap.release() 

 

責任編輯:姜華 來源: Python之王
相關推薦

2012-04-08 20:52:47

游戲開發

2009-08-26 09:03:00

2021-08-26 10:36:02

人臉識別人工智能技術

2021-04-23 13:03:12

人臉識別人工智能AI

2024-06-12 12:57:12

2014-10-17 14:43:52

制作人耿兵IP創新

2020-10-29 16:25:46

人臉識別AI人工智能

2015-02-03 10:43:18

NBA英雄Felix精品手游

2015-01-30 17:18:26

捕魚3樊少強Testin崩潰大師

2019-12-24 08:36:31

人臉識別AI隱私

2021-06-30 06:28:07

人臉識別AI人工智能

2023-08-28 16:14:26

人臉識別

2020-08-11 15:39:07

人臉識別智慧城市面部識別

2013-08-26 10:53:26

人臉檢測API

2023-11-14 08:38:43

Golang人臉識別

2009-12-04 15:05:22

ipcop軟路由

2021-07-26 18:14:58

人臉識別AI人工智能

2021-05-10 11:08:00

人工智能人臉識別
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产一区二区三区在线观看 | 久久99精品久久久久久国产越南 | 国产精品视频在线免费观看 | 99色综合| 国产999精品久久久 午夜天堂精品久久久久 | 免费一级欧美在线观看视频 | 日韩一区av | 91免费看片| 99看片网| 毛片一级片 | 人人澡人人射 | 一区二区精品 | 色影视| 亚洲综合视频 | 91精品久久久久久久久中文字幕 | 就操在线 | 欧美日韩在线观看一区 | 亚洲精品一区中文字幕乱码 | 毛片免费看的 | 91亚洲国产成人精品一区二三 | 亚洲精品久久久久久一区二区 | 精品视频久久久 | 亚洲在线一区二区 | 中文字幕日韩欧美一区二区三区 | 91一区二区| 天天操网 | 日韩av免费在线观看 | 亚洲成人免费视频在线 | 欧美久久不卡 | 久久久成人免费一区二区 | 国产亚洲精品综合一区 | 免费一区 | 久久1区| 成人福利 | 久久精品亚洲精品国产欧美 | 男女羞羞视频网站 | 欧美亚洲第一区 | 不卡av电影在线播放 | 久久精品久久久久久 | 久久综合伊人 | 久久久精品一区二区 |