国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用OpenCV與Face++實現人臉解鎖

cc17 / 2717人閱讀

摘要:本文講解了如何使用,基于與實現人臉解鎖的功能。上接上一段程序讀取使用創建獲取進度確認到目前為止,你應該已經可以就給定的兩張圖片比對是否是同一個人了。

近幾天微軟的發布會上講到了不少認臉解鎖的內容,經過探索,其實利用手頭的資源我們完全自己也可以完成這樣一個過程。

本文講解了如何使用Python,基于OpenCV與Face++實現人臉解鎖的功能。

本文基于Python 2.7.11,Windows 8.1 系統。

主要內容

Windows 8.1上配置OpenCV

OpenCV的人臉檢測應用

使用Face++完成人臉辨識(如果你想自己實現這部分的功能,可以借鑒例如這個項目)

Windows 8.1上配置OpenCV

入門的時候配置環境總是一個非常麻煩的事情,在Windows上配置OpenCV更是如此。

既然寫了這個推廣的科普教程,總不能讓讀者卡在環境配置上吧。

下面用到的文件都可以在這里(提取碼:b6ec)下載,但是注意,目前OpenCV僅支持Python2.7。

將cv2加入site-packages

將下載下來的cv2.pyd文件放入Python安裝的文件夾下的Libsite-packages目錄。

就我的電腦而言,這個目錄就是C:Python27Libsite-packages

記得不要直接使用pip安裝,將文件拖過去即可。

安裝numpy組件

在命令行下進入到下載下來的文件所在的目錄(按住Shift右鍵有在該目錄打開命令行的選項)

鍵入命令:

pip install numpy-1.11.0rc2-cp27-cp27m-win32.whl

如果你的系統或者Python不適配,可以在這里下載別的輪子。

測試OpenCV安裝

在命令行鍵入命令:

python -c "import cv2"

如果沒有出現錯誤提示,那么cv2就已經安裝好了。

OpenCV的人臉檢測應用

人臉檢測應用,簡而言之就是一個在照片里找到人臉,然后用方框框起來的過程(我們的相機經常做這件事情)

那么具體而言就是這樣一個過程:

獲取攝像頭的圖片

在圖片中檢測到人臉的區域

在人臉的區域周圍繪制方框

獲取攝像頭的圖片

這里簡單的講解一下OpenCV的基本操作。

以下操作是打開攝像頭的基本操作:

#coding=utf8
import cv2

# 一般筆記本的默認攝像頭都是0
capInput = cv2.VideoCapture(0)
# 我們可以用這條命令檢測攝像頭是否可以讀取數據
if not capInput.isOpened(): print("Capture failed because of camera")

那么怎么從攝像頭讀取數據呢?

# 接上段程序
# 現在攝像頭已經打開了,我們可以使用這條命令讀取圖像
# img就是我們讀取到的圖像,就和我們使用open("pic.jpg", "rb").read()讀取到的數據是一樣的
ret, img = capInput.read()
# 你可以使用open的方式存儲,也可以使用cv2提供的方式存儲
cv2.imwrite("pic.jpg", img)
# 同樣,你可以使用open的方式讀取,也可以使用cv2提供的方式讀取
img = cv2.imread("pic.jpg")

為了方便顯示圖片,cv2也提供了顯示圖片的方法:

# 接上段程序
# 定義一個窗口,當然也可以不定義
imgWindowName = "ImageCaptured"
imgWindow = cv2.namedWindow(imgWindowName, cv2.WINDOW_NORMAL)
# 在窗口中顯示圖片
cv2.imshow(imgWindowName, img)

當然在完成所有操作以后需要把攝像頭和窗口都做一個釋放:

# 接上段程序
# 釋放攝像頭
capInput.release()
# 釋放所有窗口
cv2.destroyAllWindows()
在圖片中檢測到人臉的區域

OpenCV給我們提供了已經訓練好的人臉的xml模板,我們只需要載入然后比對即可。

# 接上段程序
# 載入xml模板
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 將圖形存儲的方式進行轉換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用模板匹配圖形
faces = faceCascade.detectMultiScale(gray, 1.3, 5)
print(faces)
在人臉的區域周圍繪制方框

在上一個步驟中,faces中的四個量分別為左上角的橫坐標、縱坐標、寬度、長度。

所以我們根據這四個量很容易的就可以繪制出方框。

# 接上段程序
# 函數的參數分別為:圖像,左上角坐標,右下角坐標,顏色,寬度
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
成果

根據上面講述的內容,我們現在已經可以完成一個簡單的人臉辨認了:

#coding=utf8
import cv2, time

print("Press Esc to exit")
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
imgWindow = cv2.namedWindow("FaceDetect", cv2.WINDOW_NORMAL)

def detect_face():
    capInput = cv2.VideoCapture(0)
    # 避免處理時間過長造成畫面卡頓
    nextCaptureTime = time.time()
    faces = []
    if not capInput.isOpened(): print("Capture failed because of camera")
    while 1:
        ret, img = capInput.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        if nextCaptureTime < time.time():
            nextCaptureTime = time.time() + 0.1
            faces = faceCascade.detectMultiScale(gray, 1.3, 5)
        if faces:
            for x, y, w, h in faces:
                img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        cv2.imshow("FaceDetect", img)
        # 這是簡單的讀取鍵盤輸入,27即Esc的acsii碼
        if cv2.waitKey(1) & 0xFF == 27: break
    capInput.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    detect_face()
使用Face++完成人臉辨識

第一次認識Face++還是因為支付寶的人臉支付,響應速度還是非常讓人滿意的。

現在只需要免費注冊一個賬號然后新建一個應用就可以使用了,非常方便。

他的官方網址是這個,注冊好之后在這里的我的應用中創建應用即可。

創建好應用之后你會獲得API Key與API Secret。

Face++的API調用邏輯簡單來說是這樣的:

上傳圖片獲取讀取到的人的face_id

創建Person,獲取person_id(Person中的圖片可以增加、刪除)

比較兩個face_id,判斷是否是一個人

比較face_id與person_id,判斷是否是一個人

上傳圖片獲取face_id

在將圖片通過post方法上傳到特定的地址后將返回一個json的值。

如果api_key, api_secret沒有問題,且在上傳的圖片中有識別到人臉,那么會存儲在json的face鍵值下。

#coding=utf8
import requests

# 這里填寫你的應用的API Key與API Secret
API_KEY = ""
API_SECRET = ""

# 目前的API網址是這個,你可以在API文檔里找到這些
BASE_URL = "http://apicn.faceplusplus.com/v2"

# 使用Requests上傳圖片
url = "%s/detection/detect?api_key=%s&api_secret=%s&attribute=none"%(
        BASE_URL, API_KEY, API_SECRET)
files = {"img": (os.path.basename(fileDir), open(fileDir, "rb"),
        mimetypes.guess_type(fileDir)[0]), }
r = requests.post(url, files = files)

# 如果讀取到圖片中的頭像則輸出他們,其中的"face_id"就是我們所需要的值
faces = r.json().get("face")
print faces
創建Person

這個操作沒有什么可以講的內容,可以對照這段程序和官方的API介紹。

官方的API介紹可以見這里,相信看完這一段程序以后你就可以自己完成其余的API了。

# 上接上一段程序
# 讀取face_id
if not faces is None: faceIdList = [face["face_id"] for face in faces]

# 使用Requests創建Person
url = "%s/person/create"%BASE_URL
params = {
    "api_key": API_KEY,
    "api_secret": API_SECRET,
    "person_name": "LittleCoder",
    "face_id": ",".join(faceIdList), }
r = requests.get(url, params = params)
# 獲取person_id
print r.json.()["person_id"]
進度確認

到目前為止,你應該已經可以就給定的兩張圖片比對是否是同一個人了。

那么讓我們來試著寫一下這個程序吧,兩張圖片分別為"pic1.jpg", "pic2.jpg"好了。

下面我給出了我的代碼:

def upload_img(fileDir, oneface = True):
    url = "%s/detection/detect?api_key=%s&api_secret=%s&attribute=none"%(
            BASE_URL, API_KEY, API_SECRET)
    if oneface: url += "&mode=oneface"
    files = {"img": (os.path.basename(fileDir), open(fileDir, "rb"),
            mimetypes.guess_type(fileDir)[0]), }
    r = requests.post(url, files = files)
    faces = r.json().get("face")
    if faces is None:
        print("There is no face found in %s"%fileDir)
    else:
        return faces[0]["face_id"]

def compare(faceId1, faceId2):
    url = "%s/recognition/compare"%BASE_URL
    params = BASE_PARAMS
    params["face_id1"] = faceId1
    params["face_id2"] = faceId2
    r = requests.get(url, params)
    return r.json()

faceId1 = upload_img("pic1.jpg")
faceId2 = upload_img("pic2.jpg")
if face_id1 and face_id2:
    print(compare(faceId1, faceId2))
else:
    print("Please change two pictures")
成品

到此,所有的知識介紹都結束了,相比大致如何完成這個項目各位讀者也已經有想法了吧。

下面我們需要構思一下人臉解鎖的思路,大致而言是這樣的:

使用一個程序設置賬戶(包括向賬戶中存儲解鎖用的圖片)

使用另一個程序登陸(根據輸入的用戶名測試解鎖)

這里會有很多重復的代碼,就不再贅述了,你可以在這里或者這里(提取碼:c073)下載源代碼測試使用。

這里是設置賬戶的截圖:

這里是登陸的截圖:

結束語

希望讀完這篇文章能對你有幫助,有什么不足之處萬望指正(鞠躬)。

160331

LittleCoder

EOF

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37957.html

相關文章

  • cnn卷積神經網絡打造人臉登錄系統

    摘要:本文基于環境,采用為基礎來構建實時人臉檢測與識別系統,探索人臉識別系統在現實應用中的難點。對于人臉檢測方法,效果好于的方法,但是檢測力度也難以達到現場應用標準。本文中,我們采用了基于深度學習方法的人臉檢測系統。 git地址:https://github.com/chenlinzho... 本文主要介紹了系統涉及的人臉檢測與識別的詳細方法,該系統基于python2.7.10/opencv...

    jackwang 評論0 收藏0
  • cnn卷積神經網絡打造人臉登錄系統

    摘要:本文基于環境,采用為基礎來構建實時人臉檢測與識別系統,探索人臉識別系統在現實應用中的難點。對于人臉檢測方法,效果好于的方法,但是檢測力度也難以達到現場應用標準。本文中,我們采用了基于深度學習方法的人臉檢測系統。 git地址:https://github.com/chenlinzho... 本文主要介紹了系統涉及的人臉檢測與識別的詳細方法,該系統基于python2.7.10/opencv...

    KavenFan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<