自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于 Python 的人臉檢測 :人臉識別的前提

開發(fā) 人臉識別
對于人臉檢測,其中最著名的算法之一是被稱為Viola-Jones人臉檢測技術(shù),通常稱為Haar級聯(lián)。Haar級聯(lián)在深度學(xué)習(xí)流行之前就被發(fā)明了,是最常用于檢測人臉的技術(shù)之一。

人臉檢測是一種識別數(shù)字圖像中人類面孔的技術(shù)。人臉檢測是一項相對成熟的技術(shù),還記得在您的數(shù)碼相機的舊日子里,當(dāng)您通過取景器看時?您會看到圍繞在取景器中的人們臉部的矩形框。在進行人臉識別之前,您需要學(xué)習(xí)的技術(shù)就是人臉檢測,也就是試圖給臉部賦予一個名字。

對于人臉檢測,其中最著名的算法之一是被稱為Viola-Jones人臉檢測技術(shù),通常稱為Haar級聯(lián)。Haar級聯(lián)在深度學(xué)習(xí)流行之前就被發(fā)明了,是最常用于檢測人臉的技術(shù)之一。

人臉檢測/識別的道德考慮

盡管檢測和識別人臉的能力確實很酷,但它肯定涉及很多道德問題。在將面部識別應(yīng)用到項目中之前,您需要注意一些關(guān)切事項。這些關(guān)切事項包括隱私(人臉檢測可用于在未經(jīng)同意的情況下追蹤人們的活動)、偏見(人臉檢測可能對不同種族、性別或年齡的個體存在偏見)以及濫用(捕捉到的面部可能被用于其他非法用途或惡意目的)。因此,盡管本文側(cè)重于人臉檢測的技術(shù)能力,但在將其應(yīng)用到工作中之前,您應(yīng)該仔細考慮道德和倫理問題。

以下是一些低風(fēng)險項目,可以在其中實施人臉檢測/識別:

  • 考勤跟蹤 —— 您可以在學(xué)?;蚬ぷ鲌鏊褂萌四樧R別進行考勤。
  • 個性化 —— 使用人臉識別來個性化服務(wù)。一個很好的例子是在娛樂服務(wù)中,根據(jù)用戶的觀看歷史推薦特定的電視節(jié)目。
  • 安全 —— 使用人臉識別來解鎖非關(guān)鍵系統(tǒng),如智能手機和計算機。

然而,在某些應(yīng)用中使用人臉識別具有嚴(yán)重的道德影響。以下是一些例子:

  • 執(zhí)法 —— 盡管人臉識別對執(zhí)法可能有用,但人們對其不準(zhǔn)確性和偏見存在一些嚴(yán)重的擔(dān)憂。
  • 監(jiān)視 —— 人臉識別技術(shù)已經(jīng)在一些國家用于監(jiān)視和追蹤其公民,特別是持不同政見者。一些公司還使用人臉識別來監(jiān)視員工的生產(chǎn)力,這直接侵犯了他們的隱私。

如何做Haar級聯(lián)

Haar級聯(lián)分類器用于檢測其經(jīng)過訓(xùn)練的對象。以下是Haar面部分類器的工作原理的高級概述:

  • 首先,使用一組正圖像(包含面部的圖像)和一組負圖像(不包含面部的圖像)對分類器進行訓(xùn)練。
  • 然后從圖像中提取特征。以下圖顯示了從包含面部圖像中提取的一些特征。

  • 為了從圖像中檢測人臉,您需要尋找通常在人臉上找到的各種特征的存在(見下圖),例如眉毛,其中眉毛上方的區(qū)域比下方的區(qū)域亮。

  • 當(dāng)一幅圖像包含所有這些特征的組合時,它被認為包含一個人臉。

幸運的是,不需要知道Haar級聯(lián)是如何工作的,OpenCV可以直接使用預(yù)訓(xùn)練的Haar級聯(lián)進行人臉檢測,以及用于識別其他對象的其他Haar級聯(lián)。預(yù)定義的Haar級聯(lián)列表可在GitHub上找到,鏈接為:https://github.com/opencv/opencv/tree/master/data/haarcascades。

開源計算機視覺(OpenCV)是由英特爾最初開發(fā)的開源計算機視覺和機器學(xué)習(xí)軟件庫。它旨在為計算機視覺應(yīng)用程序提供共同的基礎(chǔ)架構(gòu),并加速機器感知在商業(yè)產(chǎn)品中的使用。OpenCV附帶了幾個預(yù)訓(xùn)練的Haar級聯(lián),可以檢測眼睛、臉部、俄羅斯車牌、微笑等。對于人臉檢測,您將需要`haarcascade_frontalface_default.xml`文件,可以從上文的GitHub鏈接中下載。

安裝OpenCV

讓我們嘗試使用OpenCV進行人臉檢測。首先,您需要使用以下命令進行安裝:

!pip install opencv-python

對于本文示例,您需要創(chuàng)建一個名為`face_detection.py`的文件。首先,通過以下語句導(dǎo)入OpenCV庫:

import cv2

從Webcam讀取

接下來要做的是連接到您的網(wǎng)絡(luò)攝像頭并在屏幕上顯示圖像:

import cv2

# default webcam
stream = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    (grabbed, frame) = stream.read()

    # Show the frame
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1) & 0xFF    
    if key == ord("q"):    # Press q to break out of the loop
        break

# Cleanup
stream.release()
cv2.waitKey(1)
cv2.destroyAllWindows()
cv2.waitKey(1)

為引用您的網(wǎng)絡(luò)攝像頭,請使用`VideoCapture`類并傳遞一個數(shù)字,表示您的攝像頭實例(0表示第一個攝像頭,1表示第二個攝像頭,依此類推)。

stream = cv2.VideoCapture(0)

為了持續(xù)捕獲來自網(wǎng)絡(luò)攝像頭的輸入,使用一個無限循環(huán)(`while(True)`)讀取每一幀然后顯示它:

 # Capture frame-by-frame
    (grabbed, frame) = stream.read()

    # Show the frame
    cv2.imshow("Image", frame)

為了使程序能夠優(yōu)雅地退出,等待用戶在鍵盤上按鍵。當(dāng)按下"q"鍵時,循環(huán)終止:

   key = cv2.waitKey(1) & 0xFF    
    if key == ord("q"):    # Press q to break out of the loop
        break

然后進行清理工作:

# Cleanup
stream.release()
cv2.waitKey(1)
cv2.destroyAllWindows()
cv2.waitKey(1)

要運行程序,請轉(zhuǎn)到終端并鍵入:

$ python face_detection.py

現(xiàn)在您應(yīng)該看到您的臉:

檢測到臉部

現(xiàn)在來玩?zhèn)€有趣的部分 —— 檢測臉部。首先,創(chuàng)建`CascadeClassifier`類的一個實例,并將`haarcascade_frontalface_default.xml`文件傳遞給它:

import cv2

# for face detection
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

您需要復(fù)制`haarcascade_frontalface_default.xml`文件并將其放在與`face_detection.py`文件相同的文件夾中。您可以從https://github.com/opencv/opencv/tree/master/data/haarcascades下載XML文件?,F(xiàn)在,您可以使用`detectMultiScale()`函數(shù)來檢測臉部:

while(True):
    # Capture frame-by-frame
    (grabbed, frame) = stream.read()

    #===============DETECTING FACES============
    # Convert to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Try to detect faces in the webcam
    faces = face_cascade.detectMultiScale(gray, 
                                          scaleFactor=1.3, 
                                          minNeighbors=5)
    
    # for each faces found
    for (x, y, w, h) in faces:        
        # Draw a rectangle around the face
        color = (0, 255, 255) # in BGR
        stroke = 5    
        cv2.rectangle(frame, (x, y), (x + w, y + h), 
            color, stroke)
    #===============DETECTING FACE=============

    # Show the frame
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1) & 0xFF    
    if key == ord("q"):    # Press q to break out of the loop
        break

請注意`detectMultiScale()`函數(shù)中的以下參數(shù):

  • scaleFactor` 參數(shù)允許您將捕獲圖像重新縮放到新的尺寸,以便算法能夠檢測到人臉。
  • minNeighbors` 參數(shù)指定每個候選矩形應(yīng)具有多少鄰居才能保留它。此參數(shù)影響檢測到的人臉的質(zhì)量。較高的值導(dǎo)致更少的檢測,但質(zhì)量更高。通常,4到6是一個不錯的數(shù)字。

您可以變化這兩個參數(shù)的值以確保正確檢測到人臉。

當(dāng)檢測到臉部時,您希望在它們周圍畫出矩形:

# for each faces found
    for (x, y, w, h) in faces:        
        # Draw a rectangle around the face
        color = (0, 255, 255) # in BGR
        stroke = 5    
        cv2.rectangle(frame, (x, y), (x + w, y + h), 
            color, stroke)

當(dāng)您重新運行`face_detection.py`文件時,現(xiàn)在應(yīng)該能夠檢測到臉部了。

`face_detection.py`文件的完整內(nèi)容如下:

import cv2

# for face detection
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# default webcam
stream = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    (grabbed, frame) = stream.read()

    # Convert to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Try to detect faces in the webcam
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    
    # for each faces found
    for (x, y, w, h) in faces:        
        # Draw a rectangle around the face
        color = (0, 255, 255) # in BGR
        stroke = 5    
        cv2.rectangle(frame, (x, y), (x + w, y + h), 
            color, stroke)

    # Show the frame
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1) & 0xFF    
    if key == ord("q"):    # Press q to break out of the loop
        break

# Cleanup
stream.release()
cv2.waitKey(1)
cv2.destroyAllWindows()
cv2.waitKey(1)

總結(jié)

希望這篇簡短的文章為您提供了一種使用Python和您的網(wǎng)絡(luò)攝像頭檢測臉部的簡單方法。確保下載`haarcascade_frontalface_default.xml`文件并將其放入與您的Python文件相同的文件夾中。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2024-07-18 00:00:25

PyTorch神經(jīng)網(wǎng)絡(luò)

2017-03-20 08:58:02

Python人臉識別AI

2021-08-26 10:36:02

人臉識別人工智能技術(shù)

2013-05-28 11:08:51

人臉識別html5

2021-04-23 13:03:12

人臉識別人工智能AI

2021-08-13 10:01:19

人臉識別人工智能數(shù)據(jù)

2021-09-07 09:01:07

人臉識別人工智能數(shù)據(jù)

2020-10-29 16:25:46

人臉識別AI人工智能

2013-08-26 10:53:26

人臉檢測API

2015-02-10 10:08:59

JavaScript

2024-09-30 06:04:02

人臉識別Python機器學(xué)習(xí)

2020-12-23 08:29:08

人臉識別AI人工智能

2024-11-01 07:00:00

人臉識別Python機器學(xué)習(xí)

2021-08-19 06:28:28

人工智能AI生物識別

2021-05-10 11:08:00

人工智能人臉識別

2019-12-24 08:36:31

人臉識別AI隱私

2021-06-30 06:28:07

人臉識別AI人工智能

2017-07-24 15:06:02

代碼人臉識別實踐

2021-10-13 15:15:22

人工智能AI人臉識別

2019-11-25 13:44:02

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

51CTO技術(shù)棧公眾號