午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 用python搭建一個花卉識別系統(tǒng)

用python搭建一個花卉識別系統(tǒng)

熱門標(biāo)簽:高德地圖標(biāo)注是免費的嗎 北京電信外呼系統(tǒng)靠譜嗎 無錫客服外呼系統(tǒng)一般多少錢 地圖標(biāo)注視頻廣告 大連crm外呼系統(tǒng) 梅州外呼業(yè)務(wù)系統(tǒng) 百度地圖標(biāo)注位置怎么修改 老人電話機器人 洪澤縣地圖標(biāo)注

一.開源神經(jīng)網(wǎng)絡(luò)(AlexNet)

1.獲取數(shù)據(jù)集

使用步驟如下:
* (1)在data_set文件夾下創(chuàng)建新文件夾"flower_data"
* (2)點擊鏈接下載花分類數(shù)據(jù)集download.tensorflow.org/example\_im…
* (3)解壓數(shù)據(jù)集到flower_data文件夾下
* (4)執(zhí)行"split_data.py"腳本自動將數(shù)據(jù)集劃分成訓(xùn)練集train和驗證集val 

split_data.py

import os
from shutil import copy, rmtree
import random
 
 
def mk_file(file_path: str):
    if os.path.exists(file_path):
        # 如果文件夾存在,則先刪除原文件夾在重新創(chuàng)建
        rmtree(file_path)
    os.makedirs(file_path)
 
 
def main():
    # 保證隨機可復(fù)現(xiàn)
    random.seed(0)
 
    # 將數(shù)據(jù)集中10%的數(shù)據(jù)劃分到驗證集中
    split_rate = 0.1
 
    # 指向你解壓后的flower_photos文件夾
    cwd = os.getcwd()
    data_root = os.path.join(cwd, "flower_data")
    origin_flower_path = os.path.join(data_root, "flower_photos")
    assert os.path.exists(origin_flower_path)
    flower_class = [cla for cla in os.listdir(origin_flower_path)
                    if os.path.isdir(os.path.join(origin_flower_path, cla))]
 
    # 建立保存訓(xùn)練集的文件夾
    train_root = os.path.join(data_root, "train")
    mk_file(train_root)
    for cla in flower_class:
        # 建立每個類別對應(yīng)的文件夾
        mk_file(os.path.join(train_root, cla))
 
    # 建立保存驗證集的文件夾
    val_root = os.path.join(data_root, "val")
    mk_file(val_root)
    for cla in flower_class:
        # 建立每個類別對應(yīng)的文件夾
        mk_file(os.path.join(val_root, cla))
 
    for cla in flower_class:
        cla_path = os.path.join(origin_flower_path, cla)
        images = os.listdir(cla_path)
        num = len(images)
        # 隨機采樣驗證集的索引
        eval_index = random.sample(images, k=int(num*split_rate))
        for index, image in enumerate(images):
            if image in eval_index:
                # 將分配至驗證集中的文件復(fù)制到相應(yīng)目錄
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(val_root, cla)
                copy(image_path, new_path)
            else:
                # 將分配至訓(xùn)練集中的文件復(fù)制到相應(yīng)目錄
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(train_root, cla)
                copy(image_path, new_path)
            print("\r[{}] processing [{}/{}]".format(cla, index+1, num), end="")  # processing bar
        print()
 
    print("processing done!")
 
 
if __name__ == '__main__':
    main()

2.神經(jīng)網(wǎng)絡(luò)模型

model.py

import torch.nn as nn
import torch
 
class AlexNet(nn.Module):
    def __init__(self, num_classes=1000, init_weights=False):
        super(AlexNet, self).__init__()
        # 用nn.Sequential()將網(wǎng)絡(luò)打包成一個模塊,精簡代碼
        self.features = nn.Sequential(   # 卷積層提取圖像特征
            nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),  # input[3, 224, 224]  output[48, 55, 55]
            nn.ReLU(inplace=True), 									# 直接修改覆蓋原值,節(jié)省運算內(nèi)存
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[48, 27, 27]
            nn.Conv2d(48, 128, kernel_size=5, padding=2),           # output[128, 27, 27]
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 13, 13]
            nn.Conv2d(128, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
            nn.ReLU(inplace=True),
            nn.Conv2d(192, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
            nn.ReLU(inplace=True),
            nn.Conv2d(192, 128, kernel_size=3, padding=1),          # output[128, 13, 13]
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 6, 6]
        )
        self.classifier = nn.Sequential(   # 全連接層對圖像分類
            nn.Dropout(p=0.5),			   # Dropout 隨機失活神經(jīng)元,默認比例為0.5
            nn.Linear(128 * 6 * 6, 2048),
            nn.ReLU(inplace=True),
            nn.Dropout(p=0.5),
            nn.Linear(2048, 2048),
            nn.ReLU(inplace=True),
            nn.Linear(2048, num_classes),
        )
        if init_weights:
            self._initialize_weights()
            
	# 前向傳播過程
    def forward(self, x):
        x = self.features(x)
        x = torch.flatten(x, start_dim=1)	# 展平后再傳入全連接層
        x = self.classifier(x)
        return x
        
	# 網(wǎng)絡(luò)權(quán)重初始化,實際上 pytorch 在構(gòu)建網(wǎng)絡(luò)時會自動初始化權(quán)重
    def _initialize_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):                            # 若是卷積層
                nn.init.kaiming_normal_(m.weight, mode='fan_out',   # 用(何)kaiming_normal_法初始化權(quán)重
                                        nonlinearity='relu')
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)                    # 初始化偏重為0
            elif isinstance(m, nn.Linear):            # 若是全連接層
                nn.init.normal_(m.weight, 0, 0.01)    # 正態(tài)分布初始化
                nn.init.constant_(m.bias, 0)          # 初始化偏重為0

3.訓(xùn)練神經(jīng)網(wǎng)絡(luò)

train.py

# 導(dǎo)入包
import torch
import torch.nn as nn
from torchvision import transforms, datasets, utils
import matplotlib.pyplot as plt
import numpy as np
import torch.optim as optim
from model import AlexNet
import os
import json
import time
 
# 使用GPU訓(xùn)練
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
with open(os.path.join("train.log"), "a") as log:
    log.write(str(device)+"\n")
 
#數(shù)據(jù)預(yù)處理
data_transform = {
    "train": transforms.Compose([transforms.RandomResizedCrop(224),       # 隨機裁剪,再縮放成 224×224
                                 transforms.RandomHorizontalFlip(p=0.5),  # 水平方向隨機翻轉(zhuǎn),概率為 0.5, 即一半的概率翻轉(zhuǎn), 一半的概率不翻轉(zhuǎn)
                                 transforms.ToTensor(),
                                 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]),
 
    "val": transforms.Compose([transforms.Resize((224, 224)),  # cannot 224, must (224, 224)
                               transforms.ToTensor(),
                               transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])}
 
#導(dǎo)入、加載 訓(xùn)練集
# 導(dǎo)入訓(xùn)練集
#train_set = torchvision.datasets.CIFAR10(root='./data', 	 # 數(shù)據(jù)集存放目錄
#										 train=True,		 # 表示是數(shù)據(jù)集中的訓(xùn)練集
#                                        download=True,  	 # 第一次運行時為True,下載數(shù)據(jù)集,下載完成后改為False
#                                        transform=transform) # 預(yù)處理過程
# 加載訓(xùn)練集                              
#train_loader = torch.utils.data.DataLoader(train_set, 	  # 導(dǎo)入的訓(xùn)練集
#										   batch_size=50, # 每批訓(xùn)練的樣本數(shù)
#                                          shuffle=False,  # 是否打亂訓(xùn)練集
#                                          num_workers=0)  # num_workers在windows下設(shè)置為0
 
 
# 獲取圖像數(shù)據(jù)集的路徑
data_root = os.path.abspath(os.path.join(os.getcwd(), "../.."))  		# get data root path 返回上上層目錄
image_path = data_root + "/jqsj/data_set/flower_data/"  				 		# flower data_set path
 
# 導(dǎo)入訓(xùn)練集并進行預(yù)處理
train_dataset = datasets.ImageFolder(root=image_path + "/train",		
                                     transform=data_transform["train"])
train_num = len(train_dataset)
 
# 按batch_size分批次加載訓(xùn)練集
train_loader = torch.utils.data.DataLoader(train_dataset,	# 導(dǎo)入的訓(xùn)練集
                                           batch_size=32, 	# 每批訓(xùn)練的樣本數(shù)
                                           shuffle=True,	# 是否打亂訓(xùn)練集
                                           num_workers=0)	# 使用線程數(shù),在windows下設(shè)置為0
 
#導(dǎo)入、加載 驗證集
# 導(dǎo)入驗證集并進行預(yù)處理
validate_dataset = datasets.ImageFolder(root=image_path + "/val",
                                        transform=data_transform["val"])
val_num = len(validate_dataset)
 
# 加載驗證集
validate_loader = torch.utils.data.DataLoader(validate_dataset,	# 導(dǎo)入的驗證集
                                              batch_size=32, 
                                              shuffle=True,
                                              num_workers=0)
 
# 存儲 索引:標(biāo)簽 的字典
# 字典,類別:索引 {'daisy':0, 'dandelion':1, 'roses':2, 'sunflower':3, 'tulips':4}
flower_list = train_dataset.class_to_idx
# 將 flower_list 中的 key 和 val 調(diào)換位置
cla_dict = dict((val, key) for key, val in flower_list.items())
 
# 將 cla_dict 寫入 json 文件中
json_str = json.dumps(cla_dict, indent=4)
with open('class_indices.json', 'w') as json_file:
    json_file.write(json_str)
 
#訓(xùn)練過程
net = AlexNet(num_classes=5, init_weights=True)  	  # 實例化網(wǎng)絡(luò)(輸出類型為5,初始化權(quán)重)
net.to(device)									 	  # 分配網(wǎng)絡(luò)到指定的設(shè)備(GPU/CPU)訓(xùn)練
loss_function = nn.CrossEntropyLoss()			 	  # 交叉熵損失
optimizer = optim.Adam(net.parameters(), lr=0.0002)	  # 優(yōu)化器(訓(xùn)練參數(shù),學(xué)習(xí)率)
 
save_path = './AlexNet.pth'
best_acc = 0.0
 
for epoch in range(150):
    ########################################## train ###############################################
    net.train()     					# 訓(xùn)練過程中開啟 Dropout
    running_loss = 0.0					# 每個 epoch 都會對 running_loss  清零
    time_start = time.perf_counter()	# 對訓(xùn)練一個 epoch 計時
    
    for step, data in enumerate(train_loader, start=0):  # 遍歷訓(xùn)練集,step從0開始計算
        images, labels = data   # 獲取訓(xùn)練集的圖像和標(biāo)簽
        optimizer.zero_grad()	# 清除歷史梯度
        
        outputs = net(images.to(device))				 # 正向傳播
        loss = loss_function(outputs, labels.to(device)) # 計算損失
        loss.backward()								     # 反向傳播
        optimizer.step()								 # 優(yōu)化器更新參數(shù)
        running_loss += loss.item()
        
        # 打印訓(xùn)練進度(使訓(xùn)練過程可視化)
        rate = (step + 1) / len(train_loader)           # 當(dāng)前進度 = 當(dāng)前step / 訓(xùn)練一輪epoch所需總step
        a = "*" * int(rate * 50)
        b = "." * int((1 - rate) * 50)
        with open(os.path.join("train.log"), "a") as log:
              log.write(str("\rtrain loss: {:^3.0f}%[{}->{}]{:.3f}".format(int(rate * 100), a, b, loss))+"\n")
        print("\rtrain loss: {:^3.0f}%[{}->{}]{:.3f}".format(int(rate * 100), a, b, loss), end="")
    print()
    with open(os.path.join("train.log"), "a") as log:
              log.write(str('%f s' % (time.perf_counter()-time_start))+"\n")
    print('%f s' % (time.perf_counter()-time_start))
 
    ########################################### validate ###########################################
    net.eval()    # 驗證過程中關(guān)閉 Dropout
    acc = 0.0  
    with torch.no_grad():
        for val_data in validate_loader:
            val_images, val_labels = val_data
            outputs = net(val_images.to(device))
            predict_y = torch.max(outputs, dim=1)[1]  # 以output中值最大位置對應(yīng)的索引(標(biāo)簽)作為預(yù)測輸出
            acc += (predict_y == val_labels.to(device)).sum().item()    
        val_accurate = acc / val_num
        
        # 保存準(zhǔn)確率最高的那次網(wǎng)絡(luò)參數(shù)
        if val_accurate > best_acc:
            best_acc = val_accurate
            torch.save(net.state_dict(), save_path)
        with open(os.path.join("train.log"), "a") as log:
              log.write(str('[epoch %d] train_loss: %.3f  test_accuracy: %.3f \n' %
              (epoch + 1, running_loss / step, val_accurate))+"\n")
        print('[epoch %d] train_loss: %.3f  test_accuracy: %.3f \n' %
              (epoch + 1, running_loss / step, val_accurate))
with open(os.path.join("train.log"), "a") as log:
      log.write(str('Finished Training')+"\n")
print('Finished Training')

訓(xùn)練結(jié)果后,準(zhǔn)確率是94%

訓(xùn)練日志如下:

4.對模型進行預(yù)測

predict.py

import torch

接著對其中一個花卉圖片進行識別,其結(jié)果如下:

可以看到只有一個識別結(jié)果(daisy雛菊)和準(zhǔn)確率1.0是100%(范圍是0~1,所以1對應(yīng)100%)

為了方便使用這個神經(jīng)網(wǎng)絡(luò),接著我們將其開發(fā)成一個可視化的界面操作

二、花卉識別系統(tǒng)搭建(flask)

1.構(gòu)建頁面:

2.調(diào)用神經(jīng)網(wǎng)絡(luò)模型

main.py

# coding:utf-8
 
from flask import Flask, render_template, request, redirect, url_for, make_response, jsonify
from werkzeug.utils import secure_filename
import os
import time
 
 
###################
#模型所需庫包
import torch
from model import AlexNet
from PIL import Image
from torchvision import transforms
import matplotlib.pyplot as plt
import json
 
# read class_indict
try:
    json_file = open('./class_indices.json', 'r')
    class_indict = json.load(json_file)
except Exception as e:
    print(e)
    exit(-1)
 
# create model
model = AlexNet(num_classes=5)
# load model weights
model_weight_path = "./AlexNet.pth"
#, map_location='cpu'
model.load_state_dict(torch.load(model_weight_path, map_location='cpu'))
 
# 關(guān)閉 Dropout
model.eval()
 
###################
from datetime import timedelta
# 設(shè)置允許的文件格式
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'bmp'])
 
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
 
app = Flask(__name__)
# 設(shè)置靜態(tài)文件緩存過期時間
app.send_file_max_age_default = timedelta(seconds=1)
 
#圖片裝換操作
def tran(img_path):
     # 預(yù)處理
    data_transform = transforms.Compose(
        [transforms.Resize((224, 224)),
         transforms.ToTensor(),
         transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
 
    # load image
    img = Image.open("pgy2.jpg")
    #plt.imshow(img)
    # [N, C, H, W]
    img = data_transform(img)
    # expand batch dimension
    img = torch.unsqueeze(img, dim=0)
    return img
    
 
@app.route('/upload', methods=['POST', 'GET'])  # 添加路由
def upload():
    path=""
    if request.method == 'POST':
        f = request.files['file']
        if not (f and allowed_file(f.filename)):
            return jsonify({"error": 1001, "msg": "請檢查上傳的圖片類型,僅限于png、PNG、jpg、JPG、bmp"})
 
        basepath = os.path.dirname(__file__)  # 當(dāng)前文件所在路徑
        path = secure_filename(f.filename)
        upload_path = os.path.join(basepath, 'static/images', secure_filename(f.filename))  # 注意:沒有的文件夾一定要先創(chuàng)建,不然會提示沒有該路徑
        # upload_path = os.path.join(basepath, 'static/images','test.jpg')  #注意:沒有的文件夾一定要先創(chuàng)建,不然會提示沒有該路徑
        print(path)
 
        img = tran('static/images'+path)
        ##########################
        #預(yù)測圖片
        with torch.no_grad():
            # predict class
            output = torch.squeeze(model(img))     # 將輸出壓縮,即壓縮掉 batch 這個維度
            predict = torch.softmax(output, dim=0)
            predict_cla = torch.argmax(predict).numpy()
            res = class_indict[str(predict_cla)]
            pred = predict[predict_cla].item()
            #print(class_indict[str(predict_cla)], predict[predict_cla].item())
        res_chinese = ""
        if res=="daisy":
            res_chinese="雛菊"
        if res=="dandelion":
            res_chinese="蒲公英"
        if res=="roses":
            res_chinese="玫瑰"
        if res=="sunflower":
            res_chinese="向日葵"
        if res=="tulips":
            res_chinese="郁金香"
 
        #print('result:', class_indict[str(predict_class)], 'accuracy:', prediction[predict_class])
        ##########################
        f.save(upload_path)
        pred = pred*100
        return render_template('upload_ok.html', path=path, res_chinese=res_chinese,pred = pred, val1=time.time())
 
    return render_template('upload.html')
 
if __name__ == '__main__':
    # app.debug = True
    app.run(host='127.0.0.1', port=80,debug = True)

3.系統(tǒng)識別結(jié)果

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>李運辰-花卉識別系統(tǒng)v1.0/title>
	link rel="stylesheet" type="text/css" href="../static/css/bootstrap.min.css" rel="external nofollow" >
	link rel="stylesheet" type="text/css" href="../static/css/fileinput.css" rel="external nofollow" >
    script src="../static/js/jquery-2.1.4.min.js">/script>
	
    script src="../static/js/bootstrap.min.js">/script> 
	script src="../static/js/fileinput.js">/script> 
	script src="../static/js/locales/zh.js">/script> 
/head>
body>
    h1  align="center">李運辰-花卉識別系統(tǒng)v1.0/h1>
	div align="center">
    form action="" enctype='multipart/form-data' method='POST'>
        input type="file" name="file" class="file"  data-show-preview="false" style="margin-top:20px;"/>
        br>
        input type="submit" value="上傳" class="button-new btn btn-primary" style="margin-top:15px;"/>
    /form>
	p  style="size:15px;color:blue;">識別結(jié)果:{{res_chinese}}/p>
	/br>
	p  style="size:15px;color:red;">準(zhǔn)確率:{{pred}}%/p>
    img src="{{ './static/images/'+path }}" width="400" height="400" alt=""/>
	/div>
/body>
/html>

4.啟動系統(tǒng):

python main.py

接著在瀏覽器在瀏覽器里面訪問

http://127.0.0.1/upload

出現(xiàn)如下界面:

最后來一個識別過程的動圖

三、總結(jié)

ok,這個花卉系統(tǒng)就已經(jīng)搭建完成了,是不是超級簡單,我也是趁著修了這個機器視覺這么課,才弄這么一個系統(tǒng),回顧一下之前的知識,哈哈哈。

以上就是用python搭建一個花卉識別系統(tǒng)的詳細內(nèi)容,更多關(guān)于python 花卉識別系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python深度學(xué)習(xí)之實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
  • python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)鳶尾花分類
  • python神經(jīng)網(wǎng)絡(luò)編程之手寫數(shù)字識別
  • Python利用numpy實現(xiàn)三層神經(jīng)網(wǎng)絡(luò)的示例代碼
  • python機器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)
  • Python如何使用神經(jīng)網(wǎng)絡(luò)進行簡單文本分類
  • Python創(chuàng)建簡單的神經(jīng)網(wǎng)絡(luò)實例講解
  • 如何用Python 實現(xiàn)全連接神經(jīng)網(wǎng)絡(luò)(Multi-layer Perceptron)
  • Python實現(xiàn)Keras搭建神經(jīng)網(wǎng)絡(luò)訓(xùn)練分類模型教程
  • python神經(jīng)網(wǎng)絡(luò)編程實現(xiàn)手寫數(shù)字識別
  • python實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預(yù)測模型

標(biāo)簽:安慶 怒江 清遠 洛陽 長春 岳陽 泉州 吉林

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用python搭建一個花卉識別系統(tǒng)》,本文關(guān)鍵詞  用,python,搭建,一個,花卉,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用python搭建一個花卉識別系統(tǒng)》相關(guān)的同類信息!
  • 本頁收集關(guān)于用python搭建一個花卉識別系統(tǒng)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲精品一区二区三区新线路 | 中文字幕免费观看一区| 久久久免费高清电视剧观看| 日本网站免费观看| 97视频免费看| 五月激情丁香网| 日本亚洲欧洲色| 中文字幕在线看人| av一区二区三区四区电影| 精品一区二区三区视频| 国产日产亚洲精品| www黄色网址| 国产精品高潮粉嫩av| 国产一区高清在线| 久久狠狠久久综合桃花| av一区二区三区免费| 久久婷婷综合色| 国产高潮流白浆| 中文在线观看免费高清| 成人av综合在线| 亚洲视频999| 久久久久久久久久久av| 国产精品一区二| 亚洲第一精品网站| 色综合久久久久| 成人免费xxxxx在线观看| aaaaaaaa毛片| 国产精品三区在线观看| 亚洲精品高清在线| 色噜噜狠狠一区二区| 欧美中文字幕不卡| 国产稀缺精品盗摄盗拍| 一区二区福利视频| 国产午夜精品视频一区二区三区| 白嫩情侣偷拍呻吟刺激| 亚洲av无码一区二区乱子伦| 精品中文字幕久久久久久| 久久亚洲欧美日韩精品专区| 久久久成人精品一区二区三区| 91在线小视频| 国产精品91在线| 国产精品久久久精品四季影院| 中文字幕中文在线不卡住| 亚洲一区二区在线免费看| 中文一区一区三区免费| 日本亚洲视频在线| 国产精品老女人视频| 黄色小视频大全| av片免费播放| 欧美在线不卡一区| 色呦呦网站入口| 久久综合成人网| 免费观看在线色综合| 色偷偷av一区二区三区乱| 国产精品视频久久久久久| 欧美日本在线看| 免费激情视频在线观看| 国产69精品一区二区亚洲孕妇| 精品福利在线视频| 日本r级电影在线观看| 伊人婷婷欧美激情| 路边理发店露脸熟妇泻火| 久久青草久久| 精品婷婷伊人一区三区三| 自拍视频一区二区三区| 麻豆精品一区二区av白丝在线| 在线不卡中文字幕| 欧美成人免费在线| 成人毛片视频在线观看| 午夜两性免费视频| 自拍偷拍国产亚洲| 男人添女人荫蒂免费视频| 久久91精品国产91久久小草| 日韩一区二区电影在线| 久久精品色妇熟妇丰满人妻| 在线电影中文日韩| 精品国产黄色片| 欧美极品少妇与黑人| 国产高清视频网站| 亚洲国产精品成人综合色在线婷婷| 国产精品福利在线观看| 凸凹人妻人人澡人人添| 欧美日韩免费在线观看| 国产97在线播放| 波多野结衣先锋影音| 国产福利电影一区二区三区| 国产日韩成人内射视频| **欧美大码日韩| 神马影院我不卡午夜| 99久久亚洲一区二区三区青草| 正在播放久久| 中文字幕乱码人妻无码久久 | 99久久综合狠狠综合久久| 91精品综合视频| 国产一区二区不卡| 久久久精品国产亚洲| 欧美一二三不卡| 精品国产av鲁一鲁一区| 欧美一区二区三区免费观看视频| 麻豆精品国产传媒| 一区二区欧美在线| 91人妻一区二区三区蜜臀| 久久久久久久91| 成人综合在线网站| 成人综合视频在线| 亚洲自拍与偷拍| 女女同性女同一区二区三区按摩| 成人一道本在线| 黄色片免费在线观看视频| 26uuu久久天堂性欧美| 中文字幕欧美在线| 小毛片在线观看| 亚洲日本电影在线| 在线观看视频黄色| 亚洲午夜久久久| 午夜两性免费视频| 国产成人自拍视频在线观看| 国产免费a视频| 国产av不卡一区二区| 欧美高清在线播放| 亚洲免费一在线| 欧美日韩一级二级三级| 国产一区二区三区精品视频| 丁香激情五月少妇| 91av在线影院| 精品中文字幕一区二区| 一本色道久久99精品综合| 亚洲激情av在线| 国产乡下妇女做爰视频| 亚洲第一视频在线观看| 亚洲国产精品三区| 欧美日韩国产在线看| 天天爽天天爽夜夜爽| 亚洲欧美激情小说另类| 91麻豆国产在线| 久久久久久九九九九| 亚洲成在人线在线播放| 91精东传媒理伦片在线观看| 欧美一区二区三区成人精品| 爱情岛论坛成人| 久久久久久久久久久久久久一区 | 激情小说亚洲一区| 午夜精品在线免费观看| 久久精品视频导航| 伊人在线视频观看| 在线播放精品一区二区三区| 日韩男人的天堂| 欧美日韩成人免费| 黑人巨大精品欧美一区免费视频| 99热这里只有精品在线观看| 亚洲精品一区二| 亚洲精品v天堂中文字幕| 中文字幕日本乱码精品影院| 中文字幕在线观看一区| 亚洲精品乱码久久久久久日本蜜臀| 久久精品水蜜桃av综合天堂| 国产一区高清在线| 中国毛片在线观看| 久久免费精品日本久久中文字幕| 国产婷婷色一区二区三区| 超碰超碰超碰超碰| 欧美国产日韩在线视频| 国产精品久久久久久av下载红粉 | 91丝袜在线观看| 日韩亚洲一区二区| 国产精品毛片a∨一区二区三区| 日本黄色不卡视频| 91淫黄看大片| 亚洲va久久久噜噜噜久久天堂| 精品国产乱码久久久久久免费| 精品一区二区三区免费毛片爱| 日本免费在线观看视频| 黄色片久久久久| 欧美精品久久一区二区| 亚洲国产精华液网站w| 黄色一级片中国| 91黄色小网站| 久久久久久久久久国产精品| 国产免费一区二区三区免费视频| 一区二区三区偷拍| 精品黑人一区二区三区久久| 国产伦精品一区二区三区四区| 呻吟揉丰满对白91乃国产区| 一区二区三区四区五区精品| 久久精品这里热有精品| 欧美日本不卡视频| 欧美视频你懂的| 精品国产一区二区三区不卡| 一区二区三区视频免费| 成人久久精品视频| 日本高清不卡三区| 国产精品 欧美在线| 中文字幕久久精品| 亚洲国产高清在线| 激情久久五月天| 国产精品久久777777换脸| 免费看91的网站| 国产精品小说在线| 色综合久久综合网| 天堂在线一区二区| 91精产国品一二三| 成人h视频在线观看| 91精品久久久久久久久久久久久久| 97成人在线视频| 精品一区二区电影| 亚洲国产成人爱av在线播放| 日韩一级在线观看| 91国产成人在线| 欧美在线一区二区| 一道本成人在线| 中文字幕不卡在线| 天天干视频在线观看| 少妇久久久久久久| 欧美黄色一级网站| 午夜精品久久久久久久无码| 久久琪琪电影院| 日韩激情片免费| 91丝袜美腿美女视频网站| 亚洲精品日韩激情在线电影| 精品国产91久久久久久久妲己| 在线中文字幕一区二区| 日韩午夜在线播放| 国产精品一区二区在线看| 久久久精品免费看| 国产麻豆免费视频| 中国黄色一级视频| 亚洲在线观看免费视频| 九九久久久久久久久激情| 视频在线99re| aa片在线观看视频在线播放| 国产天堂第一区| 国产男男gay体育生白袜| 波多野结衣一二区| 国产对白videos麻豆高潮| 免费无码国产精品| 国产偷拍一区二区| 狠狠色狠狠色综合日日91app| 免费看污片网站| www.欧美日本| 色婷婷狠狠18禁久久| 一级欧美一级日韩| 99久久国产综合精品麻豆| 91香蕉国产在线观看软件| 不卡电影免费在线播放一区| 亚洲乱码日产精品bd| 久久综合给合久久狠狠狠97色69| 国产毛片在线视频| 91视频一区二区| 一本色道a无线码一区v| 久久成人在线视频| 亚洲v国产v在线观看| 亚洲36d大奶网| 人人妻人人藻人人爽欧美一区| 佐山爱在线视频| 欧类av怡春院| 在线免费看av片| 国产乱码精品一区二区三区五月婷| 性欧美8khd高清极品| 草草视频在线播放| 免费成人av在线播放| 欧美美女直播网站| 国产一区二区三区四区福利| 一区二区福利视频| 欧美成人免费大片| 日韩美女一区| 永久免费精品视频网站| 尤物一区二区三区| 午夜三级在线观看| 久久婷婷麻豆| 永久免费精品影视网站| 日日碰狠狠躁久久躁婷婷| 国内一区二区在线| 欧美俄罗斯性视频| 人妻丰满熟妇aⅴ无码| 本田岬高潮一区二区三区| 日韩一区二区视频在线观看| 秋霞成人午夜鲁丝一区二区三区| 欧美专区第一页| 青青在线视频免费观看| 污污网站免费看| 性高潮视频在线观看| 国产片在线播放| 国产不卡一区视频| 欧美精品色一区二区三区| 日韩啊v在线| 国产精品污视频| 亚洲成人免费视频| 国产亚洲精品久久久久久| 91久久久久久久久久久久久| 黄色短视频在线观看| 午夜在线视频免费| 久久综合五月| 欧美一区二区在线观看| 久久精品国产理论片免费| 日本一级片免费看| 欧美放荡的少妇| 999一区二区三区| 高清不卡一区二区在线| 国自在线精品视频| 亚洲国产天堂av| 成人黄色在线视频| 亚洲欧美日韩成人| 国产日韩欧美中文| 伊人成人222| 在线观看日韩一区二区| 亚洲欧美日韩电影| 亚洲精品久久7777777| 亚洲a在线播放| 中文字幕在线播放一区| 久久9热精品视频| 国产精品香蕉国产| 中文字幕精品无| 久久久久久久久久久久久女国产乱 | 久久九九精品| 精品久久久久久综合日本欧美| 精品免费国产一区二区| 红桃视频成人在线观看| 欧美精品自拍视频| 亚洲欧美国产高清| 蜜臀av无码一区二区三区| 成人免费三级在线| 欧美激情亚洲自拍| 国产xxxxxxxxx| 久久精品系列| 欧美乱妇40p| 精品人伦一区二区| 国产欧美日韩在线看| 99蜜桃在线观看免费视频网站| 东京热加勒比无码少妇| 瑟瑟视频在线免费观看| 91精品国产全国免费观看| 国产欧美日韩网站| 成人av网站大全| 欧美精品一区在线播放| 精品人妻在线视频| 亚洲黄色性网站| 国产免费毛卡片| 国产男女裸体做爰爽爽| 黑人巨大精品欧美一区免费视频| 色综合av综合无码综合网站| 美女精品在线 | 最新av电影网站| 国产欧美va欧美不卡在线| 91亚洲午夜在线| 国产男女猛烈无遮挡| 久久久精品一区二区三区| 免费极品av一视觉盛宴| 亚洲AV午夜精品| 亚洲免费一在线| 成年人看片网站| 国产亚洲精品7777| 韩国精品一区二区三区六区色诱| 99精品视频免费看| 欧美高清自拍一区| 国产视频91在线| 日韩经典中文字幕| av手机在线播放| 亚洲免费一在线| 久久久综合久久久| 亚洲自拍av在线| 欧美国产日产图区| 国精产品视频一二二区| 久久久久久久久久国产| 波多野结衣亚洲一区| 久久精品久久精品国产大片| 亚洲精品人妻无码| 97碰碰碰免费色视频| 亚洲波多野结衣| 亚洲精品视频播放| 久久久久99精品成人| 精品日韩欧美一区二区| 日韩手机在线观看| 欧美另类第一页| 老司机福利在线观看| 精品久久久久久久中文字幕| 精品无码国模私拍视频| 91视频精品在这里| 亚洲精品乱码视频| 国产91精品露脸国语对白| 99re在线观看| 成人高清在线视频| 久久久久久久久久一区二区| 欧美日韩免费在线| 自拍偷拍视频在线| 精品女厕一区二区三区| 久久日免费视频| 日韩免费在线免费观看| 中文字幕乱码久久午夜不卡| 日韩精品无码一区二区三区久久久| 国产精品久久久999| 欧美日韩一区二区免费在线观看| 国产又大又黄又粗| 国产欧美一区二区视频| 欧美浪妇xxxx高跟鞋交| 国产69精品久久久久久久久久 | 日本精品久久电影| 中文字幕一区二区三区四区欧美| 91成人在线看| 国产亚洲欧洲997久久综合| 青青草原网站在线观看| 亚洲在线观看免费视频| 日本三级日本三级日本三级极| 亚洲成人免费网站| 久久精品无码av| 黑人巨大精品欧美一区二区小视频 | 91久久国产精品| 亚洲日本在线a| 国产午夜福利片| 国产精品伊人日日| 日韩电影在线看|