1. 程式人生 > >python+opencv實現人臉檢測

python+opencv實現人臉檢測

前言

計算機視覺是人工智慧領域中的一個重要分之,傳統的安防監控越來越智慧化,不僅僅要求簡單的移動偵測,還要求能檢測人臉。目前實現人臉檢測解決方案主要分為兩種,一種是依靠大型伺服器來實現,它的特點是計算能力強,同時依賴強大的人臉資料庫可以執行相關演算法將捕獲到的人臉進行精準識別;另一種是依賴於嵌入式硬體執行在裝置終端,比如海思Hi3559A之類的晶片,它的一個特點就是利用特定的硬體設計,將複雜的影象矩陣運算用硬體實現(硬解碼),加快運算速度,這種方案可以實現簡單的人臉檢測功能。

背景知識

OpenCV(Open Source Computer Vision Library)是一個開源跨平臺計算機視覺庫。它輕量級而且高效——由一系列 C 函式和少量 C++ 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。利用OpenCV類庫可以構建我們機器視覺應用,很方便地從視訊流中檢測識別人臉,此外它也是一個功能齊全的影象處理類庫,將影象的資料轉換為RGB資料,進而利用各種濾波演算法、區域性增強演算法實現影象的美顏、去燥等。

Python就不用多介紹了,一門高效能資料處理語言,能以命令列或指令碼方式執行,對資料處理十分得心應手,主要依賴它豐富的類庫支援,與matlab相娉美。影象資料處理本來就是一項繁雜的數學運算(矩陣),對於高維度的矩陣運算CPU是比GPU弱的,python集成了相關演算法,使我們更專注於上層應用的開發,縮短研發週期。

簡單人臉檢測樣例

樣例下載

執行環境: Ubuntu16.04

程式語言: python

視訊流: IPC的RTSP流(採用低解析度的3碼流,降低運算複雜度,提升實時性)

#! /usr/bin/python
import cv2
import random 

#video source,it can be rtsp or local file
cap = cv2.VideoCapture("rtsp://admin:
[email protected]
:554/02") #face detect data model classifier = cv2.CascadeClassifier( "./haarcascade_frontalface_default.xml" ) #draw face detect area color color = (0,255,0) ret,frame = cap.read() while ret: ret,frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) faceRects = classifier.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) if len(faceRects): for faceRect in faceRects: x,y,w,h = faceRect cv2.rectangle(frame,(x,y),(x+h,y+w),color,2) filename = str(random.randint(10000,100000)) filename += '.jpg' cv2.imwrite(filename,frame) cv2.imshow("frame",frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() cap.release()

總結

Python中對影象處理簡直簡單到難以讓人置信,它省去的影象的編碼解碼等繁雜易錯的環節,提供了統一的程式設計介面,簡直是程式設計師的福音啊,試想用C/C++開發的話的要一系列的程式碼編寫、編譯、執行、除錯,簡直太煩了有沒有,此外python還可以對影象進行一些濾波、補償、去噪處理,自己就可實現圖片的美顏,簡直就是撩妹神技,記2018年末於廣州。

參考:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html (KNN演算法等數學解析)