摘要:總結在本文中,我們學習了如何使用中的,即通過代碼寫了一個人臉檢測的程序。
OpenCV是如今最流行的計算機視覺庫,而我們今天就是要學習如何安裝使用OpenCV,以及如何去訪問我們的攝像頭。然后我們一起來看看寫一個人臉檢測程序是如何地簡單,簡單到只需要幾行代碼。
在開始之前,我假設你已經對Python有一定的了解。當然,如果你覺得你還不夠格,這里有推薦一些學習Python的電子書,你可以先學習下Python,如此可以讓你更好地理解接下來的步驟。另外,這里還推薦一本電子書來學習OpenCV。
好,不浪費時間,開始吧。
To setup opencv in python environment you will need these things ready ( match the versions to follow along with this tutorial),
首先我們需要先準備好這些環境(版本記得配好):
Python 2.x
OpenCV 2.x
Numpy庫 (這個可以在稍后用pip下載)
首先,對于下載Python,我們可以先到官網上下對應的版本,如果是Windows就可能是msi格式的版本,如果是Mac就可能是pkg格式的安裝包,如果是Linux則可能是源碼包。
安裝和Python后打開命令行就可以使用pip命令進行Python包的安裝了,如:
由于OpenCV使用Numpy庫,因此先通過命令pip install numpy安裝Numpy庫。安裝完后,嘗試導入,沒有報錯則ok:
然后進入OpenCV官網下對應的版本并安裝,嘗試導入:
嘗試人臉檢測萬事俱備,只欠東風。我們來寫代碼檢測人臉吧,來一發OpenCV的Hello world。
在這里我們準備使用pre-trained的XML文件,這些XML文件都較難訓練,但是我們不需要擔心,因此OpenCV已經為我們提供了很多人臉檢測相關的pre-trained分類器。
想要使用這寫分類器,我們需要將分類器的XML文件haarcascade_frontalface_default.xml從opencv文件夾/sources/data/haarcascades/下復制到我們的項目目錄下,就是我們將要寫程序的目錄下。如果沒有opencv文件夾/sources/data/haarcascades/這個目錄,可以嘗試找一下opencv文件夾/share/OpenCV/haarcascades/。只要找到如下文件即可:
然后如果我們要加載這個分類器的話,如此就好:
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
然后接下來我們先來測試一下攝像頭吧,
cap = cv2.VideoCapture(0) ret, img = cap.read() cv2.imshow("windowname", img) cv2.waitKey(0) # 釋放攝像頭資源 cap.release()
以上的代碼是調用你電腦的0號攝像頭,并展示出來。當然,如果你有多個攝像頭,那么你也可以試試別的id,修改VideoCapture函數的參數即可。
其中cap.read()就是從攝像頭獲取到圖像,這個函數返回了兩個變量,第一個為布爾值表示成功與否,以及第二個是圖像。
然后程序通過imshow()展示圖片,其第一個傳入的參數為窗口的名稱,而第二個就是要展示的圖片,以上代碼傳入的就是我們的自拍。
而waitKey是用來停在圖片的展示界面,讓你看清楚,參數可以是10、100、1000等,單位是毫秒,這里填0就是一直停著。注意了,如果停留的時間不夠久,就可能看不見imshow的照片了。
運行了這段代碼,你將會看到攝像頭所拍攝的畫面,一般來說就是你自己了。
接下來我們將圖片先轉換為灰度圖片,
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
然后就開始了人臉檢測之旅:
faces = detector.detectMultiScale(gray, 1.3, 5)
以上的這句代碼會等到一串list,list中的每個都有x, y, height, width四個變量。其中list表示檢測到的人臉,即list的size就是人臉的個數,而每個人臉在圖片中的位置是(x, y, height, width)。
為了能讓我們更直觀地看出來檢測結果,我們將這些人臉框出來:
for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)更進一步
現在我們已經通過攝像頭檢測到人臉了,但是我們真正需要的是不是一張靜態的圖片,我們需要的是一個能檢測的實時動態視頻流。因此我們加一個循環,然后不斷的檢測,最終在顯示在新窗口中。
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") cap = cv2.VideoCapture(0) while True: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imshow("frame", img) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()
需要注意的是,結尾用了waitKey和ord實現了按q退出的功能,就是每一毫秒都在檢測鍵盤有沒有按下了q,要是按下了就退出循環了。接下來就釋放資源。
總結在本文中,我們學習了如何使用Python中的OpenCV,即通過代碼寫了一個人臉檢測的程序。我們溫習或學習了這些知識點:
使用OpenCV的分類器
從攝像頭中讀取照片
在圖片上換框框
在新窗口上展示圖片
實時地進行人臉檢測
P.S. 你們發現了XML那里有一個叫貓臉識別的文件嗎!!!
先這樣吧
原文,若有錯誤之處請指出,更多地關注煎魚。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41761.html
摘要:上一篇文章的地址利用進行識別相似圖片一安裝官網在進行下一步操作時,我們需要安裝,本來安裝的步驟跟平常安裝其他模塊一樣,而然由于的歷史原因用過都懂,弄得一點都不友好。 前言 和網上各種首先你要有一個女朋友的系列一樣,想進行人臉判斷,首先要有臉,只要能靠確定人臉的位置,那么進行兩張人臉是否相似的操作便迎刃而解了。 所以本篇文章著重講述如何利用openCV定位人臉。 上一篇文章的地址: 利用...
摘要:十開放模式識別項目開放模式識別項目,致力于開發出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...
摘要:實現實時人臉識別更新新增測試方法直接使用特征進行計算對比此次更新主要想法上一個版本是使用對準備好的若干張照片進行訓練,首先準確率不是很高還沒細究問題,猜測原因是自己準備的圖片問題,以及實時采集實時的環境影響,但最主要的原因還是對每個目標對象 opencv+mtcnn+facenet+python+tensorflow 實現實時人臉識別(2018.9.26更新) 新增測試方法直接使用em...
摘要:本文基于環境,采用為基礎來構建實時人臉檢測與識別系統,探索人臉識別系統在現實應用中的難點。對于人臉檢測方法,效果好于的方法,但是檢測力度也難以達到現場應用標準。本文中,我們采用了基于深度學習方法的人臉檢測系統。 git地址:https://github.com/chenlinzho... 本文主要介紹了系統涉及的人臉檢測與識別的詳細方法,該系統基于python2.7.10/opencv...
閱讀 1760·2021-09-27 14:02
閱讀 3162·2021-09-27 13:36
閱讀 1055·2019-08-30 12:46
閱讀 1842·2019-08-30 10:51
閱讀 3580·2019-08-29 17:02
閱讀 951·2019-08-29 16:38
閱讀 1854·2019-08-29 16:37
閱讀 3028·2019-08-26 10:32