找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 30066|回復(fù): 12
收起左側(cè)

基于opencv與face++人臉識(shí)別+樹(shù)莓派的門(mén)禁管理系統(tǒng)設(shè)計(jì)

  [復(fù)制鏈接]
ID:267482 發(fā)表于 2017-12-27 08:13 | 顯示全部樓層 |閱讀模式
嵌入式系統(tǒng)綜合實(shí)踐  
     本項(xiàng)目以樹(shù)莓派model B為主板,編寫(xiě)python程序?qū)崿F(xiàn)USB攝像頭自動(dòng)拍照(如果攝像頭前沒(méi)有人臉會(huì)一直拍照下去),試圖開(kāi)門(mén)者靠近攝像頭并讓其對(duì)自己正臉拍照,程序拍照后調(diào)用opencv與face++的API對(duì)照片進(jìn)行人臉識(shí)別并與本地權(quán)限人照片(擁有開(kāi)門(mén)權(quán)限的有兩人)比較,以控制繼電器實(shí)現(xiàn)電子門(mén)鎖的開(kāi)關(guān)(如若是擁有權(quán)限者試圖開(kāi)門(mén),繼電器由長(zhǎng)閉一邊打到另一邊),所有試圖開(kāi)門(mén)的記錄都存儲(chǔ)在樹(shù)莓派的數(shù)據(jù)庫(kù)mysql中,可以在自己編寫(xiě)的安卓客戶端中查看所有記錄。

  •          方案選擇
樹(shù)莓派+Python + Opencv + Face++ +數(shù)據(jù)庫(kù)Mysql + 基于JDBC的同一局域網(wǎng)下連接樹(shù)莓
派數(shù)據(jù)庫(kù)的app
1.樹(shù)莓派是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內(nèi)存硬盤(pán),卡片主板周?chē)?/2/4個(gè)USB接口和一個(gè)10/100 以太網(wǎng)接口,可連接鍵盤(pán)、鼠標(biāo)和網(wǎng)線,同時(shí)擁有視頻模擬信號(hào)的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一張僅比信用卡稍大的主板上。
2.考慮到python相較其他語(yǔ)言的簡(jiǎn)潔性,樹(shù)莓派對(duì)python語(yǔ)言有很好的支持(最新版的樹(shù)莓派操作系統(tǒng)自帶python環(huán)境),而且face++官網(wǎng)只提供java與python兩種sdk包,選取python語(yǔ)言編寫(xiě)樹(shù)莓派上運(yùn)行的程序。
3. OpenCV是一個(gè)基于(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),可以運(yùn)行在Linux、Windows和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。選用opencv做人臉識(shí)別是較常用和成熟的技術(shù)。
4. Face++是北京曠視科技有限公司旗下的新型視覺(jué)服務(wù)平臺(tái),F(xiàn)ace++平臺(tái)通過(guò)提供云端API、離線SDK、以及面向用戶的自主研發(fā)產(chǎn)品形式,將人臉識(shí)別技術(shù)廣泛應(yīng)用到互聯(lián)網(wǎng)及移動(dòng)應(yīng)用場(chǎng)景中。Face++的API功能更加全面,人臉識(shí)別精度也要高于Opencv。
5.MySQL 是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),由瑞典 MySQL AB 公司開(kāi)發(fā),目前屬于 Oracle 旗下公司。MySQL 所使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。Mysql是輕量級(jí)的數(shù)據(jù)庫(kù),支持遠(yuǎn)程連接,為制作客戶端提供了方便。
6. JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成,可以用JDBC實(shí)現(xiàn)與樹(shù)莓派中的mysql遠(yuǎn)程連接。采取先在eclipse上建立java工程,調(diào)試核心代碼,再移植到android studio中的android工程中,在android studio中寫(xiě)好app,直接用手機(jī)調(diào)試(用模擬器PC可能會(huì)卡),并生成apk放在手機(jī)上作為客戶端。
二.相關(guān)硬件
1、樹(shù)莓派主板:程序運(yùn)行的平臺(tái)
2、USB攝像頭:實(shí)現(xiàn)圖像的采集
3、其他模塊:電腦、網(wǎng)線(用于平時(shí)調(diào)試),360隨身wifi模塊(用于平時(shí)調(diào)試與最終演示)
相關(guān)軟件(下載到樹(shù)莓派中)
1、Raspbian系統(tǒng)
Raspbian系統(tǒng)是基于Debian系統(tǒng)的Raspberry Pi的硬件優(yōu)化的免費(fèi)操作系統(tǒng)。廣義的Debian是指一個(gè)致力于創(chuàng)建自由操作系統(tǒng)的合作組織及其作品,而Raspbian操作系統(tǒng)是一套基本的能使樹(shù)莓派運(yùn)行的程序和設(shè)備。Raspbian不僅僅是一個(gè)單純的操作系統(tǒng),它包涵了35000種適當(dāng)格式的工具包、預(yù)編譯軟件,而這些都是能夠非常容易地安裝在樹(shù)莓派上的 。
2、抓圖軟件fswebcam
實(shí)現(xiàn)USB攝像頭拍照功能
3、Python圖像處理庫(kù)、python-imaging、python-imaging-tk
4、opencv
  Python的視覺(jué)庫(kù)
5、face++的Python SDK 包
SDK包中包括通過(guò)網(wǎng)絡(luò)調(diào)用face++的API所必須的一些工具。
四.實(shí)踐流程
  1.樹(shù)莓派基本操作和必要環(huán)境搭建
包括下載好所需系統(tǒng)鏡像并燒入microSD中、樹(shù)莓派上網(wǎng)的實(shí)現(xiàn)、360隨身wifi模塊插入樹(shù)莓派后相關(guān)的配置、登陸工具putty的下載、vncserver安裝、下載sftp工具用來(lái)傳輸數(shù)據(jù)。
  2.基于face++的人臉識(shí)別與比較并控制繼電器開(kāi)關(guān)
(1)用putty登錄樹(shù)莓派進(jìn)入命令行界面,插入usb攝像頭,輸入指令lsusb查看是否被樹(shù)莓派識(shí)別(一般不需要,最新系統(tǒng)自動(dòng)驅(qū)動(dòng)usb攝像頭)。
(2)用命令行安裝fswebcamsudo
apt-get install fswebcam#安裝fswebcam
sudo fswebcam -d /dev/video0 -r 352x288 /home/pi/0.jpg#拍照嘗試一下
(3)用命令行安裝python相關(guān)庫(kù)
sudo apt-get install libjpeg8-dev zlib1g-dev libfreetype6-dev#安裝PIL依賴包
sudo apt-get install python-imaging#安裝python-imaging
sudo apt-get install python-imaging-tk#安裝python-imaging-tk
(4)進(jìn)入face++官網(wǎng),注冊(cè)face++賬號(hào),在如下圖所示界面下載對(duì)應(yīng)Python的sdk包到PC端,再用文件傳輸工具傳入樹(shù)莓派中
(5)建立一個(gè)新應(yīng)用,將賬號(hào)的API_KEY和應(yīng)用的API_SECRET寫(xiě)入下載好的SDK中的apikey.cfg文件和call.py文件中,用命令行運(yùn)行call.py文件,體驗(yàn)人臉識(shí)別,并研究putty界面所可能顯示的python捕獲異常的信息,嘗試進(jìn)行程序的調(diào)試。
(6)仔細(xì)研究face++的API文檔,最終選定Detect API與Compare API(如下圖所示)實(shí)現(xiàn)所需功能。
    (7)拍攝擁有開(kāi)門(mén)權(quán)限者的照片并放入樹(shù)莓派本地,編寫(xiě)程序完成系統(tǒng)的核心功能人臉識(shí)別與比較(見(jiàn)附錄程序1),并對(duì)拍照?qǐng)D片進(jìn)行處理。(在對(duì)比開(kāi)門(mén)者照片與權(quán)限者照片時(shí)所用到的是Compare API返回值之一的“比對(duì)結(jié)果置信度”confidence,前者的confidence為94.795,后者的confidence為56.607,所以將判斷的閥值定為70。)
     (8)將繼電器的正、負(fù)、in端分別接樹(shù)莓派GPIO的5V引腳、地引腳與11引腳,在程序中導(dǎo)入python的GPIO庫(kù),寫(xiě)入簡(jiǎn)單的GPIO引腳高低電平控制程序,觀察繼電器的狀態(tài)。
      import RPi.GPIO as GPIO#導(dǎo)入庫(kù)
GPIO.setmode(GPIO.BOARD)  #配置IO口的標(biāo)號(hào)方式
GPIO.setup(11, GPIO.OUT)#將GPIO的11引腳設(shè)為輸出
GPIO.output(11, 1)# 讓GPIO的11引腳為高電平
GPIO.output(11, 0) # 讓GPIO的11引腳為低電平
3樹(shù)莓派數(shù)據(jù)庫(kù)建立
      用以下指令安裝數(shù)據(jù)庫(kù)mysql,在安裝過(guò)程中
      sudo apt-get install mysql-server python-mysqldb
單獨(dú)建立一個(gè).py文件用于數(shù)據(jù)庫(kù)相關(guān)代碼的測(cè)試,從建立一個(gè)數(shù)據(jù)庫(kù)出發(fā),再到插入一條記錄,調(diào)試無(wú)誤后,移植進(jìn)之前總的python程序中,實(shí)現(xiàn)每識(shí)別一次人臉,與本地權(quán)限者照片比較之外,插入一條試圖開(kāi)門(mén)者的記錄。
由于記錄中需要有試圖開(kāi)門(mén)這一動(dòng)作發(fā)生的時(shí)間,需要獲取樹(shù)莓派當(dāng)前的時(shí)間,首先需要樹(shù)莓派每次重啟都通過(guò)網(wǎng)絡(luò)將其時(shí)間矯正為現(xiàn)實(shí)時(shí)間,有以下幾個(gè)步驟:
運(yùn)行以下命令,啟用NTP:
sudo timedatectl set-ntp true
然后通過(guò)date命令來(lái)查看當(dāng)前時(shí)間,如果時(shí)間不對(duì),使用以下命令修改本地時(shí)區(qū)sudo dpkg-reconfigure tzdata,在“Configuring tzdata”中,依次選擇Asia、Chongqing。
等樹(shù)莓派與現(xiàn)實(shí)時(shí)間同步,通過(guò)python的time模塊來(lái)獲取時(shí)間
import time
localtime=time.strftime("%Y-%m-%d %X",time.localtime())
此時(shí)已經(jīng)獲取了字符串格式的當(dāng)前時(shí)間local,同樣移植到總的python程序中。
  4.自動(dòng)拍照與opencv
     可以寫(xiě)個(gè)大循環(huán),在循環(huán)開(kāi)頭進(jìn)行拍照,拍照代碼如下
import os
command="sudo fswebcam -d /dev/video0 -r 600*600 /home/pi/python-sdk-master/python-sdk/photo.jpeg"
但不能每次拍完照都與本地權(quán)限者照片比較一下,那樣調(diào)用face++的API過(guò)于頻繁,一來(lái)造成累積的網(wǎng)絡(luò)延時(shí)過(guò)大,二來(lái)正式API應(yīng)用以調(diào)用次數(shù)收費(fèi)(試用API也不能無(wú)限次調(diào)用,且網(wǎng)絡(luò)不穩(wěn)定,容易出問(wèn)題),因此每次拍完照都要識(shí)別一下照片中有沒(méi)有人臉,如果有人臉再調(diào)用face++進(jìn)行人臉比較。但同樣的道理也不能用face++進(jìn)行人臉識(shí)別,綜上考慮,用opencv進(jìn)行識(shí)別。
首先用下列命令下載opencv庫(kù)
sudo apt-get install python-opencv
在GitHub上找到opencv軟件包到PC上,在其中找到haarcascade_frontalface_alt2.xml文件放在與總的python程序相同目錄下,就可以用如下代碼實(shí)現(xiàn)基于opencv的人臉識(shí)別
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_alt2.xml')
img = cv2.imread('photo.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
faces若返回不為(),則為識(shí)別出了人臉。
考慮到降低延時(shí),在最終的總的python程序中,去掉了之前用face++識(shí)別人臉對(duì)想要開(kāi)門(mén)者照片處理的部分。
5.將權(quán)限者修改為兩人,得到最終程序(見(jiàn)附錄程序2)。
最終測(cè)試,從自動(dòng)拍照到識(shí)別到驅(qū)動(dòng)繼電器,整個(gè)過(guò)程工作良好。由于用opencv識(shí)別人臉精度較低,需要攝像頭離人臉一段距離并采光良好,但仍會(huì)偶爾發(fā)生長(zhǎng)時(shí)間(高于6s,小于12s)無(wú)法識(shí)別人臉的情況(實(shí)際上,這可能更多是攝像頭的緣故,比如用藍(lán)色妖姬T3200攝像頭,雖然要調(diào)焦距,拍照指令也要在sudo fswebcam后加“-S 10”,但基本上沒(méi)有識(shí)別不了人臉的情況)。
6.基于JDBC和無(wú)線熱點(diǎn)的安卓客戶端
首先要建立必要的局域網(wǎng):
無(wú)線模塊插在樹(shù)莓派上并已進(jìn)行配置,手機(jī)開(kāi)熱點(diǎn),樹(shù)莓派連接該熱點(diǎn),讓PC和預(yù)備下載客戶端的手機(jī)也連上同一熱點(diǎn)。此時(shí)PC可通過(guò)putty登陸樹(shù)莓派命令行界面。當(dāng)然也可讓樹(shù)莓派、電腦、手機(jī)連上同一wifi(對(duì)于相同wifi,無(wú)線設(shè)備每次被分配的ip地址固定)。
然后,必須對(duì)樹(shù)莓派進(jìn)行配置,開(kāi)啟其數(shù)據(jù)庫(kù)mysql可供遠(yuǎn)程訪問(wèn)的權(quán)限。
用sudo nano /etc/mysql/my.cnf修改/etc/mysql/my.cnf文件
找到下面這行,并用#注釋掉,
bind-address        = 127.0.0.1
或者修改為bind-address        = 0.0.0.0
然后登錄mysql,輸入下面命令
mysql>grant all privileges on *.* to username@"%" identified by "password";(username一般是root,password是樹(shù)莓派mysql上root用戶的密碼)
mysql> FLUSH PRIVILEGES;
安裝防火墻ufw
apt-get installufw
啟用ufw
ufw enable
ufw default deny
開(kāi)啟3306、22(ssh端口)端口
ufw allow 3306
ufw allow 22 (注意:如果不開(kāi)啟22端口,下次啟動(dòng)樹(shù)莓派時(shí),系統(tǒng)的22端口會(huì)禁用,不能使用ssh登錄樹(shù)莓派)
然后關(guān)上防火墻,否則會(huì)禁止一切對(duì)樹(shù)莓派的外部連接(putty除外,但VNC不行)
ufw disable
重啟mysql
sudo service mysql restart;
這時(shí)嘗試在eclipse上建立java工程,書(shū)寫(xiě)基于jdbc原理的代碼,嘗試與樹(shù)莓派中mysql數(shù)據(jù)庫(kù)建立連接(JDBC驅(qū)動(dòng)包選用mysql-connector-java-5.1.22-bin.jar)。
如若連接不上,在PC端下載mysql workbench嘗試連接樹(shù)莓派尋找原因。
將java程序移植到android studio的android工程中,并完成整個(gè)工程
客戶端效果見(jiàn)下圖,填入(設(shè)計(jì)為自動(dòng)填入默認(rèn)內(nèi)容)用戶名(第一行)、密碼(第二行)與樹(shù)莓派IP地址(第三行,雖然應(yīng)該封裝為用戶不可見(jiàn)),點(diǎn)擊“獲取記錄”按鈕,即可查看所有試圖開(kāi)門(mén)的歷史記錄。
   
四.總結(jié)與收獲
   這次嵌入式綜合實(shí)踐,歷時(shí)六周,從一開(kāi)始的懵懂到最后完成系統(tǒng)的所有功能,收獲了很多很多。從拿到樹(shù)莓派大約兩周后,我們便開(kāi)始準(zhǔn)備綜合實(shí)踐的相關(guān)內(nèi)容。從查資料確定大致的方案,到進(jìn)行最基礎(chǔ)的樹(shù)莓派操作和學(xué)習(xí)python的基本編程,慢慢進(jìn)步。
網(wǎng)上有較多的樹(shù)莓派人臉識(shí)別教程而無(wú)樹(shù)莓派人臉比較教程,這是一大難點(diǎn)。而很多人臉識(shí)別教程的代碼已經(jīng)過(guò)時(shí),拿face++來(lái)說(shuō),其官網(wǎng)提供的sdk包便與幾年前并不一樣,API進(jìn)行了全面的更新,必須仔細(xì)研讀最新的API文檔并結(jié)合sdk包中提供的例程,一步步摸索,寫(xiě)下并調(diào)試每一句代碼。
網(wǎng)上有一些關(guān)于樹(shù)莓派GPIO口、數(shù)據(jù)庫(kù)、opencv的程序,也不能直接拿來(lái)用,需要分析大概每一句代碼的含義,并且做長(zhǎng)時(shí)間的調(diào)試。往往先寫(xiě)“模塊”,再將“模塊”移植到總程序中。
安卓客戶端的制作,也是最難的部分之一,由于java和安卓的知識(shí)不夠,往往需要很長(zhǎng)時(shí)間的摸索,請(qǐng)教很多人。用JDBC連接數(shù)據(jù)庫(kù)的java程序在網(wǎng)上很好找到,也很簡(jiǎn)單,容易用eclipse進(jìn)行調(diào)試,但寫(xiě)成android工程仍有很多地方要做。
我們分工明確,組里的每個(gè)人在做好自己工作的同時(shí),也關(guān)注別人的進(jìn)展,及時(shí)溝通,為整個(gè)項(xiàng)目的完成付諸努力。
通過(guò)這次綜合實(shí)踐,我們對(duì)專(zhuān)業(yè)和項(xiàng)目開(kāi)發(fā)有了更加深切和具體的認(rèn)識(shí),體會(huì)到了寫(xiě)程序的艱辛與復(fù)雜,但克服困難之后的喜悅也是巨大的。通過(guò)不斷地去解決問(wèn)題,每個(gè)人的能力都有了很大的提高。
五.附錄
程序一
#-*- coding: utf-8 -*-
#從PIL中引入Image和ImageDraw,讀出’/home/pi/photo.jpeg’并另存原始圖片為yuanshi.jpeg
from PIL import Image
from PIL import ImageDraw
im = Image.open( './photo2.jpeg' )
im.save( './yuanshi2.jpeg' )
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(15, GPIO.OUT)
true=1
# 您需要先注冊(cè)一個(gè)App,并將得到的API key和API secret寫(xiě)在這里。
# You need to register your App first, and enter you API key/secret.
API_KEY = "iYsLwyCzinc_JnsoUSuuO2j7mTdnhLoA"
API_SECRET = "863589RVqKDq3H-u3u57LZr1llDqmQv0"
# Import system libraries and define helper functions
# 導(dǎo)入系統(tǒng)庫(kù)并定義輔助函數(shù)
from print import pformat
def print_result(hit, result):
    def encode(obj):
        if type(obj) is unicode:
            return obj.encode('utf-8')
        if type(obj) is dict:
            return {encode(v): encode(k) for (v, k) in obj.iteritems()}
        if type(obj) is list:
            return [encode(i) for i in obj]
        return obj
    print hit
    result = encode(result)
    print '\n'.join("  " + i for i in pformat(result, width=75).split('\n'))
# First import the API class from the SDK
# 首先,導(dǎo)入SDK中的API類(lèi)
from facepp import API, File
#創(chuàng)建一個(gè)API對(duì)象,如果你是國(guó)際版用戶,代碼為:api = API(API_KEY, API_SECRET, srv=api_server_international)
#Create a API object, if you are an international user,code: api = API(API_KEY, API_SECRET, srv=api_server_international)
api = API(API_KEY, API_SECRET)
#利用face++的detectAPI識(shí)別剛剛拍攝的照片中的人臉
detectresult = api.detect(api_key=API_KEY,api_secret=API_SECRET,image_file=File('./photo2.jpeg'))
print '=' *60
#將結(jié)果輸出到打印到命令行界面上
print_result('Detect result:', detectresult)
  #調(diào)用face++的compareAPI將拍到的照片與兩張本地權(quán)限者照片做比較,confidence
表示拍到的照片與本地權(quán)限者照片是同一人的置信度
comparation=api.compare(api_key=API_KEY,api_secret=API_SECRET,image_file1=File('./zq3.jpeg'),image_file2=File('./photo2.jpeg'))
confidence=comparation['confidence']
print confidence
#獲取識(shí)別到的人臉及識(shí)別圖片實(shí)際高度和寬度
zt=detectresult["faces"][0]["face_rectangle"]["top"]
zl=detectresult["faces"][0]["face_rectangle"]["left"]
zw=detectresult["faces"][0]["face_rectangle"]["width"]
zh=detectresult["faces"][0]["face_rectangle"]["height"]
#打開(kāi)photo圖
im = Image.open( './photo2.jpeg' )
draw = ImageDraw.Draw(im)
draw.polygon([(zl,zt+zh),(zl+zw,zt+zh),(zl+zw,zt),(zl,zt)],outline=(0,255,0))
im.save( './photo1.jpeg' )
from PIL import ImageFont,ImageDraw
ft = ImageFont.truetype( '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', 18)
draw = ImageDraw.Draw(im)
#如果置信度不超過(guò)70,則在相應(yīng)人臉出標(biāo)注“stranger”;否則,標(biāo)注與該人臉有最大相似度的數(shù)據(jù)庫(kù)中的成員的名字
if confidence <=70:
        GPIO.output(15, 0)
              draw.text((zl+10,zt-30), 'stranger',fill=(255,0,0), font=ft)
else:
        GPIO.output(15, 1)
              draw.text((zl+10,zt-30), 'Bu Honglong',fill=(255,0,0), font=ft)
#保存修改后的photo圖片
im.save( './photo2.jpeg' )
程序2(最終程序faceselect7.py
#-*- coding: utf-8 -*-
from PIL import Image
from PIL import ImageDraw
import time#導(dǎo)入python的time模塊
localtime=time.strftime("%Y-%m-%d %X",time.localtime())#獲取當(dāng)前現(xiàn)實(shí)時(shí)間
import os#導(dǎo)入python的os模塊
command="sudo fswebcam -d /dev/video0 -r 600*600 /home/pi/python-sdk-master/python-sdk/photo.jpeg"#賦拍照指令的字符串給command
import numpy as np#導(dǎo)入python的numpy模塊并更名為np
import cv2#導(dǎo)入python的opencv模塊
import MySQLdb導(dǎo)入python的 MySQLdb模塊,用于數(shù)據(jù)庫(kù)操作
# 下面是與mysql建立連接,插入名為openperson的數(shù)據(jù)庫(kù),并規(guī)范記錄格式
db_conn = MySQLdb.connect(host = 'localhost', user= 'root', passwd = '65498732')
cursor = db_conn.cursor()
cursor.execute("create database if not exists openperson")
db_conn.select_db('openperson');
sql = """CREATE TABLE if not exists people(
   open_name CHAR(20) NOT NULL,
   time CHAR(20))"""
try:
cursor.execute(sql)
except Exception, e:
print "Error to create table:", e
sql = """INSERT INTO people(open_name,
   time)
   VALUES ('%s', '%s')"""
import RPi.GPIO as GPIO #導(dǎo)入RPi.GPIO模塊,并更名為GPIO
GPIO.setmode(GPIO.BOARD)    #配置IO口的標(biāo)號(hào)方式
GPIO.setup(11, GPIO.OUT) #將GPIO的11引腳設(shè)為輸出
# 您需要先注冊(cè)一個(gè)App,并將得到的API key和API secret寫(xiě)在這里。
# You need to register your App first, and enter you API key/secret.
API_KEY = "iYsLwyCzinc_JnsoUSuuO2j7mTdnhLoA"
API_SECRET = "863589RVqKDq3H-u3u57LZr1llDqmQv0"
# Import system libraries and define helper functions
# 導(dǎo)入系統(tǒng)庫(kù)并定義輔助函數(shù)
from print import pformat
def print_result(hit, result):
    def encode(obj):
        if type(obj) is unicode:
            return obj.encode('utf-8')
        if type(obj) is dict:
            return {encode(v): encode(k) for (v, k) in obj.iteritems()}
        if type(obj) is list:
            return [encode(i) for i in obj]
        return obj
    print hit
    result = encode(result)
    print '\n'.join("  " + i for i in pformat(result, width=75).split('\n'))
# First import the API class from the SDK
# 首先,導(dǎo)入SDK中的API類(lèi)
from facepp import API, File
#創(chuàng)建一個(gè)API對(duì)象,如果你是國(guó)際版用戶,代碼為:api = API(API_KEY, API_SECRET, srv=api_server_international)
#Create a API object, if you are an international user,code: api = API(API_KEY, API_SECRET, srv=api_server_international)
api = API(API_KEY, API_SECRET)
true=1
#下面進(jìn)入拍照循環(huán)
while true:
  os.system(command)#執(zhí)行command所代表的指令,即拍照
  time.sleep(1)#等待1s
#下面是用opencv進(jìn)行人臉識(shí)別,識(shí)別出有人臉才進(jìn)行下一步人臉比較,否則一直拍照
  face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_alt2.xml')
  img = cv2.imread('photo.jpeg')
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  faces = face_cascade.detectMultiScale(gray, 1.3, 5)
  if faces!=():
#利用face++的detectAPI識(shí)別剛剛拍攝的照片中的人臉,其實(shí)這句調(diào)試時(shí)能看到不少信息,方便些,可以省略
detectresult=api.detect(api_key=API_KEY,api_secret=API_SECRET,image_file=File('./photo.jpeg'))
  #將結(jié)果輸出到打印到命令行界面上
print_result('Detect result:', detectresult)
  #調(diào)用face++的compareAPI將拍到的照片與兩張本地權(quán)限者照片做比較,confidence1
和confidence2表示拍到的照片與本地權(quán)限者照片是同一人的置信度
      comparation1=api.compare(api_key=API_KEY,api_secret=API_SECRET,image_file1=File('./quanxianzhe1.jpeg'),image_file2=File('./photo.jpeg'))
confidence1=comparation1['confidence']
        comparation2=api.compare(api_key=API_KEY,api_secret=API_SECRET,image_file1=File('./quanxianzhe2.jpeg'),image_file2=File('./photo.jpeg'))
  confidence2=comparation2['confidence']
        #如果置信度超過(guò)70時(shí),則送對(duì)應(yīng)11號(hào)引腳高電平,改變繼電器狀態(tài),并給數(shù)據(jù)庫(kù)中送對(duì)應(yīng)權(quán)限人開(kāi)門(mén)的記錄;否則,給數(shù)據(jù)庫(kù)中送陌生人想要開(kāi)門(mén)的記錄,print1,print2,print3是調(diào)試需要,方便樹(shù)莓派沒(méi)連繼電器時(shí)在命令行界面也能查看程序運(yùn)行情況
        if confidence1 >=70:
           GPIO.output(11, 1)
           time.sleep(2)
           GPIO.output(11, 0)
           print 1
           peoples = (
           {"open_name": "Bu Honglong", "time": localtime},
            )
           for people in peoples:
            cursor.execute(sql % (people["open_name"], \
            people["time"]))
           db_conn.commit()
        elif confidence2 >=70:
           GPIO.output(11, 1)  
           time.sleep(2)
           GPIO.output(11, 0)
           print 2
           peoples = (
           {"open_name": "Chenzhe", "time": localtime},
           )
           for people in peoples:
            cursor.execute(sql % (people["open_name"], \
            people["time"]))
           db_conn.commit()
        else:
           GPIO.output(11, 0)  
           time.sleep(1)
           print 3
           peoples = (
           {"open_name": "Stranger", "time": localtime},
           )
           for people in peoples:
            cursor.execute(sql % (people["open_name"], \
            people["time"]))
           db_conn.commit()
  else:
        GPIO.output(11, 0)
        print "No one"
3 .face++ 的Detect API
版本
3.0
描述
調(diào)用者提供圖片文件或者圖片URL,進(jìn)行人臉檢測(cè)和人臉?lè)治。識(shí)別出的人臉會(huì)給出face_token,用于后續(xù)的人臉比對(duì)等操作。請(qǐng)注意,只對(duì)人臉包圍盒面積最大的5個(gè)人臉進(jìn)行分析,其他人臉可以使用Face Analyze API進(jìn)行分析。如果您需要使用檢測(cè)出的人臉于后續(xù)操作,建議將對(duì)應(yīng)face_token添加到FaceSet中。如果一個(gè)face_token連續(xù)72小時(shí)沒(méi)有存放在任意FaceSet中,則該face_token將會(huì)失效。如果對(duì)同一張圖片進(jìn)行多次人臉檢測(cè),同一個(gè)人臉得到的face_token是不同的。
圖片要求
圖片格式:JPG(JPEG),PNG
圖片像素尺寸:最小48*48像素,最大4096*4096像素
圖片文件大。2MB
最小人臉像素尺寸: 系統(tǒng)能夠檢測(cè)到的人臉框?yàn)橐粋(gè)正方形,正方形邊長(zhǎng)的最小值為圖像短邊長(zhǎng)度的48分之一,最小值不低于48像素。 例如圖片為 4096*3200 像素,則最小人臉像素尺寸為 66*66 像素。
更新日志
2017年3月9日:人臉檢測(cè)算法升級(jí);提供了眼睛狀態(tài)檢測(cè)替換是否戴眼鏡的檢測(cè);人臉模糊檢測(cè)升級(jí);提供了人種檢測(cè)。
2017年3月28日:支持base64編碼的圖片。
調(diào)用URL
https://api-cn.faceplusplus點(diǎn)com/facepp/v3/detect
調(diào)用方法
POST
權(quán)限
不需要單獨(dú)申請(qǐng)權(quán)限。
請(qǐng)求參數(shù)
是否必選
參數(shù)名
類(lèi)型
參數(shù)說(shuō)明
必選
api_key
String
調(diào)用此API的API Key
必選
api_secret
String
調(diào)用此API的API Secret
必選(三選一)
image_url
String
圖片的URL。
注:在下載圖片時(shí)可能由于網(wǎng)絡(luò)等原因?qū)е孪螺d圖片時(shí)間過(guò)長(zhǎng),建議使用image_file或image_base64參數(shù)直接上傳圖片。
image_file
File
一個(gè)圖片,二進(jìn)制文件,需要用post multipart/form-data的方式上傳。
image_base64
String
base64編碼的二進(jìn)制圖片數(shù)據(jù)
如果同時(shí)傳入了image_url、image_file和image_base64參數(shù),本API使用順序?yàn)閕mage_file優(yōu)先,image_url最低。
可選
return_landmark
Int
是否檢測(cè)并返回人臉五官和輪廓的83個(gè)關(guān)鍵點(diǎn)。
1:檢測(cè)
0:不檢測(cè)
注:默認(rèn)值為0
可選
return_attributes
String
是否檢測(cè)并返回根據(jù)人臉特征判斷出的年齡,性別,微笑、人臉質(zhì)量等屬性,需要將需要檢測(cè)的屬性組織成一個(gè)用逗號(hào)分隔的字符串。目前支持:gender,age,smiling,headpose,facequality,blur,eyestatus,ethnicity 順序沒(méi)有要求。默認(rèn)值為 none ,表示不檢測(cè)屬性。
注:facequality(人臉質(zhì)量)是指圖像中的人臉是否適合進(jìn)行人臉比對(duì),出現(xiàn)模糊、過(guò)亮、過(guò)暗、大側(cè)臉、不完整等情況會(huì)影響人臉質(zhì)量分?jǐn)?shù)。
由于提供了eyestatus 眼睛狀態(tài)監(jiān)測(cè),所以glass 參數(shù)將于2017-4-30日失效,請(qǐng)盡快修改程序使用 eyestatus
返回值說(shuō)明
字段
類(lèi)型
說(shuō)明
request_id
String
用于區(qū)分每一次請(qǐng)求的唯一的字符串。
faces
Array
被檢測(cè)出的人臉數(shù)組
注:如果沒(méi)有檢測(cè)出人臉則為空數(shù)組
image_id
String
被檢測(cè)的圖片在系統(tǒng)中的標(biāo)識(shí)
time_used
Int
整個(gè)請(qǐng)求所花費(fèi)的時(shí)間,單位為毫秒。
error_message
String
當(dāng)請(qǐng)求失敗時(shí)才會(huì)返回此字符串,具體返回內(nèi)容見(jiàn)后續(xù)錯(cuò)誤信息章節(jié)。否則此字段不存在。
faces數(shù)組中單個(gè)元素的結(jié)構(gòu)
字段
類(lèi)型
說(shuō)明
face_token
String
人臉的標(biāo)識(shí)
face_rectangle
Object
人臉矩形框,坐標(biāo)數(shù)字為整數(shù),代表像素點(diǎn)坐標(biāo)
top:左上角縱坐標(biāo)
left:左上角橫坐標(biāo)
width:寬度
height:高度
landmark
Object
人臉的83個(gè)關(guān)鍵點(diǎn)坐標(biāo)數(shù)組。
attributes
Object
人臉屬性特征,包括:
gender:性別分析結(jié)果,value的值為Male/Female。Male 代表男性,F(xiàn)emale代表女性。
age:年齡分析結(jié)果,value的值為一個(gè)非負(fù)整數(shù),標(biāo)識(shí)估計(jì)的年齡。
smile:笑容分析結(jié)果,value的值為一個(gè)[0,100]的浮點(diǎn)數(shù),小數(shù)點(diǎn)后3位有效數(shù)字,數(shù)值大表示笑程度高。threshold代表笑容的閾值,超過(guò)該閾值認(rèn)為有笑容。
glass:是否佩戴眼鏡的分析結(jié)果,value的值為None/Dark/Normal。None代表不佩戴眼鏡,Dark代表佩戴墨鏡,Normal代表佩戴普通眼鏡。(請(qǐng)注意,motionblur 和 gaussianblur 將于2017-4-30日停止返回,請(qǐng)盡快停用)
headpose:人臉姿勢(shì)分析結(jié)果,包括pitch_angle, roll_angle, yaw_angle,分別對(duì)應(yīng)抬頭,旋轉(zhuǎn)(平面旋轉(zhuǎn)),搖頭。單位為角度。
blur:人臉模糊分析結(jié)果,包括以下兩種分析(請(qǐng)注意,motionblur 和 gaussianblur 將于2017-4-30日停止返回,請(qǐng)盡快停用。目前兩個(gè)字段的值會(huì)與新的blurness值相同)
  •                               motionblur: 人臉移動(dòng)模糊度分析結(jié)果,value的值為是一個(gè)浮點(diǎn)數(shù),范圍[0,100], 小數(shù)點(diǎn)后3位有效數(shù)字。threshold表示人臉模糊度是否影響辨識(shí)的閾值。
  •                               gaussianblur:人臉高斯模糊度分析結(jié)果,value的值為是一個(gè)浮點(diǎn)數(shù),范圍[0,100], 小數(shù)點(diǎn)后3位有效數(shù)字。threshold表示人臉模糊度是否影響辨識(shí)的閾值。
  •                               blurness:新的人臉模糊分析結(jié)果,value的值為是一個(gè)浮點(diǎn)數(shù),范圍[0,100], 小數(shù)點(diǎn)后3位有效數(shù)字,數(shù)值大表示人臉模糊。threshold表示人臉模糊度是否影響辨識(shí)的閾值。
eyestatus: 眼睛狀態(tài)信息 包括 left_eye_status,right_eye_status兩個(gè)對(duì)象,分別代表左眼和右眼的狀態(tài)。每個(gè)對(duì)象包括以下字段,值是一個(gè)浮點(diǎn)數(shù),范圍[0,100], 小數(shù)點(diǎn)后3位有效數(shù)字,總和等于100。
  •                               occlusion:眼睛被遮擋的置信度
  •                               no_glass_eye_open:不戴眼鏡且睜眼的置信度
  •                               normal_glass_eye_close:佩戴普通眼鏡且閉眼的置信度
  •                               normal_glass_eye_open:佩戴普通眼鏡且睜眼的置信度
  •                               dark_glasses:佩戴墨鏡的置信度
  •                               no_glass_eye_close:不戴眼鏡且閉眼的置信
facequality: 人臉質(zhì)量判斷結(jié)果,value值為人臉的質(zhì)量判斷的分?jǐn)?shù),是一個(gè)浮點(diǎn)數(shù),范圍[0,100], 小數(shù)點(diǎn)后3位有效數(shù)字,數(shù)值大代表人臉質(zhì)量高。threshold表示人臉質(zhì)量基本合格的一個(gè)閾值,超過(guò)該閾值的人臉適合用于人臉比對(duì)。
ethnicity: 人種分析結(jié)果,value的值為Asian/White/Black。Asian代表亞洲人,White代表白人,Black代表黑人。

人臉關(guān)鍵點(diǎn)landmark的詳細(xì)字段說(shuō)明與圖示請(qǐng)參考文檔:
返回值示例
請(qǐng)求成功返回示例:
{
              "image_id": "Dd2xUw9S/7yjr0oDHHSL/Q==",
              "request_id": "1470472868,dacf2ff1-ea45-4842-9c07-6e8418cea78b",
              "time_used": 752,
              "faces": [{
                            "landmark": {
                                          "mouth_upper_lip_left_contour2": {
                                                        "y": 185,
                                                        "x": 146
                                          },
                                          "contour_chin": {
                                                        "y": 231,
                                                        "x": 137
                                          },
                                          .............省略關(guān)鍵點(diǎn)信息
                                          "right_eye_pupil": {
                                                        "y": 146,
                                                        "x": 205
                                          },
                                          "mouth_upper_lip_bottom": {
                                                        "y": 195,
                                                        "x": 159
                                          }
                            },
                            "attributes": {
                                          "gender": {
                                                        "value": "Female"
                                          },
                                          "age": {
                                                        "value": 21
                                          },
                                          "glass": {
                                                        "value": "None"
                                          },
                                          "headpose": {
                                                        "yaw_angle": -26.625063,
                                                        "pitch_angle": 12.921974,
                                                        "roll_angle": 22.814377
                                          },
                                          "smile": {
                                                        "threshold": 30.1,
                                                        "value": 2.566890001296997
                                          }
                            },
                            "face_rectangle": {
                                          "width": 140,
                                          "top": 89,
                                          "left": 104,
                                          "height": 141
                            },
                            "face_token": "ed319e807e039ae669a4d1af0922a0c8"
}

請(qǐng)求失敗返回示例:
{
              "time_used": 3,
              "error_message": "MISSING_ARGUMENTS: image_url, image_file, image_base64",
              "request_id": "1470378968,c6f50ec6-49bd-4838-9923-11db04c40f8d"
}

當(dāng)前API特有的ERROR_MESSAGE
HTTP狀態(tài)代碼
錯(cuò)誤信息
說(shuō)明
400
IMAGE_ERROR_UNSUPPORTED_FORMAT:<param>
參數(shù)<param>對(duì)應(yīng)的圖像無(wú)法正確解析,有可能不是一個(gè)圖像文件、或有數(shù)據(jù)破損。
400
INVALID_IMAGE_SIZE:<param>
客戶上傳的圖像像素尺寸太大或太小,圖片要求請(qǐng)參照本API描述。<param>對(duì)應(yīng)圖像太大的那個(gè)參數(shù)的名稱(chēng)
400
INVALID_IMAGE_URL
無(wú)法從指定的image_url下載圖片,圖片URL錯(cuò)誤或者無(wú)效
412
IMAGE_DOWNLOAD_TIMEOUT
下載圖片超時(shí)
通用的ERROR_MESSAGE
HTTP 狀態(tài)代碼
錯(cuò)誤信息
說(shuō)明
401
AUTHENTICATION_ERROR
api_key和api_secret不匹配。
403
AUTHORIZATION_ERROR:<reason>
api_key沒(méi)有調(diào)用本API的權(quán)限,具體原因?yàn)椋河脩糇约航乖揳pi_key調(diào)用、管理員禁止該api_key調(diào)用、由于賬戶余額不足禁止調(diào)用。
目前的<reason>有:
  •                               Denied by Client(用戶自己禁止該api_key調(diào)用)
  •                               Denied by Admin(管理員禁止該api_key調(diào)用)
  •                               Insufficient Account Balance(由于賬戶余額不足禁止調(diào)用)
403
CONCURRENCY_LIMIT_EXCEEDED
并發(fā)數(shù)超過(guò)限制。
400
MISSING_ARGUMENTS: <key>
缺少某個(gè)必選參數(shù)。
400
BAD_ARGUMENTS:<key>
某個(gè)參數(shù)解析出錯(cuò)(比如必須是數(shù)字,但是輸入的是非數(shù)字字符串; 或者長(zhǎng)度過(guò)長(zhǎng),etc.)
400
COEXISTENCE_ARGUMENTS
同時(shí)傳入了要求是二選一或多選一的參數(shù)。如有特殊說(shuō)明則不返回此錯(cuò)誤。
413
Request Entity Too Large
客戶發(fā)送的請(qǐng)求大小超過(guò)了2MB限制。該錯(cuò)誤的返回格式為純文本,不是json格式。
404
API_NOT_FOUND
所調(diào)用的API不存在。
500
INTERNAL_ERROR
服務(wù)器內(nèi)部錯(cuò)誤,當(dāng)此類(lèi)錯(cuò)誤發(fā)生時(shí)請(qǐng)?jiān)俅握?qǐng)求,如果持續(xù)出現(xiàn)此類(lèi)錯(cuò)誤,請(qǐng)及時(shí)聯(lián)系技術(shù)支持團(tuán)隊(duì)。
調(diào)用示例
curl -X POST "https://api-cn.faceplusplus點(diǎn)com/facepp/v3/detect" -F "api_key=<api_key>" \
-F "api_secret=<api_secret>" \
-F "image_file=@image_file.jpg" \
-F "return_landmark=1" \
-F "return_attributes=gender,age"

4.face++的Compare API
版本
3.0
描述
將兩個(gè)人臉進(jìn)行比對(duì),來(lái)判斷是否為同一個(gè)人。支持傳兩張圖片進(jìn)行比對(duì),或者一張圖片與一個(gè)已知的face_token比對(duì),也支持兩個(gè)face_token進(jìn)行比對(duì)。使用圖片進(jìn)行比對(duì)時(shí)會(huì)選取圖片中檢測(cè)到人臉尺寸最大的一個(gè)人臉。
圖片要求
圖片格式:JPG(JPEG),PNG
圖片像素尺寸:最小48*48像素,最大4096*4096像素
圖片文件大。2MB
最小人臉像素尺寸: 系統(tǒng)能夠檢測(cè)到的人臉框?yàn)橐粋(gè)正方形,正方形邊長(zhǎng)的最小值為150像素。
更新日志
2017年3月28日:支持base64編碼的圖片。
調(diào)用URL
https://api-cn.faceplusplus點(diǎn)com/facepp/v3/compare
調(diào)用方法
POST
權(quán)限
不需要單獨(dú)申請(qǐng)權(quán)限。
請(qǐng)求參數(shù)
是否必選
參數(shù)名
類(lèi)型
參數(shù)說(shuō)明
必選
api_key
String
調(diào)用此API的API Key
必選
api_secret
String
調(diào)用此API的API Secret
必選(四選一)
face_token1
String
第一個(gè)人臉標(biāo)識(shí)face_token,優(yōu)先使用本參數(shù)。
image_url1
String
第一張圖片的URL
image_file1
File
第一張圖片,二進(jìn)制文件,需要用post multipart/form-data的方式上傳。
image_base64_1
String
base64編碼的二進(jìn)制圖片數(shù)據(jù)
如果同時(shí)傳入了image_url1、image_file1和image_base64_1參數(shù),本API使用順序?yàn)閕mage_file1優(yōu)先,image_url1最低。
必選(四選一)
face_token2
String
第二個(gè)人臉標(biāo)識(shí)face_token,優(yōu)先使用本參數(shù)。
image_url2
String
第二張圖片的URL
image_file2
File
第二張圖片,二進(jìn)制文件,需要用post multipart/form-data的方式上傳。
image_base64_2
String
base64編碼的二進(jìn)制圖片數(shù)據(jù)
如果同時(shí)傳入了image_url2、image_file2和image_base64_2參數(shù),本API使用順序?yàn)閕mage_file2優(yōu)先,image_url2最低。
返回值說(shuō)明
字段
類(lèi)型
說(shuō)明
request_id
String
用于區(qū)分每一次請(qǐng)求的唯一的字符串。
confidence
Float
比對(duì)結(jié)果置信度,范圍 [0,100],小數(shù)點(diǎn)后3位有效數(shù)字,數(shù)字越大表示兩個(gè)人臉越可能是同一個(gè)人。
注:如果傳入圖片但圖片中未檢測(cè)到人臉,則無(wú)法進(jìn)行比對(duì),本字段不返回。
thresholds
Object
一組用于參考的置信度閾值,Object類(lèi)型,包含三個(gè)字段,均為Float類(lèi)型、取值[0,100],小數(shù)點(diǎn)后3位有效數(shù)字。如果置信值低于“千分之一”閾值則不建議認(rèn)為是同一個(gè)人,如果置信值超過(guò)“十萬(wàn)分之一”閾值,則是同一個(gè)人的幾率非常高。
1e-3: 誤識(shí)率為千分之一的置信度閾值;
1e-4: 誤識(shí)率為萬(wàn)分之一的置信度閾值;
1e-5: 誤識(shí)率為十萬(wàn)分之一的置信度閾值;
請(qǐng)注意:閾值不是靜態(tài)的,每次比對(duì)返回的閾值不保證相同,所以沒(méi)有持久化保存閾值的必要,更不要將當(dāng)前調(diào)用返回的confidence與之前調(diào)用返回的閾值比較。
注:如果傳入圖片但圖片中未檢測(cè)到人臉,則無(wú)法進(jìn)行比對(duì),本字段不返回。
image_id1
String
被檢測(cè)的image_url1、image_file1或image_base64_1在系統(tǒng)中的標(biāo)識(shí)。
注:如果未使用image_url1、image_file1或image_base64_1傳入圖片,本字段不返回。
image_id2
String
被檢測(cè)的image_url2、image_file2或image_base64_2在系統(tǒng)中的標(biāo)識(shí)。
注:如果未使用image_url2、image_file2或image_base64_2傳入圖片,本字段不返回。
faces1
Array
從image_url1、image_file1或image_base64_1中檢測(cè)出的人臉數(shù)組,采用數(shù)組中的第一個(gè)人臉進(jìn)行人臉比對(duì)。
注:如果未使用image_url1、image_file1或image_base64_1傳入圖片,本字段不返回。如果沒(méi)有檢測(cè)出人臉則為空數(shù)組
faces2
Array
從image_url2、image_file2或image_base64_2中檢測(cè)出的人臉數(shù)組,采用數(shù)組中的第一個(gè)人臉進(jìn)行人臉比對(duì)。
注:如果未使用image_url2、image_file2或image_base64_2傳入圖片,本字段不返回。如果沒(méi)有檢測(cè)出人臉則為空數(shù)組
time_used
Int
整個(gè)請(qǐng)求所花費(fèi)的時(shí)間,單位為毫秒。
error_message
String
當(dāng)請(qǐng)求失敗時(shí)才會(huì)返回此字符串,具體返回內(nèi)容見(jiàn)后續(xù)錯(cuò)誤信息章節(jié)。否則此字段不存在。
faces1和faces2數(shù)組中單個(gè)元素的結(jié)構(gòu)
[td]
字段
類(lèi)型
說(shuō)明
face_token
String
人臉的標(biāo)識(shí)
face_rectangle
Object
人臉矩形框,坐標(biāo)數(shù)字為整數(shù),代表像素點(diǎn)坐標(biāo)
top:左上角縱坐標(biāo)
left:左上角橫坐標(biāo)
width:寬度
height:高度
收費(fèi)規(guī)則
當(dāng)傳入2個(gè)face_token進(jìn)行比對(duì)時(shí),收取人臉比對(duì)費(fèi)用。
當(dāng)傳入圖片進(jìn)行比對(duì)時(shí),收取人臉檢測(cè)費(fèi)用,如果同時(shí)傳入2張圖片收取2次人臉檢測(cè)費(fèi)用。當(dāng)傳入圖片都檢測(cè)到人臉的情況下,進(jìn)行人臉比對(duì),收取人臉比對(duì)費(fèi)用。
當(dāng)傳入圖片未檢測(cè)出人臉,無(wú)法進(jìn)行人臉比對(duì)時(shí),只收取人臉檢測(cè)費(fèi)用,不收取人臉比對(duì)費(fèi)用。
返回值示例
成功請(qǐng)求返回值示例:
{
  "time_used": 473,
  "confidence": 96.46,
  "thresholds": {
    "1e-3": 65.3,
    "1e-5": 76.5,
    "1e-4": 71.8
  },
  "request_id": "1469761507,07174361-027c-46e1-811f-ba0909760b18"
}

失敗請(qǐng)求返回值示例:
{
  "time_used": 5,
  "error_message": "INVALID_FACE_TOKEN:c2fc0ad7c8da3af5a34b9c70ff764da0",
  "request_id": "1469761051,ec285c20-8660-47d3-8b91-5dc2bffa0049"
}

當(dāng)前API特有的ERROR_MESSAGE
HTTP狀態(tài)代碼
錯(cuò)誤信息
說(shuō)明
400
INVALID_FACE_TOKEN: <face_token>
使用face_token作為參數(shù)時(shí),所傳的face_token不存在。
400
IMAGE_ERROR_UNSUPPORTED_FORMAT: <param>
參數(shù)<param>對(duì)應(yīng)的圖像無(wú)法正確解析,有可能不是一個(gè)圖像文件、或有數(shù)據(jù)破損。
400
INVALID_IMAGE_SIZE: <param>
參數(shù)<param>對(duì)應(yīng)的客戶上傳的圖像像素尺寸太大或太小,圖片要求請(qǐng)參照本API描述。<param>對(duì)應(yīng)圖像太大的那個(gè)參數(shù)的名稱(chēng)
400
INVALID_IMAGE_URL: <param>
無(wú)法從參數(shù)<param>對(duì)應(yīng)的image_url下載圖片,圖片URL錯(cuò)誤或者無(wú)效
412
IMAGE_DOWNLOAD_TIMEOUT: <param>
下載圖片超時(shí)
通用的ERROR_MESSAGE
HTTP 狀態(tài)代碼
錯(cuò)誤信息
說(shuō)明
401
AUTHENTICATION_ERROR
api_key和api_secret不匹配。
403
AUTHORIZATION_ERROR: <reason>
api_key沒(méi)有調(diào)用本API的權(quán)限,具體原因?yàn)椋河脩糇约航乖揳pi_key調(diào)用、管理員禁止該api_key調(diào)用、由于賬戶余額不足禁止調(diào)用。
目前的<reason>有:
  •                               Denied by Client(用戶自己禁止該api_key調(diào)用
  •                               Denied by Admin(管理員禁止該api_key調(diào)用
  •                               Insufficient Account Balance(由于賬戶余額不足禁止調(diào)用
403
CONCURRENCY_LIMIT_EXCEEDED
并發(fā)數(shù)超過(guò)限制。
400
MISSING_ARGUMENTS: <key>
缺少某個(gè)必選參數(shù)。
400
BAD_ARGUMENTS: <key>
某個(gè)參數(shù)解析出錯(cuò)(比如必須是數(shù)字,但是輸入的是非數(shù)字字符串; 或者長(zhǎng)度過(guò)長(zhǎng),etc.)
400
COEXISTENCE_ARGUMENTS
同時(shí)傳入了要求是二選一或多選一的參數(shù)。如有特殊說(shuō)明則不返回此錯(cuò)誤。
413
Request Entity Too Large
客戶發(fā)送的請(qǐng)求大小超過(guò)了2MB限制。該錯(cuò)誤的返回格式為純文本,不是json格式。
404
API_NOT_FOUND
所調(diào)用的API不存在。
500
INTERNAL_ERROR
服務(wù)器內(nèi)部錯(cuò)誤,當(dāng)此類(lèi)錯(cuò)誤發(fā)生時(shí)請(qǐng)?jiān)俅握?qǐng)求,如果持續(xù)出現(xiàn)此類(lèi)錯(cuò)誤,請(qǐng)及時(shí)聯(lián)系技術(shù)支持團(tuán)隊(duì)。
調(diào)用示例
curl -X POST "https://api-cn.faceplusplus點(diǎn)com/facepp/v3/compare" \
-F "api_key=<api_key>" \
-F "api_secret=<api_secret>" \
-F "face_token1=c2fc0ad7c8da3af5a34b9c70ff764da0" \
-F "face_token2=ad248a809408b6320485ab4de13fe6a9"

本人初學(xué),僅供參考,存在錯(cuò)誤和不足之處,請(qǐng)大家回帖多多指教,切勿照搬
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便大家保存):
嵌入式綜合實(shí)踐-組.docx (1.27 MB, 下載次數(shù): 146)

評(píng)分

參與人數(shù) 4黑幣 +59 收起 理由
roachwz + 5 絕世好帖!
stu + 3 很給力!
Huaic520 + 1 絕世好帖!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:300072 發(fā)表于 2018-3-31 19:56 | 顯示全部樓層
看起來(lái)很NICE!
回復(fù)

使用道具 舉報(bào)

ID:329279 發(fā)表于 2018-5-14 08:04 | 顯示全部樓層
看起來(lái)還不錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:401726 發(fā)表于 2018-9-24 09:30 | 顯示全部樓層
樓主介紹的非常詳細(xì)啊,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:403067 發(fā)表于 2018-9-27 13:40 | 顯示全部樓層
正好需要,非常感謝
回復(fù)

使用道具 舉報(bào)

ID:403067 發(fā)表于 2018-10-11 09:57 來(lái)自手機(jī) | 顯示全部樓層
對(duì)了樓主,樓主用的opencv是2.4.9嗎?
回復(fù)

使用道具 舉報(bào)

ID:408082 發(fā)表于 2018-10-11 15:04 | 顯示全部樓層
正在搞類(lèi)似的項(xiàng)目 來(lái)參考一下
回復(fù)

使用道具 舉報(bào)

ID:406408 發(fā)表于 2018-10-12 10:03 來(lái)自手機(jī) | 顯示全部樓層
挺好,只限于調(diào)試。正常用會(huì)用紅外感應(yīng)或者人體感應(yīng)來(lái)觸發(fā)攝像頭,畢竟攝像頭的功耗不小。
回復(fù)

使用道具 舉報(bào)

ID:434428 發(fā)表于 2018-11-30 19:59 | 顯示全部樓層
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:93667 發(fā)表于 2018-12-5 11:49 | 顯示全部樓層
哦。不錯(cuò),可惜資料不齊全
回復(fù)

使用道具 舉報(bào)

ID:444661 發(fā)表于 2019-10-22 21:07 | 顯示全部樓層
感謝。。。達(dá)到
回復(fù)

使用道具 舉報(bào)

ID:282095 發(fā)表于 2020-3-26 11:38 | 顯示全部樓層
嘗試python+OpenCV也是可以的
回復(fù)

使用道具 舉報(bào)

ID:555216 發(fā)表于 2020-5-19 20:27 | 顯示全部樓層
這個(gè)簡(jiǎn)直太棒了,就和電影里一樣,面部開(kāi)鎖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表