標題: 基于opencv與face++人臉識別+樹莓派的門禁管理系統設計 [打印本頁]
作者: HJJhan 時間: 2017-12-27 08:13
標題: 基于opencv與face++人臉識別+樹莓派的門禁管理系統設計
嵌入式系統綜合實踐
本項目以樹莓派model B為主板,編寫python程序實現USB攝像頭自動拍照(如果攝像頭前沒有人臉會一直拍照下去),試圖開門者靠近攝像頭并讓其對自己正臉拍照,程序拍照后調用opencv與face++的API對照片進行人臉識別并與本地權限人照片(擁有開門權限的有兩人)比較,以控制繼電器實現電子門鎖的開關(如若是擁有權限者試圖開門,繼電器由長閉一邊打到另一邊),所有試圖開門的記錄都存儲在樹莓派的數據庫mysql中,可以在自己編寫的安卓客戶端中查看所有記錄。
樹莓派+Python + Opencv + Face++ +數據庫Mysql + 基于JDBC的同一局域網下連接樹莓
派數據庫的app
1.樹莓派是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內存硬盤,卡片主板周圍有1/2/4個USB接口和一個10/100 以太網接口,可連接鍵盤、鼠標和網線,同時擁有視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一張僅比信用卡稍大的主板上。
2.考慮到python相較其他語言的簡潔性,樹莓派對python語言有很好的支持(最新版的樹莓派操作系統自帶python環境),而且face++官網只提供java與python兩種sdk包,選取python語言編寫樹莓派上運行的程序。
3. OpenCV是一個基于(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。選用opencv做人臉識別是較常用和成熟的技術。
4. Face++是北京曠視科技有限公司旗下的新型視覺服務平臺,Face++平臺通過提供云端API、離線SDK、以及面向用戶的自主研發產品形式,將人臉識別技術廣泛應用到互聯網及移動應用場景中。Face++的API功能更加全面,人臉識別精度也要高于Opencv。
5.MySQL 是一個關系型數據庫,由瑞典 MySQL AB 公司開發,目前屬于 Oracle 旗下公司。MySQL 所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。Mysql是輕量級的數據庫,支持遠程連接,為制作客戶端提供了方便。
6. JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成,可以用JDBC實現與樹莓派中的mysql遠程連接。采取先在eclipse上建立java工程,調試核心代碼,再移植到android studio中的android工程中,在android studio中寫好app,直接用手機調試(用模擬器PC可能會卡),并生成apk放在手機上作為客戶端。
二.相關硬件
1、樹莓派主板:程序運行的平臺
2、USB攝像頭:實現圖像的采集
3、其他模塊:電腦、網線(用于平時調試),360隨身wifi模塊(用于平時調試與最終演示)
三.相關軟件(下載到樹莓派中)
1、Raspbian系統
Raspbian系統是基于Debian系統的Raspberry Pi的硬件優化的免費操作系統。廣義的Debian是指一個致力于創建自由操作系統的合作組織及其作品,而Raspbian操作系統是一套基本的能使樹莓派運行的程序和設備。Raspbian不僅僅是一個單純的操作系統,它包涵了35000種適當格式的工具包、預編譯軟件,而這些都是能夠非常容易地安裝在樹莓派上的 。
2、抓圖軟件fswebcam
實現USB攝像頭拍照功能
3、Python圖像處理庫、python-imaging、python-imaging-tk
4、opencv
Python的視覺庫
5、face++的Python SDK 包
SDK包中包括通過網絡調用face++的API所必須的一些工具。
四.實踐流程
1.樹莓派基本操作和必要環境搭建
包括下載好所需系統鏡像并燒入microSD中、樹莓派上網的實現、360隨身wifi模塊插入樹莓派后相關的配置、登陸工具putty的下載、vncserver安裝、下載sftp工具用來傳輸數據。
2.基于face++的人臉識別與比較并控制繼電器開關
(1)用putty登錄樹莓派進入命令行界面,插入usb攝像頭,輸入指令lsusb查看是否被樹莓派識別(一般不需要,最新系統自動驅動usb攝像頭)。
(2)用命令行安裝fswebcamsudo
apt-get install fswebcam#安裝fswebcam
sudo fswebcam -d /dev/video0 -r 352x288 /home/pi/0.jpg#拍照嘗試一下
(3)用命令行安裝python相關庫
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)進入face++官網,注冊face++賬號,在如下圖所示界面下載對應Python的sdk包到PC端,再用文件傳輸工具傳入樹莓派中
(5)建立一個新應用,將賬號的API_KEY和應用的API_SECRET寫入下載好的SDK中的apikey.cfg文件和call.py文件中,用命令行運行call.py文件,體驗人臉識別,并研究putty界面所可能顯示的python捕獲異常的信息,嘗試進行程序的調試。
(6)仔細研究face++的API文檔,最終選定Detect API與Compare API(如下圖所示)實現所需功能。
(7)拍攝擁有開門權限者的照片并放入樹莓派本地,編寫程序完成系統的核心功能人臉識別與比較(見附錄程序1),并對拍照圖片進行處理。(在對比開門者照片與權限者照片時所用到的是Compare API返回值之一的“比對結果置信度”confidence,前者的confidence為94.795,后者的confidence為56.607,所以將判斷的閥值定為70。)
(8)將繼電器的正、負、in端分別接樹莓派GPIO的5V引腳、地引腳與11引腳,在程序中導入python的GPIO庫,寫入簡單的GPIO引腳高低電平控制程序,觀察繼電器的狀態。
import RPi.GPIO as GPIO#導入庫
GPIO.setmode(GPIO.BOARD) #配置IO口的標號方式
GPIO.setup(11, GPIO.OUT)#將GPIO的11引腳設為輸出
GPIO.output(11, 1)# 讓GPIO的11引腳為高電平
GPIO.output(11, 0) # 讓GPIO的11引腳為低電平
3.樹莓派數據庫建立
用以下指令安裝數據庫mysql,在安裝過程中
sudo apt-get install mysql-server python-mysqldb
單獨建立一個.py文件用于數據庫相關代碼的測試,從建立一個數據庫出發,再到插入一條記錄,調試無誤后,移植進之前總的python程序中,實現每識別一次人臉,與本地權限者照片比較之外,插入一條試圖開門者的記錄。
由于記錄中需要有試圖開門這一動作發生的時間,需要獲取樹莓派當前的時間,首先需要樹莓派每次重啟都通過網絡將其時間矯正為現實時間,有以下幾個步驟:
運行以下命令,啟用NTP:
sudo timedatectl set-ntp true
然后通過date命令來查看當前時間,如果時間不對,使用以下命令修改本地時區sudo dpkg-reconfigure tzdata,在“Configuring tzdata”中,依次選擇Asia、Chongqing。
等樹莓派與現實時間同步,通過python的time模塊來獲取時間
import time
localtime=time.strftime("%Y-%m-%d %X",time.localtime())
此時已經獲取了字符串格式的當前時間local,同樣移植到總的python程序中。
4.自動拍照與opencv
可以寫個大循環,在循環開頭進行拍照,拍照代碼如下
import os
command="sudo fswebcam -d /dev/video0 -r 600*600 /home/pi/python-sdk-master/python-sdk/photo.jpeg"
但不能每次拍完照都與本地權限者照片比較一下,那樣調用face++的API過于頻繁,一來造成累積的網絡延時過大,二來正式API應用以調用次數收費(試用API也不能無限次調用,且網絡不穩定,容易出問題),因此每次拍完照都要識別一下照片中有沒有人臉,如果有人臉再調用face++進行人臉比較。但同樣的道理也不能用face++進行人臉識別,綜上考慮,用opencv進行識別。
首先用下列命令下載opencv庫
sudo apt-get install python-opencv
在GitHub上找到opencv軟件包到PC上,在其中找到haarcascade_frontalface_alt2.xml文件放在與總的python程序相同目錄下,就可以用如下代碼實現基于opencv的人臉識別
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若返回不為(),則為識別出了人臉。
考慮到降低延時,在最終的總的python程序中,去掉了之前用face++識別人臉對想要開門者照片處理的部分。
5.將權限者修改為兩人,得到最終程序(見附錄程序2)。
最終測試,從自動拍照到識別到驅動繼電器,整個過程工作良好。由于用opencv識別人臉精度較低,需要攝像頭離人臉一段距離并采光良好,但仍會偶爾發生長時間(高于6s,小于12s)無法識別人臉的情況(實際上,這可能更多是攝像頭的緣故,比如用藍色妖姬T3200攝像頭,雖然要調焦距,拍照指令也要在sudo fswebcam后加“-S 10”,但基本上沒有識別不了人臉的情況)。
6.基于JDBC和無線熱點的安卓客戶端
首先要建立必要的局域網:
無線模塊插在樹莓派上并已進行配置,手機開熱點,樹莓派連接該熱點,讓PC和預備下載客戶端的手機也連上同一熱點。此時PC可通過putty登陸樹莓派命令行界面。當然也可讓樹莓派、電腦、手機連上同一wifi(對于相同wifi,無線設備每次被分配的ip地址固定)。
然后,必須對樹莓派進行配置,開啟其數據庫mysql可供遠程訪問的權限。
用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是樹莓派mysql上root用戶的密碼)
mysql> FLUSH PRIVILEGES;
安裝防火墻ufw
apt-get installufw
啟用ufw
ufw enable
ufw default deny
開啟3306、22(ssh端口)端口
ufw allow 3306
ufw allow 22 (注意:如果不開啟22端口,下次啟動樹莓派時,系統的22端口會禁用,不能使用ssh登錄樹莓派)
然后關上防火墻,否則會禁止一切對樹莓派的外部連接(putty除外,但VNC不行)
ufw disable
重啟mysql
sudo service mysql restart;
這時嘗試在eclipse上建立java工程,書寫基于jdbc原理的代碼,嘗試與樹莓派中mysql數據庫建立連接(JDBC驅動包選用mysql-connector-java-5.1.22-bin.jar)。
如若連接不上,在PC端下載mysql workbench嘗試連接樹莓派尋找原因。
將java程序移植到android studio的android工程中,并完成整個工程
客戶端效果見下圖,填入(設計為自動填入默認內容)用戶名(第一行)、密碼(第二行)與樹莓派IP地址(第三行,雖然應該封裝為用戶不可見),點擊“獲取記錄”按鈕,即可查看所有試圖開門的歷史記錄。
四.總結與收獲
這次嵌入式綜合實踐,歷時六周,從一開始的懵懂到最后完成系統的所有功能,收獲了很多很多。從拿到樹莓派大約兩周后,我們便開始準備綜合實踐的相關內容。從查資料確定大致的方案,到進行最基礎的樹莓派操作和學習python的基本編程,慢慢進步。
網上有較多的樹莓派人臉識別教程而無樹莓派人臉比較教程,這是一大難點。而很多人臉識別教程的代碼已經過時,拿face++來說,其官網提供的sdk包便與幾年前并不一樣,API進行了全面的更新,必須仔細研讀最新的API文檔并結合sdk包中提供的例程,一步步摸索,寫下并調試每一句代碼。
網上有一些關于樹莓派GPIO口、數據庫、opencv的程序,也不能直接拿來用,需要分析大概每一句代碼的含義,并且做長時間的調試。往往先寫“模塊”,再將“模塊”移植到總程序中。
安卓客戶端的制作,也是最難的部分之一,由于java和安卓的知識不夠,往往需要很長時間的摸索,請教很多人。用JDBC連接數據庫的java程序在網上很好找到,也很簡單,容易用eclipse進行調試,但寫成android工程仍有很多地方要做。
我們分工明確,組里的每個人在做好自己工作的同時,也關注別人的進展,及時溝通,為整個項目的完成付諸努力。
通過這次綜合實踐,我們對專業和項目開發有了更加深切和具體的認識,體會到了寫程序的艱辛與復雜,但克服困難之后的喜悅也是巨大的。通過不斷地去解決問題,每個人的能力都有了很大的提高。
五.附錄
程序一
#-*- 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
# 您需要先注冊一個App,并將得到的API key和API secret寫在這里。
# 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
# 導入系統庫并定義輔助函數
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
# 首先,導入SDK中的API類
from facepp import API, File
#創建一個API對象,如果你是國際版用戶,代碼為: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識別剛剛拍攝的照片中的人臉
detectresult = api.detect(api_key=API_KEY,api_secret=API_SECRET,image_file=File('./photo2.jpeg'))
print '=' *60
#將結果輸出到打印到命令行界面上
print_result('Detect result:', detectresult)
#調用face++的compareAPI將拍到的照片與兩張本地權限者照片做比較,confidence
表示拍到的照片與本地權限者照片是同一人的置信度
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
#獲取識別到的人臉及識別圖片實際高度和寬度
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"]
#打開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)
#如果置信度不超過70,則在相應人臉出標注“stranger”;否則,標注與該人臉有最大相似度的數據庫中的成員的名字
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#導入python的time模塊
localtime=time.strftime("%Y-%m-%d %X",time.localtime())#獲取當前現實時間
import os#導入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#導入python的numpy模塊并更名為np
import cv2#導入python的opencv模塊
import MySQLdb導入python的 MySQLdb模塊,用于數據庫操作
# 下面是與mysql建立連接,插入名為openperson的數據庫,并規范記錄格式
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 #導入RPi.GPIO模塊,并更名為GPIO
GPIO.setmode(GPIO.BOARD) #配置IO口的標號方式
GPIO.setup(11, GPIO.OUT) #將GPIO的11引腳設為輸出
# 您需要先注冊一個App,并將得到的API key和API secret寫在這里。
# 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
# 導入系統庫并定義輔助函數
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
# 首先,導入SDK中的API類
from facepp import API, File
#創建一個API對象,如果你是國際版用戶,代碼為: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
#下面進入拍照循環
while true:
os.system(command)#執行command所代表的指令,即拍照
time.sleep(1)#等待1s
#下面是用opencv進行人臉識別,識別出有人臉才進行下一步人臉比較,否則一直拍照
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識別剛剛拍攝的照片中的人臉,其實這句調試時能看到不少信息,方便些,可以省略
detectresult=api.detect(api_key=API_KEY,api_secret=API_SECRET,image_file=File('./photo.jpeg'))
#將結果輸出到打印到命令行界面上
print_result('Detect result:', detectresult)
#調用face++的compareAPI將拍到的照片與兩張本地權限者照片做比較,confidence1
和confidence2表示拍到的照片與本地權限者照片是同一人的置信度
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']
#如果置信度超過70時,則送對應11號引腳高電平,改變繼電器狀態,并給數據庫中送對應權限人開門的記錄;否則,給數據庫中送陌生人想要開門的記錄,print1,print2,print3是調試需要,方便樹莓派沒連繼電器時在命令行界面也能查看程序運行情況
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
描述
調用者提供圖片文件或者圖片URL,進行人臉檢測和人臉分析。識別出的人臉會給出face_token,用于后續的人臉比對等操作。請注意,只對人臉包圍盒面積最大的5個人臉進行分析,其他人臉可以使用Face Analyze API進行分析。如果您需要使用檢測出的人臉于后續操作,建議將對應face_token添加到FaceSet中。如果一個face_token連續72小時沒有存放在任意FaceSet中,則該face_token將會失效。如果對同一張圖片進行多次人臉檢測,同一個人臉得到的face_token是不同的。
圖片要求
圖片格式:JPG(JPEG),PNG
圖片像素尺寸:最小48*48像素,最大4096*4096像素
圖片文件大小:2MB
最小人臉像素尺寸: 系統能夠檢測到的人臉框為一個正方形,正方形邊長的最小值為圖像短邊長度的48分之一,最小值不低于48像素。 例如圖片為 4096*3200 像素,則最小人臉像素尺寸為 66*66 像素。
更新日志
2017年3月9日:人臉檢測算法升級;提供了眼睛狀態檢測替換是否戴眼鏡的檢測;人臉模糊檢測升級;提供了人種檢測。
2017年3月28日:支持base64編碼的圖片。
調用URL
https://api-cn.faceplusplus點com/facepp/v3/detect
調用方法
POST
權限
不需要單獨申請權限。
請求參數
是否必選 | 參數名 | 類型 | 參數說明 |
必選 | api_key | String | 調用此API的API Key |
必選 | api_secret | String | 調用此API的API Secret |
必選(三選一) | image_url | String | 圖片的URL。 注:在下載圖片時可能由于網絡等原因導致下載圖片時間過長,建議使用image_file或image_base64參數直接上傳圖片。 |
image_file | File | 一個圖片,二進制文件,需要用post multipart/form-data的方式上傳。 |
image_base64 | String | base64編碼的二進制圖片數據 如果同時傳入了image_url、image_file和image_base64參數,本API使用順序為image_file優先,image_url最低。 |
可選 | return_landmark | Int | 是否檢測并返回人臉五官和輪廓的83個關鍵點。 1:檢測 0:不檢測 注:默認值為0 |
可選 | return_attributes | String | 是否檢測并返回根據人臉特征判斷出的年齡,性別,微笑、人臉質量等屬性,需要將需要檢測的屬性組織成一個用逗號分隔的字符串。目前支持:gender,age,smiling,headpose,facequality,blur,eyestatus,ethnicity 順序沒有要求。默認值為 none ,表示不檢測屬性。 注:facequality(人臉質量)是指圖像中的人臉是否適合進行人臉比對,出現模糊、過亮、過暗、大側臉、不完整等情況會影響人臉質量分數。 由于提供了eyestatus 眼睛狀態監測,所以glass 參數將于2017-4-30日失效,請盡快修改程序使用 eyestatus |
返回值說明
字段 | 類型 | 說明 |
request_id | String | 用于區分每一次請求的唯一的字符串。 |
faces | Array | 被檢測出的人臉數組 注:如果沒有檢測出人臉則為空數組 |
image_id | String | 被檢測的圖片在系統中的標識 |
time_used | Int | 整個請求所花費的時間,單位為毫秒。 |
error_message | String | 當請求失敗時才會返回此字符串,具體返回內容見后續錯誤信息章節。否則此字段不存在。 |
faces數組中單個元素的結構
字段 | 類型 | 說明 |
face_token | String | 人臉的標識 |
face_rectangle | Object | 人臉矩形框,坐標數字為整數,代表像素點坐標 top:左上角縱坐標 left:左上角橫坐標 width:寬度 height:高度 |
landmark | Object | 人臉的83個關鍵點坐標數組。 |
attributes | Object | 人臉屬性特征,包括: gender:性別分析結果,value的值為Male/Female。Male 代表男性,Female代表女性。 age:年齡分析結果,value的值為一個非負整數,標識估計的年齡。 smile:笑容分析結果,value的值為一個[0,100]的浮點數,小數點后3位有效數字,數值大表示笑程度高。threshold代表笑容的閾值,超過該閾值認為有笑容。 glass:是否佩戴眼鏡的分析結果,value的值為None/Dark/Normal。None代表不佩戴眼鏡,Dark代表佩戴墨鏡,Normal代表佩戴普通眼鏡。(請注意,motionblur 和 gaussianblur 將于2017-4-30日停止返回,請盡快停用) headpose:人臉姿勢分析結果,包括pitch_angle, roll_angle, yaw_angle,分別對應抬頭,旋轉(平面旋轉),搖頭。單位為角度。 blur:人臉模糊分析結果,包括以下兩種分析(請注意,motionblur 和 gaussianblur 將于2017-4-30日停止返回,請盡快停用。目前兩個字段的值會與新的blurness值相同) - motionblur: 人臉移動模糊度分析結果,value的值為是一個浮點數,范圍[0,100], 小數點后3位有效數字。threshold表示人臉模糊度是否影響辨識的閾值。
- gaussianblur:人臉高斯模糊度分析結果,value的值為是一個浮點數,范圍[0,100], 小數點后3位有效數字。threshold表示人臉模糊度是否影響辨識的閾值。
- blurness:新的人臉模糊分析結果,value的值為是一個浮點數,范圍[0,100], 小數點后3位有效數字,數值大表示人臉模糊。threshold表示人臉模糊度是否影響辨識的閾值。
eyestatus: 眼睛狀態信息 包括 left_eye_status,right_eye_status兩個對象,分別代表左眼和右眼的狀態。每個對象包括以下字段,值是一個浮點數,范圍[0,100], 小數點后3位有效數字,總和等于100。 - occlusion:眼睛被遮擋的置信度
- no_glass_eye_open:不戴眼鏡且睜眼的置信度
- normal_glass_eye_close:佩戴普通眼鏡且閉眼的置信度
- normal_glass_eye_open:佩戴普通眼鏡且睜眼的置信度
- dark_glasses:佩戴墨鏡的置信度
- no_glass_eye_close:不戴眼鏡且閉眼的置信
facequality: 人臉質量判斷結果,value值為人臉的質量判斷的分數,是一個浮點數,范圍[0,100], 小數點后3位有效數字,數值大代表人臉質量高。threshold表示人臉質量基本合格的一個閾值,超過該閾值的人臉適合用于人臉比對。 ethnicity: 人種分析結果,value的值為Asian/White/Black。Asian代表亞洲人,White代表白人,Black代表黑人。 |
人臉關鍵點landmark的詳細字段說明與圖示請參考文檔:
返回值示例
請求成功返回示例:
{
"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
},
.............省略關鍵點信息
"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"
}
請求失敗返回示例:
{
"time_used": 3,
"error_message": "MISSING_ARGUMENTS: image_url, image_file, image_base64",
"request_id": "1470378968,c6f50ec6-49bd-4838-9923-11db04c40f8d"
}
當前API特有的ERROR_MESSAGE
HTTP狀態代碼 | 錯誤信息 | 說明 |
400 | IMAGE_ERROR_UNSUPPORTED_FORMAT:<param> | 參數<param>對應的圖像無法正確解析,有可能不是一個圖像文件、或有數據破損。 |
400 | INVALID_IMAGE_SIZE:<param> | 客戶上傳的圖像像素尺寸太大或太小,圖片要求請參照本API描述。<param>對應圖像太大的那個參數的名稱 |
400 | INVALID_IMAGE_URL | 無法從指定的image_url下載圖片,圖片URL錯誤或者無效 |
412 | IMAGE_DOWNLOAD_TIMEOUT | 下載圖片超時 |
通用的ERROR_MESSAGE
HTTP 狀態代碼 | 錯誤信息 | 說明 |
401 | AUTHENTICATION_ERROR | api_key和api_secret不匹配。 |
403 | AUTHORIZATION_ERROR:<reason> | api_key沒有調用本API的權限,具體原因為:用戶自己禁止該api_key調用、管理員禁止該api_key調用、由于賬戶余額不足禁止調用。 目前的<reason>有: - Denied by Client(用戶自己禁止該api_key調用)
- Denied by Admin(管理員禁止該api_key調用)
- Insufficient Account Balance(由于賬戶余額不足禁止調用)
|
403 | CONCURRENCY_LIMIT_EXCEEDED | 并發數超過限制。 |
400 | MISSING_ARGUMENTS: <key> | 缺少某個必選參數。 |
400 | BAD_ARGUMENTS:<key> | 某個參數解析出錯(比如必須是數字,但是輸入的是非數字字符串; 或者長度過長,etc.) |
400 | COEXISTENCE_ARGUMENTS | 同時傳入了要求是二選一或多選一的參數。如有特殊說明則不返回此錯誤。 |
413 | Request Entity Too Large | 客戶發送的請求大小超過了2MB限制。該錯誤的返回格式為純文本,不是json格式。 |
404 | API_NOT_FOUND | 所調用的API不存在。 |
500 | INTERNAL_ERROR | 服務器內部錯誤,當此類錯誤發生時請再次請求,如果持續出現此類錯誤,請及時聯系技術支持團隊。 |
調用示例
curl -X POST "https://api-cn.faceplusplus點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
描述
將兩個人臉進行比對,來判斷是否為同一個人。支持傳兩張圖片進行比對,或者一張圖片與一個已知的face_token比對,也支持兩個face_token進行比對。使用圖片進行比對時會選取圖片中檢測到人臉尺寸最大的一個人臉。
圖片要求
圖片格式:JPG(JPEG),PNG
圖片像素尺寸:最小48*48像素,最大4096*4096像素
圖片文件大小:2MB
最小人臉像素尺寸: 系統能夠檢測到的人臉框為一個正方形,正方形邊長的最小值為150像素。
更新日志
2017年3月28日:支持base64編碼的圖片。
調用URL
https://api-cn.faceplusplus點com/facepp/v3/compare
調用方法
POST
權限
不需要單獨申請權限。
請求參數
是否必選 | 參數名 | 類型 | 參數說明 |
必選 | api_key | String | 調用此API的API Key |
必選 | api_secret | String | 調用此API的API Secret |
必選(四選一) | face_token1 | String | 第一個人臉標識face_token,優先使用本參數。 |
image_url1 | String | 第一張圖片的URL |
image_file1 | File | 第一張圖片,二進制文件,需要用post multipart/form-data的方式上傳。 |
image_base64_1 | String | base64編碼的二進制圖片數據 如果同時傳入了image_url1、image_file1和image_base64_1參數,本API使用順序為image_file1優先,image_url1最低。 |
必選(四選一) | face_token2 | String | 第二個人臉標識face_token,優先使用本參數。 |
image_url2 | String | 第二張圖片的URL |
image_file2 | File | 第二張圖片,二進制文件,需要用post multipart/form-data的方式上傳。 |
image_base64_2 | String | base64編碼的二進制圖片數據 如果同時傳入了image_url2、image_file2和image_base64_2參數,本API使用順序為image_file2優先,image_url2最低。 |
返回值說明
字段 | 類型 | 說明 |
request_id | String | 用于區分每一次請求的唯一的字符串。 |
confidence | Float | 比對結果置信度,范圍 [0,100],小數點后3位有效數字,數字越大表示兩個人臉越可能是同一個人。 注:如果傳入圖片但圖片中未檢測到人臉,則無法進行比對,本字段不返回。 |
thresholds | Object | 一組用于參考的置信度閾值,Object類型,包含三個字段,均為Float類型、取值[0,100],小數點后3位有效數字。如果置信值低于“千分之一”閾值則不建議認為是同一個人,如果置信值超過“十萬分之一”閾值,則是同一個人的幾率非常高。 1e-3: 誤識率為千分之一的置信度閾值; 1e-4: 誤識率為萬分之一的置信度閾值; 1e-5: 誤識率為十萬分之一的置信度閾值; 請注意:閾值不是靜態的,每次比對返回的閾值不保證相同,所以沒有持久化保存閾值的必要,更不要將當前調用返回的confidence與之前調用返回的閾值比較。 注:如果傳入圖片但圖片中未檢測到人臉,則無法進行比對,本字段不返回。 |
image_id1 | String | 被檢測的image_url1、image_file1或image_base64_1在系統中的標識。 注:如果未使用image_url1、image_file1或image_base64_1傳入圖片,本字段不返回。 |
image_id2 | String | 被檢測的image_url2、image_file2或image_base64_2在系統中的標識。 注:如果未使用image_url2、image_file2或image_base64_2傳入圖片,本字段不返回。 |
faces1 | Array | 從image_url1、image_file1或image_base64_1中檢測出的人臉數組,采用數組中的第一個人臉進行人臉比對。 注:如果未使用image_url1、image_file1或image_base64_1傳入圖片,本字段不返回。如果沒有檢測出人臉則為空數組 |
faces2 | Array | 從image_url2、image_file2或image_base64_2中檢測出的人臉數組,采用數組中的第一個人臉進行人臉比對。 注:如果未使用image_url2、image_file2或image_base64_2傳入圖片,本字段不返回。如果沒有檢測出人臉則為空數組 |
time_used | Int | 整個請求所花費的時間,單位為毫秒。 |
error_message | String | 當請求失敗時才會返回此字符串,具體返回內容見后續錯誤信息章節。否則此字段不存在。 |
faces1和faces2數組中單個元素的結構
[td]字段 | 類型 | 說明 |
face_token | String | 人臉的標識 |
face_rectangle | Object | 人臉矩形框,坐標數字為整數,代表像素點坐標 top:左上角縱坐標 left:左上角橫坐標 width:寬度 height:高度 |
收費規則
當傳入2個face_token進行比對時,收取人臉比對費用。
當傳入圖片進行比對時,收取人臉檢測費用,如果同時傳入2張圖片收取2次人臉檢測費用。當傳入圖片都檢測到人臉的情況下,進行人臉比對,收取人臉比對費用。
當傳入圖片未檢測出人臉,無法進行人臉比對時,只收取人臉檢測費用,不收取人臉比對費用。
返回值示例
成功請求返回值示例:
{
"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"
}
失敗請求返回值示例:
{
"time_used": 5,
"error_message": "INVALID_FACE_TOKEN:c2fc0ad7c8da3af5a34b9c70ff764da0",
"request_id": "1469761051,ec285c20-8660-47d3-8b91-5dc2bffa0049"
}
當前API特有的ERROR_MESSAGE
HTTP狀態代碼 | 錯誤信息 | 說明 |
400 | INVALID_FACE_TOKEN: <face_token> | 使用face_token作為參數時,所傳的face_token不存在。 |
400 | IMAGE_ERROR_UNSUPPORTED_FORMAT: <param> | 參數<param>對應的圖像無法正確解析,有可能不是一個圖像文件、或有數據破損。 |
400 | INVALID_IMAGE_SIZE: <param> | 參數<param>對應的客戶上傳的圖像像素尺寸太大或太小,圖片要求請參照本API描述。<param>對應圖像太大的那個參數的名稱 |
400 | INVALID_IMAGE_URL: <param> | 無法從參數<param>對應的image_url下載圖片,圖片URL錯誤或者無效 |
412 | IMAGE_DOWNLOAD_TIMEOUT: <param> | 下載圖片超時 |
通用的ERROR_MESSAGE
HTTP 狀態代碼 | 錯誤信息 | 說明 |
401 | AUTHENTICATION_ERROR | api_key和api_secret不匹配。 |
403 | AUTHORIZATION_ERROR: <reason> | api_key沒有調用本API的權限,具體原因為:用戶自己禁止該api_key調用、管理員禁止該api_key調用、由于賬戶余額不足禁止調用。 目前的<reason>有: - Denied by Client(用戶自己禁止該api_key調用)
- Denied by Admin(管理員禁止該api_key調用)
- Insufficient Account Balance(由于賬戶余額不足禁止調用)
|
403 | CONCURRENCY_LIMIT_EXCEEDED | 并發數超過限制。 |
400 | MISSING_ARGUMENTS: <key> | 缺少某個必選參數。 |
400 | BAD_ARGUMENTS: <key> | 某個參數解析出錯(比如必須是數字,但是輸入的是非數字字符串; 或者長度過長,etc.) |
400 | COEXISTENCE_ARGUMENTS | 同時傳入了要求是二選一或多選一的參數。如有特殊說明則不返回此錯誤。 |
413 | Request Entity Too Large | 客戶發送的請求大小超過了2MB限制。該錯誤的返回格式為純文本,不是json格式。 |
404 | API_NOT_FOUND | 所調用的API不存在。 |
500 | INTERNAL_ERROR | 服務器內部錯誤,當此類錯誤發生時請再次請求,如果持續出現此類錯誤,請及時聯系技術支持團隊。 |
調用示例
curl -X POST "https://api-cn.faceplusplus點com/facepp/v3/compare" \
-F "api_key=<api_key>" \
-F "api_secret=<api_secret>" \
-F "face_token1=c2fc0ad7c8da3af5a34b9c70ff764da0" \
-F "face_token2=ad248a809408b6320485ab4de13fe6a9"
本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存):
嵌入式綜合實踐-組.docx
(1.27 MB, 下載次數: 146)
2017-12-27 08:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: Huaic520 時間: 2018-3-31 19:56
看起來很NICE!
作者: 琳喵 時間: 2018-5-14 08:04
看起來還不錯
作者: rxez8 時間: 2018-9-24 09:30
樓主介紹的非常詳細啊,謝謝分享
作者: ldz0 時間: 2018-9-27 13:40
正好需要,非常感謝
作者: ldz0 時間: 2018-10-11 09:57
對了樓主,樓主用的opencv是2.4.9嗎?
作者: exe12356 時間: 2018-10-11 15:04
正在搞類似的項目 來參考一下
作者: ebingyu 時間: 2018-10-12 10:03
挺好,只限于調試。正常用會用紅外感應或者人體感應來觸發攝像頭,畢竟攝像頭的功耗不小。
作者: asuak-kala 時間: 2018-11-30 19:59
學習了
作者: cgc2003 時間: 2018-12-5 11:49
哦。不錯,可惜資料不齊全
作者: ryz917 時間: 2019-10-22 21:07
感謝。。。達到
作者: 鵬博士PBs 時間: 2020-3-26 11:38
嘗試python+OpenCV也是可以的
作者: contactdeshine 時間: 2020-5-19 20:27
這個簡直太棒了,就和電影里一樣,面部開鎖
| 歡迎光臨 (http://m.izizhuan.cn/bbs/) |
Powered by Discuz! X3.1 |
日韩有码欧美|
日韩精品视频在线观看网址|
风流少妇一区二区|
美女在线视频一区|
日日摸夜夜添夜夜添精品视频|
亚洲第一区色|
午夜国产精品视频免费体验区|
不卡av一区二区|
色男人天堂综合再现|
日本一区二区在线看|
精品国产一区二区三区av片|
久久爱www成人|
精品一区电影|
久久精品国内一区二区三区水蜜桃|
国产不卡一二三区|
91久久电影|
国精品一区二区|
国产精品人人爽人人做我的可爱|
午夜亚洲一区|
麻豆一区二区在线|
国产电影精品久久禁18|
av一本久道久久综合久久鬼色|
av一区二区久久|
国产精品久久午夜夜伦鲁鲁|
亚洲一区二区三区爽爽爽爽爽|
精品国产鲁一鲁一区二区张丽|
色综合久久88色综合天天|
欧美中文字幕不卡|
欧美电影免费提供在线观看|
亚洲欧洲黄色网|
久久综合免费视频影院|
2019日本中文字幕|
国产在线拍偷自揄拍精品|
国产精品二区三区|
中文字幕av久久|
久久久噜噜噜www成人网|
一区二区三区四区毛片|
黄色片视频免费观看|
午夜激情福利网|
无码人妻精品一区二|
成人激情四射网|
欧美性猛交xx乱大交|
91最新网站|
色av一区二区三区|
成人免费在线电影|
超碰一区二区|
欧美一级全黄|
在线日韩欧美|
丁香亚洲综合激情啪啪综合|
综合电影一区二区三区
|
四川一级毛毛片|
四虎永久免费影院|
影音先锋亚洲天堂|
亚洲精品综合网|
人人干人人干|
黄色影院在线播放|
欧洲亚洲两性|
免费成人网www|
一本色道88久久加勒比精品|
懂色av一区二区夜夜嗨|
亚洲高清在线精品|
亚洲国产精品字幕|
欧美中文字幕在线观看|
日本a级片久久久|
日本久久精品一区二区|
国产成人av一区二区三区不卡|
日操夜操天天操|
天天操精品视频|
野花社区视频在线观看|
chinese国产精品|
亚洲天堂国产|
992tv在线|
小早川怜子影音先锋在线观看|
国产精品一线|
久久av一区二区三区|
91浏览器在线视频|
欧美色图12p|
欧美贵妇videos办公室|
久久久www免费人成黑人精品|
99热成人精品热久久66|
久久99久久99精品免费看小说|
国产a级免费视频|
h网在线观看|
18videosex性欧美麻豆|
婷婷亚洲精品|
国内成人免费视频|
日韩欧美极品在线观看|
久热爱精品视频线路一|
热re99久久精品国产99热|
免费黄色av网址|
久久这里只有精品9|
四色最新网址|
av在线播放国产|
国产成人精品三级高清久久91|
国产一区二区在线影院|
色综合天天综合|
欧美激情a在线|
在线国产伦理一区|
四虎国产精品成人免费入口|
国产成人精品亚洲精品色欲|
av美女在线|
精品欧美日韩精品|
一区二区黄色|
午夜精品福利一区二区蜜股av|
亚洲一区二区久久|
久久久99国产精品免费|
性活交片大全免费看|
97成人在线观看|
一级毛片免费观看|
国产一区二区三区免费在线
|
国产不卡在线视频|
一本色道久久综合亚洲91|
久99久在线视频|
一区二区三区av|
制服 丝袜 综合 日韩 欧美|
黄色aaa毛片|
免费福利在线观看|
国产精品片aa在线观看|
久久久国产综合精品女国产盗摄|
亚洲精品久久久一区二区三区|
国产精品成人一区二区三区|
野战少妇38p|
深爱五月激情五月|
av在线免费观看网|
狠狠色丁香婷婷综合影院|
久久久久9999亚洲精品|
亚洲天堂av在线免费观看|
欧美一区少妇|
操她视频在线观看|
一级黄色免费|
最新日韩一区|
韩国精品免费视频|
欧美成人猛片aaaaaaa|
国产伦精品一区二区三|
国产伦精品一区二区三区妓女|
91精品国自产在线偷拍蜜桃|
国产区在线看|
香蕉久久a毛片|
欧美私人免费视频|
7777精品伊久久久大香线蕉语言
|
国产精品欧美久久久久天天影视|
黄色污网站在线免费观看|
精品av导航|
国产午夜一区二区三区|
中文字幕亚洲情99在线|
综合视频在线观看|
日韩欧美三级在线观看|
电影天堂最新网址|
成年人网站免费观看|
1级黄色大片儿|
九色蝌蚪视频在线|
精品视频在线导航|
xvideos亚洲人网站|
日韩资源av在线|
校园春色 亚洲|
2019国内自拍|
999在线精品|
久久精品欧美日韩精品|
波霸ol色综合久久|
国产91在线视频观看|
91精品视频免费在线观看|
天堂中文字幕在线|
91超碰成人|
在线观看不卡视频|
精品国产乱码久久久久久丨区2区|
99久久精品免费视频|
日本黄色免费网址|
久久在线观看|
国产精品久久久久久久蜜臀|
欧美性在线视频|
成年人小视频在线观看|
国产欧美日韩第一页|
国产91在线播放精品|
久久综合九色综合97婷婷|
久久久精品国产一区二区|
欧美极品美女视频网站在线观看免费|
黄色www网站|
亚洲乱码精品久久久久..|
欧美videossex|
国产自产高清不卡|
久久综合久久88|
亚洲第一成肉网|
国产福利av网站|
99国产精品免费网站|
亚洲精品伦理在线|
国产精品成人免费视频|
亚洲人成人无码网www国产|
heisi视频网在线观看|
成人羞羞网站入口免费|
欧美日韩在线免费视频|
一区二区av|
国产成人精品白浆久久69|
国精一区二区三区|
www.成人在线|
51午夜精品视频|
免费在线观看你懂的|
羞羞小视频视频|
国产精品啊啊啊|
国产手机视频精品|
日日噜噜夜夜狠狠|
羞羞视频免费|
久久国产综合|
欧美va亚洲va在线观看蝴蝶网|
久久艹国产精品|
男人天堂va|
日韩精品成人|
色综合久久中文字幕综合网|
一本色道婷婷久久欧美|
人妻无码中文字幕|
亚洲精品一区av|
午夜精品福利一区二区蜜股av
|
国产大陆精品国产|
欧美亚洲在线观看|
手机av在线不卡|
国产午夜在线视频|
国产精品996|
国产成人涩涩涩视频在线观看|
欧美午夜久久久|
国产亚洲欧美视频|
亚洲欧美激情网|
一个人免费播放在线视频看片|
国产亚洲一区|
日韩欧美一卡二卡|
成人性做爰aaa片免费看不忠|
蜜桃91在线|
亚洲mv大片欧洲mv大片|
亚洲欧美国产日韩天堂区|
91日韩精品视频|
好吊的妞视频这里都有|
久久男女视频|
韩国三级电影久久久久久|
精品亚洲乱码一区二区|
免费观看久久久久|
欧美激情综合在线|
免费日韩电影在线观看|
蜜桃av鲁一鲁一鲁一鲁俄罗斯的|
18国产精品|
欧美一卡2卡三卡4卡5免费|
午夜宅男在线视频|
国产一二区视频|
少妇视频在线观看|
中文字幕一区二区三区乱码在线|
免费日韩av电影|
亚洲色图偷拍|
国产探花一区|
亚洲欧美另类中文字幕|
91av在线免费|
国产毛片在线|
国产欧美一二三区|
视频在线观看成人|
国产又白又嫩又爽又黄|
国内久久视频|
8x拔播拔播x8国产精品|
日本少妇裸体做爰|
日本黄色一区|
91超碰这里只有精品国产|
玖玖爱视频在线|
中文视频在线|
91免费版在线|
日本一区二区三区视频在线播放
|
久久九九视频|
日韩综合另类|
欧美视频一区|
97成人精品视频在线观看|
99视频在线看|
精品国产不卡一区二区|
亚洲变态欧美另类捆绑|
国精产品一区一区三区免费视频|
后进极品白嫩翘臀在线播放|
五月天久久比比资源色|
国产一二三四在线视频|
翔田千里在线视频|
国产精品理论在线观看|
18黄暴禁片在线观看|
福利电影导航|
久久久久久久久久久久久久久99
|
a视频免费看|
久久女同精品一区二区|
一区二区在线高清视频|
sese在线|
成人中文字幕合集|
亚洲a∨一区二区三区|
欧美激情一区二区三级高清视频|
国产av自拍一区|
爱啪视频在线观看视频免费|
精品久久久久久亚洲精品|
久久综合伊人77777麻豆最新章节|
2222www色视频在线观看|
日本一区二区三级电影在线观看
|
在线观看亚洲专区|
亚洲熟妇一区二区|
最爽无遮挡行房视频在线|
色琪琪一区二区三区亚洲区|
第一页在线视频|
俺来也官网欧美久久精品|
91.麻豆视频|
99精品中文字幕|
国产激情综合|
成人午夜电影久久影院|
午夜精品电影在线观看|
免费看av的网址|
久久午夜电影网|
老太脱裤子让老头玩xxxxx|
国产美女在线播放|
亚洲免费观看高清|
日本视频久久久|
久久丫精品国产亚洲av不卡
|
国产精品一区二区果冻传媒|
欧美成人dvd在线视频|
www.狠狠|
欧美国产欧美综合|
激情网站五月天|
蜜桃av在线免费观看|
欧美图片一区二区三区|
黄色片在线观看免费|
99精品国产九九国产精品|
色悠悠久久久久|
国产美女三级无套内谢|
久久精品三级|
亚洲综合五月天|
在线观看入口黄最新永久免费国产
|
中文字字幕一区二区三区四区五区|
久久精品亚洲|
亚洲国产精品123|
老司机色在线视频|
欧美日韩一区二区在线|
精品无码一区二区三区|
精品国产麻豆|
97精品国产97久久久久久免费
|
www.男人天堂网|
a天堂中文在线88|
91麻豆精品91久久久久久清纯|
精品一区在线观看视频|
欧洲三级视频|
91久久国产综合久久91精品网站|
一级毛片美女欧洲|
成人av影视|
风流少妇一区二区|
成人免费观看视频在线观看|
男人影院在线观看|
亚洲国产精品电影|
中文字幕在线观看第二页|
亚洲久久在线|
综合国产精品久久久|
高清毛片在线看|
日韩女优电影在线观看|
日本免费在线观看视频|
狠色狠色综合久久|
亚洲国产高清国产精品|
春暖花开成人亚洲区|
亚洲成色777777在线观看影院|
中文字幕第315页|
日韩精品欧美精品|
欧美一区二区中文字幕|
av资源在线|
欧美国产乱视频|
欧美xxxxx性|
中文字幕字幕中文在线中不卡视频|
日本一区二区三区四区视频|
99re这里有精品|
亚洲一卡二卡三卡四卡|
五月天色婷婷丁香|
欧美.日韩.国产.一区.二区|
天堂资源在线亚洲视频|
中文字幕在线免费|
亚洲天堂一区二区三区|
无码精品人妻一区二区三区影院|
av综合在线播放|
俄罗斯黄色录像|
久久不卡国产精品一区二区
|
91中文字幕|
亚洲一区在线视频|
欧美黄色一区二区三区|
亚洲国产黄色|
国产一区二区网|
日韩免费大片|
91免费在线视频|
黑料吃瓜在线观看|
日韩电影第一页|
久久久久免费网站|
亚洲免费av高清|
国产一级视频在线|
美国欧美日韩国产在线播放
|
久久久亚洲精华液精华液精华液|
日韩一区二区麻豆国产|
国产黄色片免费|
国产三级一区二区三区|
美国黄色特级片|
亚洲视屏一区|
91国视频在线|
99re热精品视频|
欧美精品v日韩精品v国产精品|
av在线资源网|
久久久久久久久久久91|
18激情网站|
欧美一区二区啪啪|
亚洲aⅴ乱码精品成人区|
一区二区视频免费在线观看|
日韩精品乱码久久久久久|
国产老肥熟一区二区三区|