久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
Python人臉識別+表情識別程序
[打印本頁]
作者:
苦撐a
時間:
2020-12-20 22:36
標題:
Python人臉識別+表情識別程序
本人參加比賽時用的人臉識別程序,功能包括人臉識別以及表情識別,表情識別可識別正常、開心、驚訝。能力有限,程序在檢測到人臉時刷新率不是很高,攝像頭畫面有點卡,但在攝像頭前沒有人臉時畫面還是很流暢的,這是由于人臉識別算法和表情識別需要花費太多的時間。
程序太大,無法上傳,我就直接貼出來了。
get_face_from_camera.py/從攝像頭獲取人臉
# 進行人臉錄入 / Face register
import dlib
import numpy as np
import cv2
import os
import shutil
import time
# Dlib 正向人臉檢測器 / Use frontal face detector of Dlib
detector = dlib.get_frontal_face_detector()
class Face_Register:
def __init__(self):
self.path_photos_from_camera = "data/data_faces_from_camera_my/"
self.font = cv2.FONT_ITALIC
self.existing_faces_cnt = 0 # 已錄入的人臉計數(shù)器 / cnt for counting saved faces
self.ss_cnt = 0 # 錄入 personX 人臉時圖片計數(shù)器 / cnt for screen shots
self.current_frame_faces_cnt = 0 # 錄入人臉計數(shù)器 / cnt for counting faces in current frame
self.save_flag = 1 # 之后用來控制是否保存圖像的 flag / The flag to control if save
self.press_n_flag = 0 # 之后用來檢查是否先按 'n' 再按 's' / The flag to check if press 'n' before 's'
# FPS
self.frame_time = 0
self.frame_start_time = 0
self.fps = 0
# 新建保存人臉圖像文件和數(shù)據(jù)CSV文件夾 / Make dir for saving photos and csv
def pre_work_mkdir(self):
# 新建文件夾 / Create folders to save faces images and csv
if os.path.isdir(self.path_photos_from_camera):
pass
else:
os.mkdir(self.path_photos_from_camera)
# 刪除之前存的人臉數(shù)據(jù)文件夾 / Delete the old data of faces
def pre_work_del_old_face_folders(self):
# 刪除之前存的人臉數(shù)據(jù)文件夾, 刪除 "/data_faces_from_camera/person_x/"...
folders_rd = os.listdir(self.path_photos_from_camera)
for i in range(len(folders_rd)):
shutil.rmtree(self.path_photos_from_camera+folders_rd[i])
if os.path.isfile("data/features_all.csv"):
os.remove("data/features_all.csv")
# 如果有之前錄入的人臉, 在之前 person_x 的序號按照 person_x+1 開始錄入 / Start from person_x+1
def check_existing_faces_cnt(self):
if os.listdir("data/data_faces_from_camera_my/"):
# 獲取已錄入的最后一個人臉序號 / Get the order of latest person
person_list = os.listdir("data/data_faces_from_camera_my/")
person_num_list = []
for person in person_list:
person_num_list.append(int(person.split('_')[-1]))
self.existing_faces_cnt = max(person_num_list)
# 如果第一次存儲或者沒有之前錄入的人臉, 按照 person_1 開始錄入 / Start from person_1
else:
self.existing_faces_cnt = 0
# 獲取處理之后 stream 的幀數(shù) / Update FPS of video stream
def update_fps(self):
now = time.time()
self.frame_time = now - self.frame_start_time
self.fps = 1.0 / self.frame_time
self.frame_start_time = now
# 生成的 cv2 window 上面添加說明文字 / PutText on cv2 window
def draw_note(self, img_rd):
# 添加說明 / Add some notes
cv2.putText(img_rd, "Face Register", (20, 40), self.font, 1, (255, 255, 255), 1, cv2.LINE_AA)
cv2.putText(img_rd, "FPS: " + str(self.fps.__round__(2)), (20, 100), self.font, 0.8, (0, 255, 0), 1,
cv2.LINE_AA)
cv2.putText(img_rd, "Faces: " + str(self.current_frame_faces_cnt), (20, 140), self.font, 0.8, (0, 255, 0), 1, cv2.LINE_AA)
cv2.putText(img_rd, "N: Create face folder", (20, 350), self.font, 0.8, (255, 255, 255), 1, cv2.LINE_AA)
cv2.putText(img_rd, "S: Save current face", (20, 400), self.font, 0.8, (255, 255, 255), 1, cv2.LINE_AA)
cv2.putText(img_rd, "Q: Quit", (20, 450), self.font, 0.8, (255, 255, 255), 1, cv2.LINE_AA)
# 獲取人臉 / Main process of face detection and saving
def process(self, stream):
# 1. 新建儲存人臉圖像文件目錄 / Create folders to save photos
global current_face_dir
self.pre_work_mkdir()
# 2. 刪除 "/data/data_faces_from_camera" 中已有人臉圖像文件 / Uncomment if want to delete the saved faces and start from person_1
if os.path.isdir(self.path_photos_from_camera):
self.pre_work_del_old_face_folders()
# 3. 檢查 "/data/data_faces_from_camera" 中已有人臉文件
self.check_existing_faces_cnt()
while stream.isOpened():
flag, img_rd = stream.read() # Get camera video stream
kk = cv2.waitKey(1)
faces = detector(img_rd, 0) # Use Dlib face detector
# 4. 按下 'n' 新建存儲人臉的文件夾 / Press 'n' to create the folders for saving faces
if kk == ord('n'):
self.existing_faces_cnt += 1
current_face_dir = self.path_photos_from_camera + "person_" + str(self.existing_faces_cnt)
os.makedirs(current_face_dir)
print('\n')
print("新建的人臉文件夾 / Create folders: ", current_face_dir)
self.ss_cnt = 0 # 將人臉計數(shù)器清零 / Clear the cnt of screen shots
self.press_n_flag = 1 # 已經按下 'n' / Pressed 'n' already
# 5. 檢測到人臉 / Face detected
if len(faces) != 0:
# 矩形框 / Show the ROI of faces
for k, d in enumerate(faces):
# 計算矩形框大小 / Compute the size of rectangle box
height = (d.bottom() - d.top())
width = (d.right() - d.left())
hh = int(height/2)
ww = int(width/2)
# 6. 判斷人臉矩形框是否超出 480x640 / If the size of ROI > 480x640
if (d.right()+ww) > 640 or (d.bottom()+hh > 480) or (d.left()-ww < 0) or (d.top()-hh < 0):
cv2.putText(img_rd, "OUT OF RANGE", (20, 300), self.font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)
color_rectangle = (0, 0, 255)
save_flag = 0
if kk == ord('s'):
print("請調整位置 / Please adjust your position")
else:
color_rectangle = (255, 255, 255)
save_flag = 1
cv2.rectangle(img_rd,
tuple([d.left() - ww, d.top() - hh]),
tuple([d.right() + ww, d.bottom() + hh]),
color_rectangle, 2)
# 7. 根據(jù)人臉大小生成空的圖像 / Create blank image according to the size of face detected
img_blank = np.zeros((int(height*2), width*2, 3), np.uint8)
if save_flag:
# 8. 按下 's' 保存攝像頭中的人臉到本地 / Press 's' to save faces into local images
if kk == ord('s'):
# 檢查有沒有先按'n'新建文件夾 / Check if you have pressed 'n'
if self.press_n_flag:
self.ss_cnt += 1
for ii in range(height*2):
for jj in range(width*2):
img_blank[ii][jj] = img_rd[d.top()-hh + ii][d.left()-ww + jj]
cv2.imwrite(current_face_dir + "/img_face_" + str(self.ss_cnt) + ".jpg", img_blank)
print("寫入本地 / Save into:", str(current_face_dir) + "/img_face_" + str(self.ss_cnt) + ".jpg")
else:
print("請先按 'N' 來建文件夾, 按 'S' / Please press 'N' and press 'S'")
self.current_frame_faces_cnt = len(faces)
# 9. 生成的窗口添加說明文字 / Add note on cv2 window
self.draw_note(img_rd)
# 10. 按下 'q' 鍵退出 / Press 'q' to exit
if kk == ord('q'):
break
# 11. Update FPS
self.update_fps()
cv2.namedWindow("camera", 1)
cv2.imshow("camera", img_rd)
def run(self):
cap = cv2.VideoCapture(0)
self.process(cap)
cap.release()
cv2.destroyAllWindows()
def main():
Face_Register_con = Face_Register()
Face_Register_con.run()
if __name__ == '__main__':
main()
復制代碼
feature.py/提取保存的照片的特征
# 從人臉圖像文件中提取人臉特征存入 "features_all.csv" / Extract features from images and save into "features_all.csv"
import os
import dlib
from skimage import io
import csv
import numpy as np
# 要讀取人臉圖像文件的路徑 / Path of cropped faces
path_images_from_camera = "data/data_faces_from_camera/"
# Dlib 正向人臉檢測器 / Use frontal face detector of Dlib
detector = dlib.get_frontal_face_detector()
# Dlib 人臉 landmark 特征點檢測器 / Get face landmarks
predictor = dlib.shape_predictor('data/data_dlib/shape_predictor_68_face_landmarks.dat')
# Dlib Resnet 人臉識別模型,提取 128D 的特征矢量 / Use Dlib resnet50 model to get 128D face descriptor
face_reco_model = dlib.face_recognition_model_v1("data/data_dlib/dlib_face_recognition_resnet_model_v1.dat")
# 返回單張圖像的 128D 特征 / Return 128D features for single image
# Input: path_img <class 'str'>
# Output: face_descriptor <class 'dlib.vector'>
def return_128d_features(path_img):
img_rd = io.imread(path_img)
faces = detector(img_rd, 1)
print("%-40s %-20s" % ("檢測到人臉的圖像 / Image with faces detected:", path_img), '\n')
# 因為有可能截下來的人臉再去檢測,檢測不出來人臉了, 所以要確保是 檢測到人臉的人臉圖像拿去算特征
# For photos of faces saved, we need to make sure that we can detect faces from the cropped images
if len(faces) != 0:
shape = predictor(img_rd, faces[0])
face_descriptor = face_reco_model.compute_face_descriptor(img_rd, shape)
else:
face_descriptor = 0
print("no face")
return face_descriptor
# 返回 personX 的 128D 特征均值 / Return the mean value of 128D face descriptor for person X
# Input: path_faces_personX <class 'str'>
# Output: features_mean_personX <class 'numpy.ndarray'>
def return_features_mean_personX(path_faces_personX):
features_list_personX = []
photos_list = os.listdir(path_faces_personX)
if photos_list:
for i in range(len(photos_list)):
# 調用 return_128d_features() 得到 128D 特征 / Get 128D features for single image of personX
print("%-40s %-20s" % ("正在讀的人臉圖像 / Reading image:", path_faces_personX + "/" + photos_list[i]))
features_128d = return_128d_features(path_faces_personX + "/" + photos_list[i])
# 遇到沒有檢測出人臉的圖片跳過 / Jump if no face detected from image
if features_128d == 0:
i += 1
else:
features_list_personX.append(features_128d)
else:
print("文件夾內圖像文件為空 / Warning: No images in " + path_faces_personX + '/', '\n')
# 計算 128D 特征的均值 / Compute the mean
# personX 的 N 張圖像 x 128D -> 1 x 128D
if features_list_personX:
features_mean_personX = np.array(features_list_personX).mean(axis=0)
else:
features_mean_personX = np.zeros(128, dtype=int, order='C')
print(type(features_mean_personX))
return features_mean_personX
# 獲取已錄入的最后一個人臉序號 / Get the order of latest person
person_list = os.listdir("data/data_faces_from_camera/")
person_num_list = []
for person in person_list:
person_num_list.append(int(person.split('_')[-1]))
person_cnt = max(person_num_list)
with open("data/features_all.csv", "w", newline="") as csvfile:
writer = csv.writer(csvfile)
for person in range(person_cnt):
# Get the mean/average features of face/personX, it will be a list with a length of 128D
print(path_images_from_camera + "person_" + str(person + 1))
features_mean_personX = return_features_mean_personX(path_images_from_camera + "person_" + str(person + 1))
writer.writerow(features_mean_personX)
print("特征均值 / The mean of features:", list(features_mean_personX))
print('\n')
print("所有錄入人臉數(shù)據(jù)存入 / Save all the features of faces registered into: data/features_all.csv")
復制代碼
main.py/主程序
import dlib
import cv2
import os
import time
import numpy as np
import pandas as pd
from PIL import Image
# 正向人臉檢測器
detector = dlib.get_frontal_face_detector()
# 特征點檢測器
predictor = dlib.shape_predictor('data/data_dlib/shape_predictor_68_face_landmarks.dat')
# 人臉識別模型,提取 128D 的特征矢量
face_reco_model = dlib.face_recognition_model_v1("data/data_dlib/dlib_face_recognition_resnet_model_v1.dat")
class Face_Recognizer:
def __init__(self):
self.feature_known_list = [] # 用來存放所有錄入人臉特征的數(shù)組
self.name_known_list = [] # 存儲錄入人臉名字
self.current_frame_face_cnt = 0 # 存儲當前攝像頭中捕獲到的人臉數(shù)
self.current_frame_feature_list = [] # 存儲當前攝像頭中捕獲到的人臉特征
self.current_frame_name_position_list = [] # 存儲當前攝像頭中捕獲到的所有人臉的名字坐標
self.current_frame_name_list = [] # 存儲當前攝像頭中捕獲到的所有人臉的名字
# Update FPS
self.fps = 0
self.frame_start_time = 0
# 讀取錄入人臉特征
def get_face_database(self):
if os.path.exists("data/features_all.csv"):
path_features_known_csv = "data/features_all.csv"
csv_rd = pd.read_csv(path_features_known_csv, header=None)
for i in range(csv_rd.shape[0]):
features_someone_arr = []
for j in range(0, 128):
if csv_rd.iloc[i][j] == '':
features_someone_arr.append('0')
else:
features_someone_arr.append(csv_rd.iloc[i][j])
self.feature_known_list.append(features_someone_arr)
self.name_known_list.append("Person_"+str(i+1))
print("人臉庫中的人臉數(shù):", len(self.feature_known_list))
return 1
else:
print('##### Warning #####', '\n')
print("'features_all.csv' not found!")
print(
"Please run 'get_faces_from_camera.py' and 'features.py' before 'main.py'",
'\n')
print('##### End Warning #####')
return 0
# 計算兩個128D向量間的歐式距離
@staticmethod
def return_euclidean_distance(feature_1, feature_2):
feature_1 = np.array(feature_1)
feature_2 = np.array(feature_2)
dist = np.sqrt(np.sum(np.square(feature_1 - feature_2)))
return dist
# 更新 FPS
def update_fps(self):
now = time.time()
self.frame_time = now - self.frame_start_time
self.fps = 1.0 / self.frame_time
self.frame_start_time = now
def draw_note(self, img_rd):
cv2.putText(img_rd, "Face number: " + str(self.current_frame_face_cnt), (20, 40), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2, 4)
for i in range(self.current_frame_face_cnt):
cv2.putText(img_rd, "person: "+str(self.current_frame_name_list[i]), (20, 120), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2, 4)
def draw_name(self, img_rd):
# 在人臉框下面寫人臉名字
global img_with_name
img = Image.fromarray(cv2.cvtColor(img_rd, cv2.COLOR_BGR2RGB))
# draw = ImageDraw.Draw(img)
for i in range(self.current_frame_face_cnt):
img_with_name = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
return img_with_name
# 修改顯示人名
def show_chinese_name(self):
# Default known name: person_1, person_2, person_3
if self.current_frame_face_cnt >= 1:
self.name_known_list[0] = 'xiaoyu'
self.name_known_list[1] = 'xiaohui'
self.name_known_list[2] = 'xiaochen'
self.name_known_list[3] = 'xiaorui'
self.name_known_list[4] = 'xiaomu'
self.name_known_list[5] = 'xiaoman'
# 處理獲取的視頻流,進行人臉識別
def process(self, stream):
a = 100
m = 0
# 1. 讀取存放所有人臉特征的 csv
if self.get_face_database():
while stream.isOpened():
flag, img_rd = stream.read()
faces = detector(img_rd, 0)
kk = cv2.waitKey(1)
# 按下 q 鍵退出
if kk == ord('q'):
break
else:
self.draw_note(img_rd)
self.current_frame_feature_list = []
self.current_frame_face_cnt = 0
self.current_frame_name_position_list = []
self.current_frame_name_list = []
# 2. 檢測到人臉
if len(faces) != 0:
# 3. 獲取當前捕獲到的圖像的所有人臉的特征
for i in range(len(faces)):
shape = predictor(img_rd, faces[i])
self.current_frame_feature_list.append(face_reco_model.compute_face_descriptor(img_rd, shape))
# 4. 遍歷捕獲到的圖像中所有的人臉
for k in range(len(faces)):
# 先默認所有人不認識,是 unknown
self.current_frame_name_list.append("unknown")
# 每個捕獲人臉的名字坐標
self.current_frame_name_position_list.append(tuple(
[faces[k].left(), int(faces[k].bottom() + (faces[k].bottom() - faces[k].top()) / 4)]))
# 5. 對于某張人臉,遍歷所有存儲的人臉特征
current_frame_e_distance_list = []
for i in range(len(self.feature_known_list)):
# 如果 person_X 數(shù)據(jù)不為空
if str(self.feature_known_list[i][0]) != '0.0':
e_distance_tmp = self.return_euclidean_distance(self.current_frame_feature_list[k],
self.feature_known_list[i])
# print(e_distance_tmp)
current_frame_e_distance_list.append(e_distance_tmp)
else:
# 空數(shù)據(jù) person_X
current_frame_e_distance_list.append(999999999)
# 6. 尋找出最小的歐式距離匹配
similar_person_num = current_frame_e_distance_list.index(min(current_frame_e_distance_list))
if min(current_frame_e_distance_list) < 0.4:
self.current_frame_name_list[k] = self.name_known_list[similar_person_num]
a = similar_person_num
else:
a = 7
n = m
m = self.face_emotion(stream)
if a == 0:
print("識別結果:小玉")
elif a == 1:
print("識別結果:小惠")
elif a == 2:
print("識別結果:小晨")
elif a == 3:
print("識別結果:小銳")
elif a == 4:
print("識別結果:小木")
elif a == 5:
print("識別結果:小滿")
elif a == 7:
print("識別結果:陌生人")
# print(min(current_frame_e_distance_list))
if m == 1:
print("表情:正常\n\n")
cv2.putText(img_rd, "emotion: nature", (20, 80), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2, 4)
elif m == 2:
print("表情:開心\n\n")
cv2.putText(img_rd, "emotion: happy", (20, 80), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2, 4)
elif m == 3:
print("表情:驚訝\n\n")
cv2.putText(img_rd, "emotion: amazing", (20, 80), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2, 4)
# 矩形框
for kk, d in enumerate(faces):
# 繪制矩形框
cv2.rectangle(img_rd, tuple([d.left(), d.top()]), tuple([d.right(), d.bottom()]),
(0, 255, 255), 2)
self.current_frame_face_cnt = len(faces)
# 7. 在這里更改顯示的人名
self.show_chinese_name()
# 8. 寫名字
img_with_name = self.draw_name(img_rd)
else:
print("無人臉\n")
img_with_name = img_rd
cv2.imshow("camera", img_with_name)
# 9. 更新 FPS
# self.update_fps()
print("\n")
# OpenCV 調用攝像頭并進行 process
def run(self):
cap = cv2.VideoCapture(0)
cap.set(3, 480) # 640x480
self.process(cap)
cap.release()
cv2.destroyAllWindows()
def face_emotion(self, cap):
a = 0
line_brow_x = []
line_brow_y = []
detector = dlib.get_frontal_face_detector()
flag, im_rd = cap.read()
# 每幀數(shù)據(jù)延時1ms,延時為0讀取的是靜態(tài)幀
k = cv2.waitKey(1)
# 取灰度
img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
# 使用人臉檢測器檢測每一幀圖像中的人臉。并返回人臉數(shù)rects
faces = detector(img_gray, 0)
# 待會要顯示在屏幕上的字體
# 如果檢測到人臉
if (len(faces) != 0):
# 對每個人臉都標出68個特征點
for i in range(len(faces)):
# enumerate方法同時返回數(shù)據(jù)對象的索引和數(shù)據(jù),k為索引,d為faces中的對象
for k, d in enumerate(faces):
# 用紅色矩形框出人臉
cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255))
# 計算人臉熱別框邊長
face_width = d.right() - d.left()
# 使用預測器得到68點數(shù)據(jù)的坐標
shape = predictor(im_rd, d)
# 分析任意n點的位置關系來作為表情識別的依據(jù)
mouth_width = (shape.part(54).x - shape.part(48).x) / face_width # 嘴巴咧開程度
mouth_higth = (shape.part(66).y - shape.part(62).y) / face_width # 嘴巴張開程度
# 通過兩個眉毛上的10個特征點,分析挑眉程度和皺眉程度
brow_sum = 0 # 高度之和
frown_sum = 0 # 兩邊眉毛距離之和
for j in range(17, 21):
brow_sum += (shape.part(j).y - d.top()) + (shape.part(j + 5).y - d.top())
frown_sum += shape.part(j + 5).x - shape.part(j).x
line_brow_x.append(shape.part(j).x)
line_brow_y.append(shape.part(j).y)
# self.brow_k, self.brow_d = self.fit_slr(line_brow_x, line_brow_y) # 計算眉毛的傾斜程度
tempx = np.array(line_brow_x)
tempy = np.array(line_brow_y)
z1 = np.polyfit(tempx, tempy, 1) # 擬合成一次直線
# brow_k = -round(float(z1[0]), 4) # 擬合出曲線的斜率和實際眉毛的傾斜方向是相反的
# print(self.brow_k)
# brow_hight = (brow_sum / 10) / face_width # 眉毛高度占比
# brow_width = (frown_sum / 5) / face_width # 眉毛距離占比
# 眼睛睜開程度
eye_sum = (shape.part(41).y - shape.part(37).y + shape.part(40).y - shape.part(38).y +
shape.part(47).y - shape.part(43).y + shape.part(46).y - shape.part(44).y)
eye_hight = (eye_sum / 4) / face_width
# print("眼睛睜開距離與識別框高度之比:",round(eye_open/self.face_width,3))
# 分情況討論
# 張嘴,可能是開心或者驚訝
if round(mouth_higth >= 0.05):
if eye_hight >= 0.038:
cv2.putText(im_rd, "amazing", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX,
0.8, (0, 0, 255), 2, 4)
flag_d = 3
else:
cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
flag_d = 2
# 沒有張嘴,可能是正常和生氣
else:
if mouth_width > 0.39:
cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
flag_d = 2
else:
cv2.putText(im_rd, "nature", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
flag_d = 1
return flag_d
def main():
Face_Recognizer_con = Face_Recognizer()
Face_Recognizer_con.run()
if __name__ == '__main__':
main()
復制代碼
zBdeE2Uvp6.png
(29.26 KB, 下載次數(shù): 197)
下載附件
2020-12-20 22:34 上傳
整個文件內容
作者:
51hei團團
時間:
2020-12-21 00:46
好東東 可惜源碼沒上傳成功 是大于20兆了嗎?用7z壓縮率比較高
作者:
sawyer-shao
時間:
2021-1-1 13:03
請教能不能做一款在一群人里面,識別出其中任意一個人對著鏡頭做“合十膜拜”的動作,要求低成本的單板,有酬任務,謝謝
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
福利网址
|
91av视频在线
|
黄色片91
|
精品国产一区二
|
亚洲天堂国产
|
日韩国产在线播放
|
欧美国产精品
|
久久视频免费在线观看
|
成人在线国产
|
波多野结衣黄色
|
国产一级特黄
|
免费看一级黄色片
|
日韩亚洲天堂
|
亚洲免费精品视频
|
国产黄a三级三级看三级
|
久久综合热
|
国产又色又爽又黄又免费
|
美日韩在线
|
亚洲淫片
|
国产毛片毛片
|
久久综合五月天
|
18在线观看网站
|
91小视频在线观看
|
91成人在线
|
97国产精品人人爽人人做
|
日韩色综合
|
久久99精品久久久久久琪琪
|
成年人黄色片
|
日本成人黄色
|
亚洲一区在线看
|
国产福利91精品一区二区三区
|
日韩三级久久
|
免费a在线观看
|
在线亚洲一区
|
日韩精品在线观看视频
|
久久精品视频99
|
成年人黄色
|
成人午夜
|
一区二区小视频
|
欧美做受喷浆在线观看
|
欧美日韩国产一区
|