精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于 PyTorch 的人臉關鍵點檢測

人工智能 人臉識別
你是否想過Instagram是如何給你的臉上應用驚人的濾鏡的?該軟件檢測你臉上的關鍵點并在其上投影一個遮罩。本教程將教你如何使用PyTorch構建一個類似的軟件。

計算機真的能理解人臉嗎?你是否想過Instagram是如何給你的臉上應用驚人的濾鏡的?該軟件檢測你臉上的關鍵點并在其上投影一個遮罩。本教程將教你如何使用PyTorch構建一個類似的軟件。

數據集

在本教程中,我們將使用官方的DLib數據集,其中包含6666張尺寸不同的圖像。此外,labels_ibug_300W_train.xml(隨數據集提供)包含每張人臉的68個關鍵點的坐標。下面的腳本將在Colab筆記本中下載數據集并解壓縮。

if not os.path.exists('/content/ibug_300W_large_face_landmark_dataset'):
    !wget http://dlib.net/files/data/ibug_300W_large_face_landmark_dataset.tar.gz
    !tar -xvzf 'ibug_300W_large_face_landmark_dataset.tar.gz'    
    !rm -r 'ibug_300W_large_face_landmark_dataset.tar.gz'

這是數據集中的一張樣本圖像。我們可以看到,人臉只占整個圖像的一小部分。如果我們將完整圖像輸入神經網絡,它也會處理背景(無關信息),這會使模型難以學習。因此,我們需要裁剪圖像,僅輸入人臉部分。

數據集中的樣本圖像和關鍵點

數據預處理

為了防止神經網絡過擬合訓練數據集,我們需要隨機變換數據集。我們將對訓練和驗證數據集應用以下操作:

  • 由于人臉只占整個圖像的一小部分,所以裁剪圖像并僅使用人臉進行訓練。
  • 將裁剪后的人臉調整為(224x224)的圖像。
  • 隨機改變調整后的人臉的亮度和飽和度。
  • 在上述三個轉換之后,隨機旋轉人臉。
  • 將圖像和關鍵點轉換為torch張量,并在[-1, 1]之間進行歸一化。
class Transforms():
    def __init__(self):
        pass
    
    def rotate(self, image, landmarks, angle):
        angle = random.uniform(-angle, +angle)

        transformation_matrix = torch.tensor([
            [+cos(radians(angle)), -sin(radians(angle))], 
            [+sin(radians(angle)), +cos(radians(angle))]
        ])

        image = imutils.rotate(np.array(image), angle)

        landmarks = landmarks - 0.5
        new_landmarks = np.matmul(landmarks, transformation_matrix)
        new_landmarks = new_landmarks + 0.5
        return Image.fromarray(image), new_landmarks

    def resize(self, image, landmarks, img_size):
        image = TF.resize(image, img_size)
        return image, landmarks

    def color_jitter(self, image, landmarks):
        color_jitter = transforms.ColorJitter(brightness=0.3, 
                                              contrast=0.3,
                                              saturation=0.3, 
                                              hue=0.1)
        image = color_jitter(image)
        return image, landmarks

    def crop_face(self, image, landmarks, crops):
        left = int(crops['left'])
        top = int(crops['top'])
        width = int(crops['width'])
        height = int(crops['height'])

        image = TF.crop(image, top, left, height, width)

        img_shape = np.array(image).shape
        landmarks = torch.tensor(landmarks) - torch.tensor([[left, top]])
        landmarks = landmarks / torch.tensor([img_shape[1], img_shape[0]])
        return image, landmarks

    def __call__(self, image, landmarks, crops):
        image = Image.fromarray(image)
        image, landmarks = self.crop_face(image, landmarks, crops)
        image, landmarks = self.resize(image, landmarks, (224, 224))
        image, landmarks = self.color_jitter(image, landmarks)
        image, landmarks = self.rotate(image, landmarks, angle=10)
        
        image = TF.to_tensor(image)
        image = TF.normalize(image, [0.5], [0.5])
        return image, landmarks

數據集類

現在我們已經準備好了轉換,讓我們編寫我們的數據集類。labels_ibug_300W_train.xml包含圖像路徑、關鍵點和邊界框的坐標(用于裁剪人臉)。我們將這些值存儲在列表中,以便在訓練期間輕松訪問。在本文章中,神經網絡將在灰度圖像上進行訓練。


class FaceLandmarksDataset(Dataset):

    def __init__(self, transform=None):

        tree = ET.parse('ibug_300W_large_face_landmark_dataset/labels_ibug_300W_train.xml')
        root = tree.getroot()

        self.image_filenames = []
        self.landmarks = []
        self.crops = []
        self.transform = transform
        self.root_dir = 'ibug_300W_large_face_landmark_dataset'
        
        for filename in root[2]:
            self.image_filenames.append(os.path.join(self.root_dir, filename.attrib['file']))

            self.crops.append(filename[0].attrib)

            landmark = []
            for num in range(68):
                x_coordinate = int(filename[0][num].attrib['x'])
                y_coordinate = int(filename[0][num].attrib['y'])
                landmark.append([x_coordinate, y_coordinate])
            self.landmarks.append(landmark)

        self.landmarks = np.array(self.landmarks).astype('float32')     

        assert len(self.image_filenames) == len(self.landmarks)

    def __len__(self):
        return len(self.image_filenames)

    def __getitem__(self, index):
        image = cv2.imread(self.image_filenames[index], 0)
        landmarks = self.landmarks[index]
        
        if self.transform:
            image, landmarks = self.transform(image, landmarks, self.crops[index])

        landmarks = landmarks - 0.5

        return image, landmarks

dataset = FaceLandmarksDataset(Transforms())

注意:landmarks = landmarks - 0.5 是為了將關鍵點居中,因為中心化的輸出對神經網絡學習更容易。經過預處理后的數據集輸出如下所示(關鍵點已經繪制在圖像中):

預處理后的數據樣本

神經網絡

我們將使用ResNet18作為基本框架。我們需要修改第一層和最后一層以適應我們的目的。在第一層中,我們將輸入通道數設為1,以便神經網絡接受灰度圖像。同樣,在最后一層中,輸出通道數應為68 * 2 = 136,以便模型預測每張人臉的68個關鍵點的(x,y)坐標。

class Network(nn.Module):
    def __init__(self,num_classes=136):
        super().__init__()
        self.model_name='resnet18'
        self.model=models.resnet18()
        self.model.conv1=nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.model.fc=nn.Linear(self.model.fc.in_features, num_classes)
        
    def forward(self, x):
        x=self.model(x)
        return x

訓練神經網絡

我們將使用預測關鍵點和真實關鍵點之間的均方誤差作為損失函數。請記住,要避免梯度爆炸,學習率應保持低。每當驗證損失達到新的最小值時,網絡權重將被保存。至少訓練20個epochs以獲得最佳性能。


network = Network()
network.cuda()    

criterion = nn.MSELoss()
optimizer = optim.Adam(network.parameters(), lr=0.0001)

loss_min = np.inf
num_epochs = 10

start_time = time.time()
for epoch in range(1,num_epochs+1):
    
    loss_train = 0
    loss_valid = 0
    running_loss = 0
    
    network.train()
    for step in range(1,len(train_loader)+1):
    
        images, landmarks = next(iter(train_loader))
        
        images = images.cuda()
        landmarks = landmarks.view(landmarks.size(0),-1).cuda() 
        
        predictions = network(images)
        
        # clear all the gradients before calculating them
        optimizer.zero_grad()
        
        # find the loss for the current step
        loss_train_step = criterion(predictions, landmarks)
        
        # calculate the gradients
        loss_train_step.backward()
        
        # update the parameters
        optimizer.step()
        
        loss_train += loss_train_step.item()
        running_loss = loss_train/step
        
        print_overwrite(step, len(train_loader), running_loss, 'train')
        
    network.eval() 
    with torch.no_grad():
        
        for step in range(1,len(valid_loader)+1):
            
            images, landmarks = next(iter(valid_loader))
        
            images = images.cuda()
            landmarks = landmarks.view(landmarks.size(0),-1).cuda()
        
            predictions = network(images)

            # find the loss for the current step
            loss_valid_step = criterion(predictions, landmarks)

            loss_valid += loss_valid_step.item()
            running_loss = loss_valid/step

            print_overwrite(step, len(valid_loader), running_loss, 'valid')
    
    loss_train /= len(train_loader)
    loss_valid /= len(valid_loader)
    
    print('\n--------------------------------------------------')
    print('Epoch: {}  Train Loss: {:.4f}  Valid Loss: {:.4f}'.format(epoch, loss_train, loss_valid))
    print('--------------------------------------------------')
    
    if loss_valid < loss_min:
        loss_min = loss_valid
        torch.save(network.state_dict(), '/content/face_landmarks.pth') 
        print("\nMinimum Validation Loss of {:.4f} at epoch {}/{}".format(loss_min, epoch, num_epochs))
        print('Model Saved\n')
     
print('Training Complete')
print("Total Elapsed Time : {} s".format(time.time()-start_time))

在未知數據上進行預測

使用以下代碼段在未知圖像中預測關鍵點。


import time
import cv2
import os
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import imutils

import torch
import torch.nn as nn
from torchvision import models
import torchvision.transforms.functional as TF
#######################################################################
image_path = 'pic.jpg'
weights_path = 'face_landmarks.pth'
frontal_face_cascade_path = 'haarcascade_frontalface_default.xml'
#######################################################################
class Network(nn.Module):
    def __init__(self,num_classes=136):
        super().__init__()
        self.model_name='resnet18'
        self.model=models.resnet18(pretrained=False)
        self.model.conv1=nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.model.fc=nn.Linear(self.model.fc.in_features,num_classes)
        
    def forward(self, x):
        x=self.model(x)
        return x

#######################################################################
face_cascade = cv2.CascadeClassifier(frontal_face_cascade_path)

best_network = Network()
best_network.load_state_dict(torch.load(weights_path, map_location=torch.device('cpu'))) 
best_network.eval()

image = cv2.imread(image_path)
grayscale_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
display_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
height, width,_ = image.shape

faces = face_cascade.detectMultiScale(grayscale_image, 1.1, 4)

all_landmarks = []
for (x, y, w, h) in faces:
    image = grayscale_image[y:y+h, x:x+w]
    image = TF.resize(Image.fromarray(image), size=(224, 224))
    image = TF.to_tensor(image)
    image = TF.normalize(image, [0.5], [0.5])

    with torch.no_grad():
        landmarks = best_network(image.unsqueeze(0)) 

    landmarks = (landmarks.view(68,2).detach().numpy() + 0.5) * np.array([[w, h]]) + np.array([[x, y]])
    all_landmarks.append(landmarks)

plt.figure()
plt.imshow(display_image)
for landmarks in all_landmarks:
    plt.scatter(landmarks[:,0], landmarks[:,1], c = 'c', s = 5)

plt.show()

OpenCV Haar級聯分類器用于檢測圖像中的人臉。使用Haar級聯進行對象檢測是一種基于機器學習的方法,其中使用一組輸入數據對級聯函數進行訓練。OpenCV已經包含了許多預訓練的分類器,用于人臉、眼睛、行人等等。在我們的案例中,我們將使用人臉分類器,你需要下載預訓練的分類器XML文件并將其保存到你的工作目錄中。

人臉檢測

在輸入圖像中檢測到的人臉將被裁剪、調整大小為(224,224)并輸入到我們訓練好的神經網絡中以預測其中的關鍵點。

裁剪人臉上的關鍵點

在裁剪的人臉上疊加預測的關鍵點。結果如下圖所示。相當令人印象深刻,不是嗎?

最終結果

同樣,在多個人臉上進行關鍵點檢測:

在這里,你可以看到OpenCV Haar級聯分類器已經檢測到了多個人臉,包括一個誤報(一個拳頭被預測為人臉)。

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2024-06-12 12:57:12

2013-05-28 11:08:51

人臉識別html5

2019-03-27 15:10:02

開源人臉檢測庫

2021-09-07 09:01:07

人臉識別人工智能數據

2015-02-10 10:08:59

JavaScript

2021-08-13 10:01:19

人臉識別人工智能數據

2021-05-10 11:08:00

人工智能人臉識別

2021-10-13 15:15:22

人工智能AI人臉識別

2017-03-20 08:58:02

Python人臉識別AI

2024-12-16 08:06:42

2017-01-23 21:35:58

Android人臉檢測介紹

2024-04-28 11:42:39

Python模型數據

2022-04-05 20:54:21

OpenCVPython人臉檢測

2020-12-23 08:29:08

人臉識別AI人工智能

2013-10-22 10:27:59

2019-10-08 15:08:28

人臉數據AI數據收集

2024-11-01 07:00:00

人臉識別Python機器學習

2024-05-09 10:36:53

AI視覺人工智能

2020-12-30 08:20:04

人臉檢測Retina FacemobileNet

2024-06-12 08:10:08

點贊
收藏

51CTO技術棧公眾號

久久综合导航| 久久精品黄色| 久久综合九色欧美综合狠狠| 国产精品夫妻激情| 国产中文av在线| 伊人久久噜噜噜躁狠狠躁| 粉嫩老牛aⅴ一区二区三区| 日韩一区二区三区高清| 国产熟女一区二区丰满| 国产精品尤物| 久久精品亚洲精品| 中文人妻一区二区三区| 日本免费在线一区| 五月综合激情网| 婷婷久久伊人| 免费的黄色av| 久久99久久久欧美国产| 97精品国产97久久久久久春色| 亚洲女优在线观看| 极品束缚调教一区二区网站| 欧美日韩精品欧美日韩精品| 欧美精品自拍视频| 免费黄网站在线播放| 成人av网站在线观看| 国产精品一区二区3区| 日韩精品无码一区二区| 99精品在线观看| 亚洲人成电影网站色…| 韩国三级在线看| 欧美网站免费| 色综合久久久久综合99| 日本一级黄视频| 天堂аⅴ在线地址8| 久久综合资源网| 懂色一区二区三区av片| 曰批又黄又爽免费视频| 亚洲欧美日韩国产一区| 欧美黑人又粗大| 69夜色精品国产69乱| 激情五月综合| 国产手机视频精品| 奇米777第四色| 视频欧美一区| 日韩一区二区在线观看视频播放| 一区二区三区 欧美| 成人美女大片| 欧美日韩一区二区三区在线免费观看| 成人在线免费观看视频网站| 免费的黄网站在线观看| 国产精品美女久久久久久久| 日本一区二区在线视频观看| 西西人体44www大胆无码| 成人综合在线观看| av一区二区三区免费| 精品人妻无码一区二区色欲产成人| 美女脱光内衣内裤视频久久影院| 国产成人在线一区二区| 日本视频网站在线观看| 亚欧成人精品| 日韩免费在线观看视频| 69视频免费看| 欧美aⅴ一区二区三区视频| 日韩免费在线播放| 中文字幕av片| 久久电影国产免费久久电影| 成人久久18免费网站图片| 97人妻人人澡人人爽人人精品| 久久国产麻豆精品| 成人国产精品色哟哟| 国产喷水福利在线视频| 国产盗摄女厕一区二区三区| 国产99在线播放| 天天干,夜夜爽| 91亚洲国产成人精品一区二三| 国产精品露出视频| 外国精品视频在线观看| 成人夜色视频网站在线观看| 好吊色欧美一区二区三区四区| 涩爱av在线播放一区二区| 久久久久久久久久看片| 亚洲一二三区在线| 在线看三级电影| 欧美日韩精品在线| 免费男同深夜夜行网站| 黄色成人小视频| 日韩一级片在线播放| xxxx黄色片| 大胆日韩av| 欧美人在线观看| 中文字幕视频网站| 麻豆视频观看网址久久| av资源一区二区| 经典三级在线| 亚洲美女精品一区| 免费无码国产v片在线观看| 成人在线高清| 亚洲成av人影院在线观看| 免费毛片视频网站| 亚洲网色网站| 秋霞成人午夜鲁丝一区二区三区| 一区二区国产欧美| 不卡大黄网站免费看| 色一情一乱一伦一区二区三区| 精品欧美色视频网站在线观看| 亚洲综合激情小说| 能看的毛片网站| 亚洲国产欧美国产第一区| 精品无人区太爽高潮在线播放 | 国产福利一区二区三区视频| 国产精选在线观看91| wwwxxx在线观看| 亚洲第一成人在线| 日本美女视频一区| 亚洲精品aaaaa| 欧美成人一区二区三区电影| 无码视频一区二区三区| 丁香天五香天堂综合| 色之综合天天综合色天天棕色| 丰满诱人av在线播放| 欧美视频一区在线| 无码人妻aⅴ一区二区三区| 99久久.com| 国产精品极品尤物在线观看| 无码h黄肉3d动漫在线观看| 亚洲欧美国产77777| 欧洲熟妇精品视频| 另类ts人妖一区二区三区| 久久的精品视频| 中文字幕欧美在线观看| xf在线a精品一区二区视频网站| 日韩在线视频在线| 二区三区精品| 中日韩美女免费视频网站在线观看| 豆国产97在线 | 亚洲| 黄色小说综合网站| 亚洲二区自拍| 97久久网站| 亚洲天堂男人天堂| 精品国产一区二区三区四| 成人小视频在线观看| 蜜臀av性久久久久蜜臀av| 婷婷激情成人| 色偷偷9999www| 国产乡下妇女三片| 国产欧美日韩另类视频免费观看| 播放灌醉水嫩大学生国内精品| caoporn成人| 九九热视频这里只有精品| 国产乱码久久久久| 综合色中文字幕| 日本77777| 亚洲精品极品少妇16p| 国产日韩一区在线| 日本三级视频在线播放| 7878成人国产在线观看| 秋霞欧美一区二区三区视频免费| 美女尤物国产一区| 中文字幕久久一区| 国产精久久一区二区| 久久成人人人人精品欧| 丰满肉嫩西川结衣av| 亚洲成年人网站在线观看| 国产精品福利导航| 久久久久国内| 色999日韩自偷自拍美女| 日本精品裸体写真集在线观看| 亚洲一区www| 亚洲图片中文字幕| 亚洲欧美激情插| av天堂一区二区| 在线一区欧美| 小说区图片区图片区另类灬| 白嫩亚洲一区二区三区| 欧美激情视频在线观看| 日本免费一区视频| 色综合一个色综合亚洲| 蜜桃av免费在线观看| 精久久久久久久久久久| 无码日本精品xxxxxxxxx| 日韩黄色网络| 国产日韩欧美在线视频观看| 欧美人与性动交α欧美精品济南到| 亚洲成人999| 香蕉污视频在线观看| 中文字幕一区二区三区乱码在线| 中文字幕av一区二区三区人妻少妇| 影音先锋中文字幕一区| 日本午夜一区二区三区| 自拍偷拍亚洲图片| 国内精品视频一区| 色哟哟免费在线观看| 精品国产91乱码一区二区三区| 一级黄色免费网站| 中文字幕亚洲精品在线观看| 国产精品亚洲一区二区无码| 三级久久三级久久久| 久久久久久av无码免费网站下载| 伊人春色精品| 91青青草免费观看| 芒果视频成人app| 免费97视频在线精品国自产拍| 日本v片在线免费观看| 91精品国产综合久久久久久| 69国产精品视频免费观看| 18成人在线观看| 香蕉网在线播放| 国产精品一区二区黑丝| 青青在线视频免费| 欧美午夜a级限制福利片| 手机在线观看国产精品| 国产精品nxnn| 91社区国产高清| 午夜日韩成人影院| 久久久久久久成人| 麻豆tv免费在线观看| 亚洲欧美日韩精品久久亚洲区| 国产wwwxxx| 欧美午夜在线一二页| 日本免费观看视| 亚洲欧美经典视频| 三级黄色片在线观看| 91免费视频观看| 潘金莲一级淫片aaaaa| 麻豆91精品视频| 成年人网站大全| 99精品福利视频| 欧美日韩视频免费| 欧美va天堂在线| 欧美日韩一级在线| 久久免费av| 亚洲巨乳在线观看| 欧美男男gaytwinkfreevideos| 国产精品国产三级国产专区53| 四虎精品一区二区免费| 国产精品久久久av| 日本综合字幕| 奇米4444一区二区三区| 激情黄产视频在线免费观看| 欧美激情啊啊啊| 污视频在线免费观看网站| 按摩亚洲人久久| av男人的天堂在线| 色噜噜久久综合伊人一本| 福利视频在线导航| 一二美女精品欧洲| 大胆av不用播放器在线播放| 亚洲欧美日韩国产精品| 久久精品蜜桃| 国产亚洲激情视频在线| 美国成人毛片| 亚洲色图美腿丝袜| 国产专区在线| 在线观看国产欧美| 日本在线视频网| 久久精品中文字幕免费mv| 成人看片免费| 欧美高清一级大片| 国产美女精品写真福利视频| 91国产精品电影| 在线观看v片| 国产精品久久久久久久9999| 成人全视频在线观看在线播放高清| 国产精品大陆在线观看| 激情亚洲小说| 99r国产精品视频| 成人动态视频| 欧美黑人xxxxx| 日本成人小视频| 国产又粗又硬又长| 亚洲国产日韩欧美一区二区三区| 日韩日韩日韩日韩日韩| 性xx色xx综合久久久xx| 国产又大又黄又猛| 国产乱码精品一区二区三区av | 99re视频这里只有精品| 国产美女精品久久| 中文字幕一区二区日韩精品绯色| 四虎免费在线视频| 精品国产乱码久久久久久婷婷| 在线永久看片免费的视频| 欧美猛男超大videosgay| 超碰免费在线97| 日韩激情视频在线播放| 77777影视视频在线观看| 欧美激情一级精品国产| 欧美大片免费高清观看| 91影视免费在线观看| 欧美顶级毛片在线播放| 亚洲日本japanese丝袜| 亚洲午夜精品久久久久久app| 可以在线看的黄色网址| 国产一区不卡视频| 少妇精品一区二区三区| 亚洲欧美在线高清| 制服.丝袜.亚洲.中文.综合懂色| 欧美午夜影院一区| 四虎永久在线观看| 色吧影院999| 欧美aa在线| 91在线看www| 国产成人ay| 又大又硬又爽免费视频| 奇米精品一区二区三区在线观看一| 亚洲欧美激情一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩a级片在线观看| 色视频一区二区| 蜜桃久久一区二区三区| 日韩在线中文字| 亚洲精品动漫| 痴汉一区二区三区| 久久久久久久久久久妇女 | 欧美男男tv网站在线播放| 国产精品一区二区在线| 欧洲亚洲视频| 乱熟女高潮一区二区在线| 蜜桃视频一区二区三区| 精品人妻少妇嫩草av无码| 亚洲综合精品久久| 国产欧美熟妇另类久久久| 国产一区二区三区在线观看视频| av剧情在线观看| 91国产丝袜在线放| 91亚洲国产| 成人亚洲视频在线观看| 91蝌蚪porny九色| 日本一区二区三区免费视频| 91精品福利在线一区二区三区| jizz在线免费观看| 国产999在线观看| 色老板在线视频一区二区| 日本成人在线不卡| 国产乱码字幕精品高清av | 三级视频在线| 久久久久久久国产精品视频| 亚洲日本va| 4444在线观看| 国产在线不卡一区| 亚洲伦理一区二区三区| 欧美日韩在线播| 99se视频在线观看| 国产精品高精视频免费| 综合色就爱涩涩涩综合婷婷| 黄色动漫在线免费看| 91在线国产观看| 日韩特级黄色片| 日韩精品中文字幕在线观看| av男人的天堂在线观看| 国产精品一区二区不卡视频| 伊人成人在线| xfplay5566色资源网站| 黄色一区二区在线| 四虎精品在永久在线观看| 8090成年在线看片午夜| 亚洲毛片免费看| 国产精品99久久免费黑人人妻| 国产午夜亚洲精品理论片色戒| 999视频在线| 尤物精品国产第一福利三区| 99久久婷婷国产综合精品首页 | 91精品国产综合久久久久久丝袜 | 国产欧美一区二区精品忘忧草 | 久久中文在线| 极品蜜桃臀肥臀-x88av| 欧美日韩二区三区| 成人在线直播| 国产高清在线一区二区| av成人天堂| 国产一区二区三区精品在线| 欧美三级电影网| 在线视频中文字幕第一页| 国产一级二级三级精品| 久久三级福利| 日韩在线不卡av| 精品区一区二区| 六月婷婷综合| 特级黄色录像片| 99国产精品久| 在线观看国产精品视频| 欧美大奶子在线| 亚洲免费福利一区| 嫩草视频免费在线观看| 亚洲午夜日本在线观看| 青春草在线观看| 91视频九色网站| 一区二区三区福利| а天堂中文在线资源| 亚洲高清福利视频| jizz亚洲女人高潮大叫| 国产又粗又猛又爽又黄的网站 | 欧美黑人3p| 国产精品亚洲成人| 日本一区二区三区精品| xxxxx91麻豆| 欧美亚洲大陆| 手机在线国产视频| 欧美性色19p| 羞羞视频在线观看不卡| 欧洲av一区| 成人激情视频网站|