成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

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

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

一.開源神經(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ù)集劃分成訓練集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():
    # 保證隨機可復現(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))]
 
    # 建立保存訓練集的文件夾
    train_root = os.path.join(data_root, "train")
    mk_file(train_root)
    for cla in flower_class:
        # 建立每個類別對應的文件夾
        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:
        # 建立每個類別對應的文件夾
        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:
                # 將分配至驗證集中的文件復制到相應目錄
                image_path = os.path.join(cla_path, image)
                new_path = os.path.join(val_root, cla)
                copy(image_path, new_path)
            else:
                # 將分配至訓練集中的文件復制到相應目錄
                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.訓練神經(jīng)網(wǎng)絡(luò)

train.py

# 導入包
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訓練
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ù)預處理
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))])}
 
#導入、加載 訓練集
# 導入訓練集
#train_set = torchvision.datasets.CIFAR10(root='./data', 	 # 數(shù)據(jù)集存放目錄
#										 train=True,		 # 表示是數(shù)據(jù)集中的訓練集
#                                        download=True,  	 # 第一次運行時為True,下載數(shù)據(jù)集,下載完成后改為False
#                                        transform=transform) # 預處理過程
# 加載訓練集                              
#train_loader = torch.utils.data.DataLoader(train_set, 	  # 導入的訓練集
#										   batch_size=50, # 每批訓練的樣本數(shù)
#                                          shuffle=False,  # 是否打亂訓練集
#                                          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
 
# 導入訓練集并進行預處理
train_dataset = datasets.ImageFolder(root=image_path + "/train",		
                                     transform=data_transform["train"])
train_num = len(train_dataset)
 
# 按batch_size分批次加載訓練集
train_loader = torch.utils.data.DataLoader(train_dataset,	# 導入的訓練集
                                           batch_size=32, 	# 每批訓練的樣本數(shù)
                                           shuffle=True,	# 是否打亂訓練集
                                           num_workers=0)	# 使用線程數(shù),在windows下設(shè)置為0
 
#導入、加載 驗證集
# 導入驗證集并進行預處理
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,	# 導入的驗證集
                                              batch_size=32, 
                                              shuffle=True,
                                              num_workers=0)
 
# 存儲 索引:標簽 的字典
# 字典,類別:索引 {'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)
 
#訓練過程
net = AlexNet(num_classes=5, init_weights=True)  	  # 實例化網(wǎng)絡(luò)(輸出類型為5,初始化權(quán)重)
net.to(device)									 	  # 分配網(wǎng)絡(luò)到指定的設(shè)備(GPU/CPU)訓練
loss_function = nn.CrossEntropyLoss()			 	  # 交叉熵損失
optimizer = optim.Adam(net.parameters(), lr=0.0002)	  # 優(yōu)化器(訓練參數(shù),學習率)
 
save_path = './AlexNet.pth'
best_acc = 0.0
 
for epoch in range(150):
    ########################################## train ###############################################
    net.train()     					# 訓練過程中開啟 Dropout
    running_loss = 0.0					# 每個 epoch 都會對 running_loss  清零
    time_start = time.perf_counter()	# 對訓練一個 epoch 計時
    
    for step, data in enumerate(train_loader, start=0):  # 遍歷訓練集,step從0開始計算
        images, labels = data   # 獲取訓練集的圖像和標簽
        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()
        
        # 打印訓練進度(使訓練過程可視化)
        rate = (step + 1) / len(train_loader)           # 當前進度 = 當前step / 訓練一輪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中值最大位置對應的索引(標簽)作為預測輸出
            acc += (predict_y == val_labels.to(device)).sum().item()    
        val_accurate = acc / val_num
        
        # 保存準確率最高的那次網(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')

訓練結(jié)果后,準確率是94%

訓練日志如下:

4.對模型進行預測

predict.py

import torch

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

可以看到只有一個識別結(jié)果(daisy雛菊)和準確率1.0是100%(范圍是0~1,所以1對應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):
     # 預處理
    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__)  # 當前文件所在路徑
        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)
        ##########################
        #預測圖片
        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;">準確率:{{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深度學習之實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
  • python 使用Tensorflow訓練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機器學習之神經(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ò)訓練分類模型教程
  • python神經(jīng)網(wǎng)絡(luò)編程實現(xiàn)手寫數(shù)字識別
  • python實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)回歸預測模型

標簽:安慶 怒江 清遠 洛陽 長春 岳陽 泉州 吉林

巨人網(wǎng)絡(luò)通訊聲明:本文標題《用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)民參考!
  • 推薦文章
    91精品国产综合久久香蕉922| 亚洲精品99久久久久| 久久天天做天天爱综合色| 91精品国产综合久久久蜜臀图片| 香蕉精品视频在线| 五月天色婷婷丁香| 韩国v欧美v日本v亚洲v| 日本高清在线观看视频| 免费看的av网站| 亚洲欧美日韩久久精品| 91精品国产综合久久香蕉的用户体验| 久久成人免费电影| 这里只有精品电影| 日本中文字幕精品—区二区| 精品久久久久久中文字幕| 欧美午夜精品一区二区三区| 欧美日韩第一视频| 99久久久国产精品美女| 午夜亚洲激情| 裸体网站视频| 韩国成人在线视频| 久久视频中文字幕| 最新国产在线拍揄自揄视频| 久久99精品国产麻豆婷婷| 在线不卡视频| 最近2019免费中文字幕视频三| 欧美精品videossex变态| 污网站在线免费| 99蜜桃臀久久久欧美精品网站| 26uuu国产在线精品一区二区| 天堂av2020| 中文字幕一区二区av| xxxx成人| 久久精品黄色片| 国内精品**久久毛片app| 精品成人在线视频| 在线观看免费视频一区二区三区| 日本在线免费中文字幕| 成人免费毛片视频| 欧美小视频在线观看| 欧美在线视频a| 亚洲AV第二区国产精品| 国产精品夜夜夜| 男操女免费网站| 粉嫩av国产一区二区三区| 国产在线观看一区二区三区| 国产网红女主播精品视频| 亚洲天堂中文字幕在线| 久久国产高清视频| 激情五月色婷婷| 97超碰在线免费观看| 青青在线观看视频中文字| 亚洲天堂视频网站| 久久av一区二区| 老司机亚洲精品| 国精品无码一区二区三区| 成人免费网站观看| www.夜夜操| 九九久久国产精品| 男人资源网站| 国产偷人妻精品一区| a一级免费视频| 国产xxxx视频| 综合自拍亚洲综合图不卡区| 性欧美ⅴideo另类hd| 欧美色视频在线观看| 久青草国产97香蕉在线视频| 日韩精品第二页| 色婷婷av国产精品| 国产chinese男男gaygay网站| 色婷婷综合缴情免费观看| 真实国产乱子伦精品一区二区三区| 日韩在线视频导航| 久久婷五月综合| 亚洲一区制服诱惑| 欧美日韩国产一区二区| 91精品国产91久久久久久三级| 日本在线不卡一区二区| 可以直接看的av网址站| 在线播放日韩| 日韩中文字幕久久| 亚洲熟妇无码一区二区三区导航| 国产成人精品999在线观看| 波多野结衣av在线| 国产一区二区三区香蕉| 美女日韩欧美| 在线一区免费| 色偷偷9999www| 特黄特色大片免费视频大全| 久久手机在线视频| 国产日本欧美一区二区三区在线| 91成人免费视频| 精品69视频一区二区三区| 欧美一区二区三区成人片在线| 一夜七次郎国产精品亚洲| 91在线视频免费看| 精品国产av无码一区二区三区| av中文字幕第一页| 亚洲欧美激情一区二区| 91视频你懂的| 国产普通话bbwbbwbbw| 视频一区视频二区国产精品| 久久中文免费视频| 日韩三级视频在线观看| 国产精品suv一区二区88| 凹凸成人精品亚洲精品密奴| 亚洲一二区在线| 欧美成人ⅴideosxxxxx| 国产精品18久久久久| 天天干天天草天天| 精品久久ai| 欧美精品第一页在线播放| 视频一区二区在线| 欧美日韩伦理在线免费| 精品人妻伦一二三区久久| 欧美猛男做受videos| 国产69久久精品成人看| 最新国产精品拍自在线播放| 免费无码国产精品| 久久品道一品道久久精品| 欧美精品免费视频| 中文字幕av一区二区三区免费看| 欧美日韩一区二区综合| 亚洲国产精品无码久久| 精品少妇一区二区三区在线播放| 欧美亚韩一区二区三区| 久久久精品高清| 国产综合色一区二区三区| 日本精品久久久久久久| 免费看精品久久片| 蜜臀91精品国产高清在线观看| 91吃瓜网在线观看| 亚洲成人精品综合在线| 正在播放木下凛凛xv99| 久久99这里只有精品| 加勒比海盗1在线观看免费国语版| 国模精品系列视频| youjizz国产精品| 久草网在线观看| 伊人久久亚洲热| 欧美一级黑人aaaaaaa做受| 国产成人精品久久二区二区| 欧美性生交大片免网| 日本少妇激三级做爰在线| 色综合久久久888| 99蜜桃在线观看免费视频网站| 欧美系列在线观看| 欧美日本国产精品| 国产在线视频一区| 国产伦精品一区二区三区| 蜜臀久久99精品久久一区二区| 国产精品一二三四区| 爱啪导航一精品导航站| 日韩欧美精品中文字幕| 亚洲国产精品久久久久久6q| 国产精品一区二区无线| 污污网站在线观看视频| h片在线观看视频免费| 中文字幕综合一区| 国产精品久久久久久久久久久久久久| 91福利精品在线观看| heyzo在线欧美播放| 日韩黄色在线免费观看| 日产精品久久久久久久| 精品国产综合区久久久久久| 最新中文字幕免费视频| 欧美日韩黄色一区二区| 免费人成在线观看网站| 校花撩起jk露出白色内裤国产精品| 免费cad大片在线观看| 亚洲精品乱码| 北条麻妃一区二区三区| 国产在线免费视频| 在线国产网址| 亚洲精品欧美| 中文精品无码中文字幕无码专区| 在线视频你懂得| 男人的天堂av网站| 久久中文字幕国产| 欧美狂猛xxxxx乱大交3| 欧美国产一区二区三区| 成人黄色在线观看| julia中文字幕一区二区99在线| 美国十次av导航亚洲入口| 91视频 -- 69xx| 动漫av在线免费观看| 亚洲美洲欧洲综合国产一区| 一本色道久久综合亚洲精品图片| 国产妇女馒头高清泬20p多| 国产精品一区免费观看| 亚洲视频一二区| 成人午夜精品无码区| 国产精品久久久久久福利| 欧美中文字幕第一页| 欧美日韩亚洲一二三| 国产视频在线观看一区| 日韩少妇中文字幕| 国产成人久久| 好看的av在线不卡观看| 欧美三级三级三级| 久久国产88| 91嫩草国产线观看亚洲一区二区| 2020av在线| 日韩一区二区三区四区视频| 欧美一区二区视频网站| 日韩在线观看电影完整版高清免费| 视频在线观看91| 艳色歌舞团一区二区三区| 国产精品久久久久久久久久久久| 国产资源在线视频| 欧美一级大片| 午夜精品一区二区三区在线视频| 欧美三级三级三级爽爽爽| 欧美亚洲日本在线观看| aaa免费在线观看| 欧美日韩亚洲91| 99国产在线播放| 伊人网综合视频| 五月婷婷色综合| 岛国在线视频免费看| 国产一级视频在线观看| 91精品国产综合久久久久久蜜臀| 国产一二三四区在线| 欧美 日韩 国产 高清| 欧美喷潮久久久xxxxx| xxxxx99| 欧美天堂亚洲电影院在线播放| 国产视频一二三四区| 国产91av视频在线观看| fc2在线中文字幕| 污污视频免费看| 8x8x8国产精品| 一本在线高清不卡dvd| 忘忧草在线影院两性视频| 综合一区在线| koreanbj精品视频一区| 精品一区二区三区不卡| 国产九色精品成人porny| 成人在线免费观看视频| 中文字幕日韩在线播放| 涩爱av色老久久精品偷偷鲁| 琪琪第一精品导航| 合欧美一区二区三区| 国产精品99精品无码视亚| 在线综合亚洲| 中文字幕一区二区三区久久网站| 69国产精品视频免费观看| 美女露胸视频在线观看| 国产无套在线观看| 蜜桃av噜噜一区| 日本在线播放| 亚洲老板91色精品久久| 国产国语亲子伦亲子| 在线播放一级片| 色免费在线视频| 媚黑女一区二区| 国产日韩一区二区三区在线播放| 国产精品亲子乱子伦xxxx裸| 一区二区三区免费看| bl在线肉h视频大尺度| 日韩电影在线观看完整免费观看| 一区二区三区久久网| 国产天堂第一区| 精品香蕉一区二区三区| 色一色在线观看视频网站| 亚洲国产乱码最新视频| 亚洲美女av在线| 亚洲天堂视频在线观看| 中文字幕第一页在线视频| 欧美绝品在线观看成人午夜影视| 黑人玩欧美人三根一起进| 色戒汤唯在线| 国产精品日韩专区| 久久精品水蜜桃av综合天堂| 欧美激情精品在线| 国产91色在线| 在线看的网站你懂| 久久久久久久久久久av| 久久高清国产| 久久365资源| 亚洲图片欧美午夜| aaa人片在线| 超碰91在线| 在线观看中文字幕的网站| 色爱区成人综合网| 日韩高清av电影| a屁视频一区二区三区四区| 在线免费观看一级片| 国产精品视频无码| 欧美色道久久88综合亚洲精品| www..com.cn蕾丝视频在线观看免费版| 久久视频在线观看免费| 快播日韩欧美| 欧美污视频久久久| 超碰网在线观看| 国产91色综合久久免费分享| 最近2019年手机中文字幕| 亚洲国产图片| 刘亦菲毛片一区二区三区| 欧美日韩久久| 99re这里只有| 国产成人综合亚洲网站| 四虎精品成人免费观看| 成年人在线免费观看视频网站| 天天爽夜夜爽人人爽| 国产视频亚洲视频| 天天干天天插天天射| 三上悠亚影音先锋| 四虎成人精品永久免费av九九| 中文字幕乱码视频| 日韩精品一二三| 一区二区三区在线视频播放| 欧美午夜免费影院| 久久精品久久精品亚洲人| 免费看男女www网站入口在线| 亚洲 欧美 中文字幕| 久久成人精品电影| 亚洲国产天堂久久国产91| 亚洲欧洲日产国码二区| 国产精品网站在线观看| 亚洲精品不卡在线观看| 国产一区二区黑人欧美xxxx| 久久精品亚洲一区| 91日韩在线专区| 成人午夜福利视频| 亚洲综合久久久久| 国产精品视频久久久久| 92精品国产成人观看免费|