Python opencv,open cv python_Open CV非常牛逼!眾所周知!今天就來見識一下它究竟有多牛逼!

 2023-12-25 阅读 31 评论 0

摘要:原標題:Open CV非常牛逼!眾所周知!今天就來見識一下它究竟有多牛逼!私信小編007即可獲取數十套PDF哦!▌理解深度學習面部識別嵌入那么,基于深度學習的面部識別是怎樣工作的呢?秘密就是一種叫做“深度度量學習”的技術。Pyth

原標題:Open CV非常牛逼!眾所周知!今天就來見識一下它究竟有多牛逼!

私信小編007即可獲取數十套PDF哦!

▌理解深度學習面部識別嵌入

那么,基于深度學習的面部識別是怎樣工作的呢?秘密就是一種叫做“深度度量學習”的技術。

Python opencv,如果你有深度學習的經驗,你應該知道,通常情況下訓練好的網絡會接受一個輸入圖像,并且給輸入的圖像生成一個分類或標簽。

圖1:利用深度度量學習進行面部識別需要“三元組訓練”。三元組包括三張不同的面部圖像,其中兩張屬于同一個人。神經網絡為每張面部圖像生成一個128維向量。對于同一個人的兩張面部圖像,我們調整神經網絡使得輸出向量的距離度量盡可能接近。

強烈建議閱讀以上文章,以深入了解深度學習面部嵌入的工作原理。

▌安裝面部識別庫

為了用Python和OpenCV吸納面部識別,我們需要安裝一些庫:

opencv和cv2的區別?$ workon # optional

$ pip install dlib

或者從源代碼進行編譯:

$ workon # optional

$ git clone https://github.com/davisking/dlib.git

python查找替換?$ cd dlib

$ mkdir build

$ cd build

$ cmake .. -DUSE_AVX_INSTRUCTIONS=1

$ cmake --build .

Open CV?$ cd ..

$ python setup.py install --yes USE_AVX_INSTRUCTIONS

安裝有GPU支持的dlib(可選)

如果你有兼容CUDA的GPU,那么可以安裝有GPU支持的dlib,這樣面部識別能更快、更精確。

我建議從源代碼安裝dlib,這樣可以更精細地控制安裝過程:

python3 cv2、$ workon # optional

$ git clone https://github.com/davisking/dlib.git

$ cd dlib

$ mkdir build

$ cd build

python未找到cv模塊?$ cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1

$ cmake --build .

$ cd ..

$ python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA

安裝face_recognition包

python中cv2。face_recognition模塊只需簡單地使用pip命令即可安裝:

$ workon # optional

$ pip install face_recognition

安裝imutlis

我們還需要imutils包提供一些遍歷的函數。在Python虛擬環境中使用pip即可:

$ workon # optional

$ pip install imutils

▌面部識別數據集

$ tree --filelimit 10 --dirsfirst

.

├── dataset

│ ├── alan_grant [22 entries]

│ ├── claire_dearing [53 entries]

│ ├── ellie_sattler [31 entries]

│ ├── ian_malcolm [41 entries]

│ ├── john_hammond [36 entries]

│ └── owen_grady [35 entries]

├── examples

│ ├── example_01.png

│ ├── example_02.png

│ └── example_03.png

├── output

│ └── lunch_scene_output.avi

├── videos

│ └── lunch_scene.mp4

├── search_bing_api.py

├── encode_faces.py

├── recognize_faces_image.py

├── recognize_faces_video.py

├── recognize_faces_video_file.py

└── encodings.pickle

10 directories, 11 files

▌用OpenCV和深度學習對面部進行編碼

圖3:利用深度學習和Python進行面部識別。對每一個面部圖像,用face_recognition模塊的方法生成一個128維實數特征向量。

在識別圖像和視頻中的面部之前,我們首先需要在訓練集中識別面部。要注意的是,我們并不是在訓練網絡——該網絡已經在300萬圖像的訓練集上訓練過了。

首先需要導入必需的包。這個腳本需要事先安裝imutils、face_recognition和OpenCV。請翻到前面“安裝面部識別庫”一節確保你已經安裝了必須的庫。

首先用argparse處理運行時傳遞的命令行參數:

行3用輸入數據集的路徑,建立了一個列表imagePaths。

我們還需要在循環開始之前初始化兩個列表,分別是knownEncodings和knownNames。這兩個列表分別包含面部編碼數據和數據集中相應人物的名字(行6和行7)。

現在可以依次循環侏羅紀公園中的每個角色了!

接下來定位面部位置并計算編碼:

1 # detect the (x, y)-coordinates of the bounding boxes

2 # corresponding to each face in the input image

3 boxes = face_recognition.face_locations(rgb,

4 model=args["detection_method"])

5

6 # compute the facial embedding for the face

7 encodings = face_recognition.face_encodings(rgb, boxes)

8

9 # loop over the encodings

10 for encoding in encodings:

11 # add each encoding + name to our set of known names and

12 # encodings

13 knownEncodings.append(encoding)

14 knownNames.append(name)

這段代碼是最有意思的部分!

每次循環都會檢測一個面部圖像(或者一張圖像中有多個面部,我們假設這些面部都屬于同一個人,但如果你使用自己的圖像的話,這個假設有可能不成立,所以一定要注意)。

比如,假設rgb里的圖像是Ellie Sattler的臉。

行3和4查找面部位置,返回一個包含了許多方框的列表。我們給face_recognition.face_locations方法傳遞了兩個參數:

行3構建了一個字典,它包含encodings和names兩個鍵。

行4-6將名字和編碼保存到硬盤中,供以后使用。

怎樣才能在終端上運行encode_faces.py腳本?

要創建面部嵌入,可以從終端執行以下命令:

1$ python encode_faces.py --dataset dataset --encodings encodings.pickle

2[INFO] quantifying faces...

3[INFO] processing image 1/218

4[INFO] processing image 2/218

5[INFO] processing image 3/218

6...

7[INFO] processing image 216/218

8[INFO] processing image 217/218

9[INFO] processing image 218/218

10[INFO] serializing encodings...

11$ ls -lh encodings*

12-rw-r--r--@ 1 adrian staff 234K May 29 13:03 encodings.pickle

從輸出中課件,它生成了個名為encodings.pickle的文件,該文件包含了數據集中每個面部圖像的128維面部嵌入。

在我的Titan X GPU上,處理整個數據集花費了一分鐘多一點,但如果只使用CPU,就要做好等待很久的心理準備。

在我的Macbook Pro上(沒有GPU),編碼218張圖像需要21分20秒。

如果你有GPU并且編譯dlib時選擇了支持GPU,那么速度應該會快得多。

▌識別圖像中的面部

注意:別忘了我們的模型是根據原版電影中的四個角色進行訓練的:Alan Grant、Ellie Sattler、Ian Malcolm和John Hammond。模型并沒有針對Donald Gennaro(律師)進行訓練,所以他的面部被標記為“Unknown”。這個行為是特意的(不是意外),以演示我們的視頻識別系統在識別訓練過的面部的同時,會把不認識的面部標記為“Unknown”。

▌面部識別代碼能運行在樹莓派上嗎?

從某種意義上,可以。不過有一些限制:

樹莓派內存太小,沒辦法運行更準確的基于CNN的面部檢測器;

因此只能用HOG方式;

即使如此,HOG方式在樹莓派上也太慢,沒辦法用于實時面部檢測;

所以只能用OpenCV的Haar層疊方式。

即使這樣能運行起來,實際的速率也只有1~2FPS,而且就算是這種速率也需要許多技巧。

▌總結

在這篇指南中,我們學習了如何利用OpenCV、Python和深度學習來進行面部識別。此外,我們還利用了Davis King的dlib庫和Adam Geitgey的face_recognition模塊,后者對dlib的深度度量學習進行了封裝,使得面部識別更容易完成。

我們發現,我們的面部識別實現同時具有以下兩個特點:準確,并且能在GPU上實時運行。返回搜狐,查看更多

責任編輯:

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/194619.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息