[轉]7行Python代碼的人臉識別

http://www.javashuo.com/article/p-doudxqdf-co.html算法

 

隨着去年alphago 的震撼表現,AI 再次成爲科技公司的寵兒。AI涉及的領域衆多,圖像識別中的人臉識別是其中一個有趣的分支。百度的BFR,Face++的開放平臺,漢王,訊飛等等都提供了人臉識別的API,對於老碼農而言,本身寫一小段代碼,來看看一張圖片中有幾我的,沒有高大上,只是以爲好玩,並且只須要7行代碼。數據結構

import cv2

face_patterns = cv2.CascadeClassifier(r'/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')

sample_image = cv2.imread(r'/Users/abel/201612.jpg')

faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100))

for (x, y, w, h) in faces:
    cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imwrite(r'/Users/abel/201612_detected.png', sample_image);

 

第1行 引入 OpenCV

開源是偉大的,使咱們視野更開闊,並且不用重複造輪子。這裏沒有用PIL,再結合特定算法,而是直接使用了OpenCV(http://opencv.org)。OpenCV是一個基於BSD許可發行的跨平臺計算機視覺庫,能夠運行在Linux、Windows和Mac OS操做系統上,輕量並且高效,用C/C++編寫,同時提供了Python、Ruby、MATLAB等接口,實現了圖像處理和計算機視覺方面的不少通用算法。less

第2行 加載分類器 cv2.CascadeClassifier

CascadeClassifier是Opencv中作人臉檢測時候的一個級聯分類器,該類中封裝的是目標檢測機制即滑動窗口機制+級聯分類器的方式。數據結構包括Data和FeatureEvaluator兩個主要部分。Data中存儲的是從訓練得到的xml文件中載入的分類器數據;而FeatureEvaluator中是關於特徵的載入、存儲和計算。這裏採用的訓練文件是OpenCV中默認提供的haarcascade_frontalface_default.xml。至於Haar,LBP的具體原理,能夠參考opencv的相關文檔,簡單地,能夠理解爲人臉的特徵數據。函數

第3行 加載目標圖片 imread

人臉識別系統通常分爲:人臉圖像採集、人臉圖像預處理、人臉圖像特徵提取以及匹配與識別。 簡化起見,之間讀入圖片,這是一張去年中生代北京閉門會的集體照。 
集體照學習

第4行 多尺度檢測 detectMultiScale

調用 CascadeClassifier 中的調detectMultiScale函數進行多尺度檢測,多尺度檢測中會調用單尺度的方法detectSingleScale。 
參數說明:lua

  • scaleFactor 是 圖像的縮放因子
  • minNeighbors 爲每個級聯矩形應該保留的鄰近個數,能夠理解爲一我的周邊有幾我的臉
  • minSize 是檢測窗口的大小

這些參數都是能夠針對圖片進行調整的,處理結果返回一我的臉的矩形對象列表。操作系統

第5行 和 第6行 爲每一個人臉畫一個框

循環讀取人臉的矩形對象列表,得到人臉矩形的座標和寬高, 而後在原圖片中畫出該矩形框,調用的是OpenCV的rectangle 方法,其中矩形框的顏色等是可調整的。.net

第7行 保存檢測後的結果

萬事具有了,調用imwrite,將檢測後的結果保存到指定的位置。結果圖以下: 
檢測結果code

神祕感不是這7行代碼,而是OpenCV中的相關實現,OpenCV的中文網也是一個學習體會的好場所。xml

所以,7行代碼只是個噱頭,真正的核心是OpenCV。而後,安裝OpenCV環境的時候就是有一些坑,特別記錄一下。

相關文章
相關標籤/搜索