現在的人臉識別技術已經得到了非常廣泛的應用,支付領域、身份驗證、美顏相機里都有它的應用。用iPhone的同學們應該對下面的功能比較熟悉
這里有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習python的小伙伴!這里是python學習者聚集地,歡迎初學和進階中的小伙伴!
iPhone的照片中有一個“人物”的功能,能夠將照片里的人臉識別出來并分類,背后的原理也是人臉識別技術。
這篇文章主要介紹怎樣用Python實現人臉檢測。人臉檢測是人臉識別的基礎。人臉檢測的目的是識別出照片里的人臉并定位面部特征點,人臉識別是在人臉檢測的基礎上進一步告訴你這個人是誰。
好了,介紹就到這里。接下來,開始準備我們的環境。
準備工作
本文的人臉檢測基于dlib,dlib依賴Boost和cmake,所以首先需要安裝這些包,以Ubuntu為例:
$ sudo apt-get install build-essential cmake
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libboost-all-dev
我們的程序中還用到numpy,opencv,所以也需要安裝這些庫:
$ pip install numpy
$ pip install scipy
$ pip install opencv-python
$ pip install dlib
人臉檢測基于事先訓練好的模型數據,從這里可以下到模型數據
http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
下載到本地路徑后解壓,記下解壓后的文件路徑,程序中會用到。
dlib的人臉特征點
上面下載的模型數據是用來估計人臉上68個特征點(x, y)的坐標位置,這68個坐標點的位置如下圖所示:
我們的程序將包含兩個步驟:
第一步,在照片中檢測人臉的區域
第二部,在檢測到的人臉區域中,進一步檢測器官(眼睛、鼻子、嘴巴、下巴、眉毛)
人臉檢測代碼
我們先來定義幾個工具函數:
def rect_to_bb(rect):
x = rect.left()
y = rect.top()
w = rect.right() - x
h = rect.bottom() - y
return (x, y, w, h)
這個函數里的rect是dlib臉部區域檢測的輸出。這里將rect轉換成一個序列,序列的內容是矩形區域的邊界信息。
def shape_to_np(shape, dtype="int"):
coords = np.zeros((68, 2), dtype=dtype)
for i in range(0, 68):
coords[i] = (shape.part(i).x, shape.part(i).y)
return coords
這個函數里的shape是dlib臉部特征檢測的輸出,一個shape里包含了前面說到的臉部特征的68個點。這個函數將shape轉換成Numpy array,為方便后續處理。
def resize(image, width=1200):
r = width * 1.0 / image.shape[1]
dim = (width, int(image.shape[0] * r))
resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
return resized
這個函數里的image就是我們要檢測的圖片。在人臉檢測程序的最后,我們會顯示檢測的結果圖片來驗證,這里做resize是為了避免圖片過大,超出屏幕范圍。
接下來,開始我們的主程序部分
import sys
import numpy as np
import dlib
import cv2
if len(sys.argv)
sys.exit(1)
image_file = sys.argv[1]
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
我們從sys.argv[1]參數中讀取要檢測人臉的圖片,接下來初始化人臉區域檢測的detector和人臉特征檢測的predictor。shape_predictor中的參數就是我們之前解壓后的文件的路徑。
image = cv2.imread(image_file)
image = resize(image, width=1200)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
rects = detector(gray, 1)
在檢測特征區域前,我們先要檢測人臉區域。這段代碼調用opencv加載圖片,resize到合適的大小,轉成灰度圖,最后用detector檢測臉部區域。因為一張照片可能包含多張臉,所以這里得到的是一個包含多張臉的信息的數組rects。
for (i, rect) in enumerate(rects):
shape = predictor(gray, rect)
shape = shape_to_np(shape)
(x, y, w, h) = rect_to_bb(rect)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, "Face #{}".format(i + 1), (x - 10, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
for (x, y) in shape:
cv2.circle(image, (x, y), 2, (0, 0, 255), -1)
cv2.imshow("Output", image)
cv2.waitKey(0)
對于每一張檢測到的臉,我們進一步檢測臉部的特征(鼻子、眼睛、眉毛等)。對于臉部區域,我們用綠色的框在照片上標出;對于臉部特征,我們用紅色的點標出來。
最后我們把加了檢測標識的照片顯示出來,waitKey(0)表示按任意鍵可退出程序。
以上是我們程序的全部
測試
接下來是令人興奮的時刻,檢驗我們結果的時刻到來了。
下面是原圖
下面是程序識別的結果
可以看到臉部區域被綠色的長方形框起來了,臉上的特征(鼻子,眼睛等)被紅色點點標識出來了。
是不是很簡單?
上一篇:一通操作!黑客賺得數十萬美元,還有一輛特斯拉
下一篇:人臉識別一秒過安檢的背后,隱私安全如何保障?
推薦閱讀
史海拾趣
Honda Tsushin Kogyo Co. Ltd.的成立背景雖未詳細公開,但考慮到其專注于電子連接器領域,可以推測該公司可能是在日本電子工業興起的背景下成立的。在成立初期,公司可能面臨了激烈的市場競爭和技術挑戰。為了站穩腳跟,Honda Tsushin Kogyo致力于研發高質量的電子連接器產品,并逐步贏得了市場的認可。公司可能通過不斷提升產品質量、優化生產工藝以及拓展銷售渠道等方式,實現了初期的穩步發展。
D1 International Inc公司自創立之初,就專注于技術創新。公司的創始人們深知,在競爭激烈的電子行業中,只有擁有獨特的技術優勢才能立足。因此,他們投入大量資源研發新型電子元器件,其中一款高性能的芯片因其低功耗和高效能,迅速在市場上獲得了認可。這一技術的成功研發,為D1 International Inc公司贏得了第一桶金,也為公司后續的發展奠定了堅實的基礎。
隨著技術實力的不斷提升和市場份額的穩步增長,Anytek在2009年獲得了“中國國際高新技術企業”的認定。這一榮譽不僅是對公司技術實力和創新能力的肯定,也為公司的未來發展提供了更廣闊的空間和機遇。同年,Anytek還成功進入了俄羅斯政府采購項目,進一步擴大了公司的國際影響力。
為了進一步擴大市場份額,GREEGOO公司積極實施全球化戰略。公司首先在歐洲市場設立了分支機構,通過參加國際展會、建立銷售渠道等方式,成功打入歐洲市場。隨后,GREEGOO又陸續在北美、亞洲等地設立分支機構,形成了覆蓋全球的營銷網絡。在全球化布局的過程中,GREEGOO不僅注重產品的本地化適應和品牌建設,還積極與當地企業開展合作,共同開拓新市場。
自2000年4月成立以來,Enova Technology Corporation(伊諾瓦科技)就以其卓越的技術創新能力在電子行業中嶄露頭角。公司總部位于臺灣新竹科學工業園區,這里匯聚了眾多高科技企業和研發機構,為伊諾瓦科技提供了豐富的技術資源和人才支持。
伊諾瓦科技專注于硬件加解密解決方案的研發與應用,其產品在軍事單位、政府機關、財務金融機構等領域得到了廣泛應用。其中,公司的X-WallSE產品憑借其獨特的攜帶式電子鑰匙(Security Key)技術,實現了硬盤的一對一加密,為用戶提供了前所未有的數據安全保護。這一創新技術的推出,不僅提升了公司的市場競爭力,也為整個電子行業樹立了新的技術標桿。
隨著技術的不斷發展,伊諾瓦科技不斷推出更加先進的產品和解決方案。例如,公司的SecureNAS系列產品在網絡硬盤服務器加解密應用方面提供了全新的解決方案,為用戶提供了更加便捷、高效的數據安全保護。這些產品的推出,不僅進一步鞏固了公司在電子行業的領先地位,也為公司的未來發展奠定了堅實的基礎。
為了進一步擴大市場份額,EOZ S.A.S公司積極實施國際化戰略。公司通過參加國際電子展、建立海外研發中心和生產基地等方式,加強與國際市場的聯系和合作。同時,EOZ S.A.S還針對不同國家和地區的消費者需求進行產品定制和本地化營銷,成功將產品打入多個國際市場并取得良好業績。
本帖最后由 paulhyde 于 2014-9-15 09:19 編輯 一、任務 測量兩個正弦信號的疊加信號,其中,x1是主信號,幅值為 V(偏置為0V),頻率為:20-20kHz;x2是次要信號,幅值為主信號的1/4-1/6,頻率為:20-20kHz;二、要求 1.基本要求 (1)利用兩個 ...… 查看全部問答∨ |
|
哈哈!我騙大家進來的,沒什么爽的 問題是這樣的:在PXA270上我跑這段程序:入口地址選為0X0(即NORFLASH的地址) xlli_GPIOREGS_PA_BASE EQU 0x40e00000 xlli_GAFR0_L_offset EQU 0x00000054 xlli_GPDR0_offset   ...… 查看全部問答∨ |
車圖 跑道 現在 要控制車子速度 通過一個舵機控制車頭轉動方向 轉動的方向由前面的紅外傳感器檢測到跑道的識別碼得到 但是檢測的識別碼只可能盡量的和實際吻合但仍會有幾度的誤差 有時甚至會更多 程序會不停的掃描道路得到識 ...… 查看全部問答∨ |
具體請看taobao上的介紹 http://auction1.taobao.com/auction/item_detail-0db2-5a0abc7b0e70e1f7ae53ffad3582dfc4.jhtml 配件清單: 1) S3C2440核心板一片,配置64MB NAND FLASH和64MB SDRAM 2) S3C2440開發板底板一片 3) 直連九針串口線一條 ...… 查看全部問答∨ |
|
'CHtmlView' : base class undefined 我在evc下pocketPC模擬器,在一個窗口上要顯示網頁內容,使用了CHtmlCtrl類 http://dev.yesky.com/128/2272128_1.shtml 這個是國外某達人寫的。 我在stdafx.h中已經加了#include "afxhtml.h",但是編譯后提示我 \'CHtmlView\' : base class ...… 查看全部問答∨ |
我今天用一個探測火源的模塊去接F149的內部AD,我用3.3V給火焰傳感器模塊供電,輸出腳懸空的時候我測輸出腳是0到3V之間在變化(就是當沒有火源或者火源超過探測范圍的時候是3V),但我接上F149的AD的輸入腳之后本來的3V輸出就立即衰減為1.7V了。然 ...… 查看全部問答∨ |
<p>Solder Mask就是阻焊層,所有需要焊接的焊盤,銅皮需要的。</p>paste Mask是SMD鋼網層,對于需要匯流焊的焊盤的。回流焊的工藝過程是,刷錫膏,貼片,然后過回流焊機。</p><p>Solder Mask是制造PCB的要求,Paste Mask是PCB組裝 ...… 查看全部問答∨ |