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

教你使用TensorFlow2對阿拉伯語手寫字符數據集進行識別

人工智能 深度學習 前端
在本教程中,我們將使用 TensorFlow (Keras API) 實現一個用于多分類任務的深度學習模型,該任務需要對阿拉伯語手寫字符數據集進行識別。

[[405478]]

在本教程中,我們將使用 TensorFlow (Keras API) 實現一個用于多分類任務的深度學習模型,該任務需要對阿拉伯語手寫字符數據集進行識別。

數據集下載地址:https://www.kaggle.com/mloey1/ahcd1

數據集介紹

該數據集由 60 名參與者書寫的16,800 個字符組成,年齡范圍在 19 至 40 歲之間,90% 的參與者是右手。

每個參與者在兩種形式上寫下每個字符(從“alef”到“yeh”)十次,如圖 7(a)和 7(b)所示。表格以 300 dpi 的分辨率掃描。使用 Matlab 2016a 自動分割每個塊以確定每個塊的坐標。該數據庫分為兩組:訓練集(每類 13,440 個字符到 480 個圖像)和測試集(每類 3,360 個字符到 120 個圖像)。數據標簽為1到28個類別。在這里,所有數據集都是CSV文件,表示圖像像素值及其相應標簽,并沒有提供對應的圖片數據。

導入模塊

  1. import numpy as np 
  2. import pandas as pd 
  3. #允許對dataframe使用display() 
  4. from IPython.display import display 
  5. # 導入讀取和處理圖像所需的庫 
  6. import csv 
  7. from PIL import Image 
  8. from scipy.ndimage import rotate 

讀取數據

  1. # 訓練數據images 
  2. letters_training_images_file_path = "../input/ahcd1/csvTrainImages 13440x1024.csv" 
  3. # 訓練數據labels 
  4. letters_training_labels_file_path = "../input/ahcd1/csvTrainLabel 13440x1.csv" 
  5. # 測試數據images和labels 
  6. letters_testing_images_file_path = "../input/ahcd1/csvTestImages 3360x1024.csv" 
  7. letters_testing_labels_file_path = "../input/ahcd1/csvTestLabel 3360x1.csv" 
  8.  
  9. # 加載數據 
  10. training_letters_images = pd.read_csv(letters_training_images_file_path, header=None) 
  11. training_letters_labels = pd.read_csv(letters_training_labels_file_path, header=None) 
  12. testing_letters_images = pd.read_csv(letters_testing_images_file_path, header=None) 
  13. testing_letters_labels = pd.read_csv(letters_testing_labels_file_path, header=None) 
  14.  
  15. print("%d個32x32像素的訓練阿拉伯字母圖像。" %training_letters_images.shape[0]) 
  16. print("%d個32x32像素的測試阿拉伯字母圖像。" %testing_letters_images.shape[0]) 
  17. training_letters_images.head() 

13440個32x32像素的訓練阿拉伯字母圖像。3360個32x32像素的測試阿拉伯字母圖像。

查看訓練數據的head

 

  1. np.unique(training_letters_labels) 
  2. array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], dtype=int32) 

下面需要將csv值轉換為圖像,我們希望展示對應圖像的像素值圖像。

  1. def convert_values_to_image(image_values, display=False): 
  2.     image_array = np.asarray(image_values) 
  3.     image_array = image_array.reshape(32,32).astype('uint8'
  4.     # 原始數據集被反射,因此我們將使用np.flip翻轉它,然后通過rotate旋轉,以獲得更好的圖像。 
  5.     image_array = np.flip(image_array, 0) 
  6.     image_array = rotate(image_array, -90) 
  7.     new_image = Image.fromarray(image_array) 
  8.     if display == True
  9.         new_image.show() 
  10.     return new_image 
  11. convert_values_to_image(training_letters_images.loc[0], True

 這是一個字母f。

下面,我們將進行數據預處理,主要進行圖像標準化,我們通過將圖像中的每個像素除以255來重新縮放圖像,標準化到[0,1]

  1. training_letters_images_scaled = training_letters_images.values.astype('float32')/255 
  2. training_letters_labels = training_letters_labels.values.astype('int32'
  3. testing_letters_images_scaled = testing_letters_images.values.astype('float32')/255 
  4. testing_letters_labels = testing_letters_labels.values.astype('int32'
  5. print("Training images of letters after scaling"
  6. print(training_letters_images_scaled.shape) 
  7. training_letters_images_scaled[0:5] 

輸出如下

  1. Training images of letters after scaling 
  2. (13440, 1024) 

從標簽csv文件我們可以看到,這是一個多類分類問題。下一步需要進行分類標簽編碼,建議將類別向量轉換為矩陣類型。

輸出形式如下:將1到28,變成0到27類別。從“alef”到“yeh”的字母有0到27的分類號。to_categorical就是將類別向量轉換為二進制(只有0和1)的矩陣類型表示

在這里,我們將使用keras的一個熱編碼對這些類別值進行編碼。

一個熱編碼將整數轉換為二進制矩陣,其中數組僅包含一個“1”,其余元素為“0”。

  1. from keras.utils import to_categorical 
  2.  
  3. # one hot encoding 
  4. number_of_classes = 28 
  5.  
  6. training_letters_labels_encoded = to_categorical(training_letters_labels-1, num_classes=number_of_classes) 
  7. testing_letters_labels_encoded = to_categorical(testing_letters_labels-1, num_classes=number_of_classes) 

 

  1. # (13440, 1024) 

下面將輸入圖像重塑為32x32x1,因為當使用TensorFlow作為后端時,Keras CNN需要一個4D數組作為輸入,并帶有形狀(nb_samples、行、列、通道)

其中 nb_samples對應于圖像(或樣本)的總數,而行、列和通道分別對應于每個圖像的行、列和通道的數量。

  1. # reshape input letter images to 32x32x1 
  2. training_letters_images_scaled = training_letters_images_scaled.reshape([-1, 32, 32, 1]) 
  3. testing_letters_images_scaled = testing_letters_images_scaled.reshape([-1, 32, 32, 1]) 
  4.  
  5. print(training_letters_images_scaled.shape, training_letters_labels_encoded.shape, testing_letters_images_scaled.shape, testing_letters_labels_encoded.shape) 
  6. # (13440, 32, 32, 1) (13440, 28) (3360, 32, 32, 1) (3360, 28) 

因此,我們將把輸入圖像重塑成4D張量形狀(nb_samples,32,32,1),因為我們圖像是32x32像素的灰度圖像。

  1. #將輸入字母圖像重塑為32x32x1 
  2. training_letters_images_scaled = training_letters_images_scaled.reshape([-1, 32, 32, 1]) 
  3. testing_letters_images_scaled = testing_letters_images_scaled.reshape([-1, 32, 32, 1]) 
  4.  
  5. print(training_letters_images_scaled.shape, training_letters_labels_encoded.shape, testing_letters_images_scaled.shape, testing_letters_labels_encoded.shape) 

設計模型結構

  1. from keras.models import Sequential 
  2. from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D, BatchNormalization, Dropout, Dense 
  3.  
  4. def create_model(optimizer='adam', kernel_initializer='he_normal', activation='relu'): 
  5.     # create model 
  6.     model = Sequential() 
  7.     model.add(Conv2D(filters=16, kernel_size=3, padding='same', input_shape=(32, 32, 1), kernel_initializer=kernel_initializer, activation=activation)) 
  8.     model.add(BatchNormalization()) 
  9.     model.add(MaxPooling2D(pool_size=2)) 
  10.     model.add(Dropout(0.2)) 
  11.  
  12.     model.add(Conv2D(filters=32, kernel_size=3, padding='same', kernel_initializer=kernel_initializer, activation=activation)) 
  13.     model.add(BatchNormalization()) 
  14.     model.add(MaxPooling2D(pool_size=2)) 
  15.     model.add(Dropout(0.2)) 
  16.  
  17.     model.add(Conv2D(filters=64, kernel_size=3, padding='same', kernel_initializer=kernel_initializer, activation=activation)) 
  18.     model.add(BatchNormalization()) 
  19.     model.add(MaxPooling2D(pool_size=2)) 
  20.     model.add(Dropout(0.2)) 
  21.  
  22.     model.add(Conv2D(filters=128, kernel_size=3, padding='same', kernel_initializer=kernel_initializer, activation=activation)) 
  23.     model.add(BatchNormalization()) 
  24.     model.add(MaxPooling2D(pool_size=2)) 
  25.     model.add(Dropout(0.2)) 
  26.     model.add(GlobalAveragePooling2D()) 
  27.  
  28.     #Fully connected final layer 
  29.     model.add(Dense(28, activation='softmax')) 
  30.  
  31.     # Compile model 
  32.     model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer=optimizer) 
  33.     return model 

「模型結構」

  • 第一隱藏層是卷積層。該層有16個特征圖,大小為3×3和一個激活函數,它是relu。這是輸入層,需要具有上述結構的圖像。
  • 第二層是批量標準化層,它解決了特征分布在訓練和測試數據中的變化,BN層添加在激活函數前,對輸入激活函數的輸入進行歸一化。這樣解決了輸入數據發生偏移和增大的影響。
  • 第三層是MaxPooling層。最大池層用于對輸入進行下采樣,使模型能夠對特征進行假設,從而減少過擬合。它還減少了參數的學習次數,減少了訓練時間。
  • 下一層是使用dropout的正則化層。它被配置為隨機排除層中20%的神經元,以減少過度擬合。
  • 另一個隱藏層包含32個要素,大小為3×3和relu激活功能,從圖像中捕捉更多特征。
  • 其他隱藏層包含64和128個要素,大小為3×3和一個relu激活功能,
  • 重復三次卷積層、MaxPooling、批處理規范化、正則化和* GlobalAveragePooling2D層。
  • 最后一層是具有(輸出類數)的輸出層,它使用softmax激活函數,因為我們有多個類。每個神經元將給出該類的概率。
  • 使用分類交叉熵作為損失函數,因為它是一個多類分類問題。使用精確度作為衡量標準來提高神經網絡的性能。
  1. model = create_model(optimizer='Adam', kernel_initializer='uniform', activation='relu'
  2. model.summary() 

 

「Keras支持在Keras.utils.vis_utils模塊中繪制模型,該模塊提供了使用graphviz繪制Keras模型的實用函數」

  1. import pydot 
  2. from keras.utils import plot_model 
  3.  
  4. plot_model(model, to_file="model.png", show_shapes=True
  5. from IPython.display import Image as IPythonImage 
  6. display(IPythonImage('model.png')) 

 

訓練模型,使用batch_size=20來訓練模型,對模型進行15個epochs階段的訓練。

  1. from keras.callbacks import ModelCheckpoint   
  2.  
  3. # 使用檢查點來保存稍后使用的模型權重。 
  4. checkpointer = ModelCheckpoint(filepath='weights.hdf5', verbose=1, save_best_only=True
  5. history = model.fit(training_letters_images_scaled, training_letters_labels_encoded,validation_data=(testing_letters_images_scaled,testing_letters_labels_encoded),epochs=15, batch_size=20, verbose=1, callbacks=[checkpointer]) 

訓練結果如下所示:

最后Epochs繪制損耗和精度曲線。

  1. import matplotlib.pyplot as plt 
  2.  
  3. def plot_loss_accuracy(history): 
  4.     # Loss  
  5.     plt.figure(figsize=[8,6]) 
  6.     plt.plot(history.history['loss'],'r',linewidth=3.0) 
  7.     plt.plot(history.history['val_loss'],'b',linewidth=3.0) 
  8.     plt.legend(['Training loss''Validation Loss'],fontsize=18) 
  9.     plt.xlabel('Epochs ',fontsize=16) 
  10.     plt.ylabel('Loss',fontsize=16) 
  11.     plt.title('Loss Curves',fontsize=16) 
  12.  
  13.     # Accuracy  
  14.     plt.figure(figsize=[8,6]) 
  15.     plt.plot(history.history['accuracy'],'r',linewidth=3.0) 
  16.     plt.plot(history.history['val_accuracy'],'b',linewidth=3.0) 
  17.     plt.legend(['Training Accuracy''Validation Accuracy'],fontsize=18) 
  18.     plt.xlabel('Epochs ',fontsize=16) 
  19.     plt.ylabel('Accuracy',fontsize=16) 
  20.     plt.title('Accuracy Curves',fontsize=16)  
  21.  
  22. plot_loss_accuracy(history) 

 

「加載具有最佳驗證損失的模型」

  1. # 加載具有最佳驗證損失的模型 
  2. model.load_weights('weights.hdf5'
  3. metrics = model.evaluate(testing_letters_images_scaled, testing_letters_labels_encoded, verbose=1) 
  4. print("Test Accuracy: {}".format(metrics[1])) 
  5. print("Test Loss: {}".format(metrics[0])) 

輸出如下:

  1. 3360/3360 [==============================] - 0s 87us/step 
  2. Test Accuracy: 0.9678571224212646 
  3. Test Loss: 0.11759862171020359 

打印混淆矩陣。

  1. from sklearn.metrics import classification_report 
  2.  
  3. def get_predicted_classes(model, data, labels=None): 
  4.     image_predictions = model.predict(data) 
  5.     predicted_classes = np.argmax(image_predictions, axis=1) 
  6.     true_classes = np.argmax(labels, axis=1) 
  7.     return predicted_classes, true_classes, image_predictions 
  8.  
  9. def get_classification_report(y_true, y_pred): 
  10.     print(classification_report(y_true, y_pred)) 
  11.  
  12.  
  13. y_pred, y_true, image_predictions = get_predicted_classes(model, testing_letters_images_scaled, testing_letters_labels_encoded) 
  14. get_classification_report(y_true, y_pred) 

輸出如下:

  1.           precision    recall  f1-score   support 
  2.  
  3.         0       1.00      0.98      0.99       120 
  4.         1       1.00      0.98      0.99       120 
  5.         2       0.80      0.98      0.88       120 
  6.         3       0.98      0.88      0.93       120 
  7.         4       0.99      0.97      0.98       120 
  8.         5       0.92      0.99      0.96       120 
  9.         6       0.94      0.97      0.95       120 
  10.         7       0.94      0.95      0.95       120 
  11.         8       0.96      0.88      0.92       120 
  12.         9       0.90      1.00      0.94       120 
  13.        10       0.94      0.90      0.92       120 
  14.        11       0.98      1.00      0.99       120 
  15.        12       0.99      0.98      0.99       120 
  16.        13       0.96      0.97      0.97       120 
  17.        14       1.00      0.93      0.97       120 
  18.        15       0.94      0.99      0.97       120 
  19.        16       1.00      0.93      0.96       120 
  20.        17       0.97      0.97      0.97       120 
  21.        18       1.00      0.93      0.96       120 
  22.        19       0.92      0.95      0.93       120 
  23.        20       0.97      0.93      0.94       120 
  24.        21       0.99      0.96      0.97       120 
  25.        22       0.99      0.98      0.99       120 
  26.        23       0.98      0.99      0.99       120 
  27.        24       0.95      0.88      0.91       120 
  28.        25       0.94      0.98      0.96       120 
  29.        26       0.95      0.97      0.96       120 
  30.        27       0.98      0.99      0.99       120 
  31.  
  32.  accuracy                           0.96      3360 
  33. macro avg       0.96      0.96      0.96      3360 
  34. ghted avg       0.96      0.96      0.96      3360 

最后繪制隨機幾個相關預測的圖片

  1. indices = np.random.randint(0, testing_letters_labels.shape[0], size=49) 
  2. y_pred = np.argmax(model.predict(training_letters_images_scaled), axis=1) 
  3.  
  4. for i, idx in enumerate(indices): 
  5.     plt.subplot(7,7,i+1) 
  6.          
  7.     image_array = training_letters_images_scaled[idx][:,:,0] 
  8.     image_array = np.flip(image_array, 0) 
  9.     image_array = rotate(image_array, -90) 
  10.         
  11.     plt.imshow(image_array, cmap='gray'
  12.     plt.title("Pred: {} - Label: {}".format(y_pred[idx], (training_letters_labels[idx] -1))) 
  13.     plt.xticks([]) 
  14.     plt.yticks([]) 
  15. plt.show() 

 

責任編輯:姜華 來源: Python之王
相關推薦

2021-06-16 06:58:09

TensorFlow識別驗證碼

2013-07-31 09:22:14

Windows 8.1ISO鏡像

2025-10-17 10:55:45

2013-06-24 15:58:19

Windows 8.1Windows 8.1

2021-06-11 05:37:20

TensorFlow2深度學習Keras API

2011-08-24 10:18:28

charsets中文man

2023-09-01 08:53:01

Windows 11微軟

2021-11-04 23:17:50

人工智能自然語言技術

2022-06-06 12:28:58

虛擬現實技術VR機器人

2021-04-05 14:29:36

沙特阿拉伯5G網絡

2013-01-22 10:40:24

數據中心綜合布線

2014-06-30 15:40:38

數字天堂沙特阿拉伯Mobily

2012-06-01 09:48:37

2015-09-15 11:34:44

全線解決方案阿拉伯國家博覽會華為

2020-03-27 20:22:53

數據集裝箱網絡

2015-05-26 09:44:37

2021-11-15 05:35:31

黑客網絡安全網絡攻擊

2014-05-14 09:34:17

移動游戲

2024-12-03 09:59:00

2011-12-18 21:33:46

iPhone 4S
點贊
收藏

51CTO技術棧公眾號

理论片在线不卡免费观看| 色偷偷久久人人79超碰人人澡| 91精品国产综合久久男男 | 青青精品视频播放| a一级免费视频| 欧美视频精品全部免费观看| 一区二区三区在线看| 久久99精品国产一区二区三区| 中文字幕永久在线| 午夜久久一区| 国产一区二区日韩精品欧美精品| 成人av毛片在线观看| 高清在线视频不卡| 成人欧美一区二区三区白人 | 欧美亚洲视频一区二区| 999福利视频| 国产精品调教| 51精品视频一区二区三区| aa在线观看视频| 日本在线视频站| 97精品国产97久久久久久久久久久久| 91精品国产综合久久香蕉| 国产 欧美 日韩 在线| 日本中文字幕伦在线观看| 午夜伦理福利在线| 国产精品久久久久久久久免费丝袜| av资源站久久亚洲| 一级片免费观看视频| 亚洲一区二区伦理| 欧美高跟鞋交xxxxhd| 五月天婷婷丁香网| 美女亚洲一区| 亚洲第一中文字幕在线观看| 一级做a免费视频| 亚洲精品在线影院| 欧美性猛交xxxxx免费看| 国产一级不卡视频| 91亚洲天堂| 中文字幕一区二区三区av| 久久国产精品一区二区三区| 亚洲AV无码一区二区三区少妇| 蜜桃久久av一区| 日韩暖暖在线视频| 老熟妇仑乱一区二区av| 国产精品婷婷| 亚洲h动漫在线| 精品少妇一区二区30p| 日本一区二区三区网站| 成人性生交大片免费看96| 欧美精品1区2区3区| 亚洲精品怡红院| 希岛爱理一区二区三区av高清| 精品成人av一区| 久久久久久久中文| 国产欧洲在线| 黄色成人av网| 九色在线视频观看| 筱崎爱全乳无删减在线观看| 黄色成人在线免费| 国产主播在线看| 欧美日韩大片| 欧美三级日韩在线| 91pony九色| 国产精品一区三区在线观看| 欧美一级精品在线| 秘密基地免费观看完整版中文 | 久久精品导航| 日韩美女激情视频| 中文字幕日韩经典| 狠狠久久亚洲欧美| 成人做爰66片免费看网站| 亚洲一区二区不卡视频| 日韩xxx视频| 蜜桃久久av一区| 91九色蝌蚪嫩草| 亚洲精品国产片| 成人爱爱电影网址| 欧美激情第一页在线观看| 国产对白叫床清晰在线播放| 国产精品拍天天在线| 国产av第一区| 黄色激情在线播放| 欧美在线免费观看亚洲| aaa一级黄色片| 国产伦精品一区二区三区免费优势| 亚洲国内精品视频| 受虐m奴xxx在线观看| 日本一本不卡| 久久久久久久久久久免费| 亚洲永久精品在线观看| 久久精品二区亚洲w码| 91手机在线观看| 日本v片在线免费观看| 中文字幕在线观看不卡视频| 青青青在线观看视频| 第一av在线| 在线观看三级视频欧美| 1314成人网| 自拍偷拍一区| 欧美成人精品在线播放| 五月天激情四射| 国产精品乡下勾搭老头1| 欧美日产一区二区三区在线观看| www在线免费观看| 亚洲国产精品久久久久秋霞影院| 欧美两根一起进3p做受视频| 玖玖精品一区| 亚洲丝袜av一区| 欧美成人精品激情在线视频| 久久一区亚洲| 国产亚洲欧美另类一区二区三区| 超碰国产在线| 欧美性xxxx极品hd满灌| 奇米777在线| 日本一区二区三区视频| 91福利视频网| 亚洲av无码国产精品久久不卡| 久久久不卡影院| 婷婷无套内射影院| 久久久久亚洲精品中文字幕| 中文亚洲视频在线| 国产精品一区无码| 成av人片一区二区| 路边理发店露脸熟妇泻火| 亚洲成av在线| 亚洲精品日韩丝袜精品| 国产亚洲色婷婷久久99精品| 老汉av免费一区二区三区| 久久久久免费网| xxx性欧美| 欧美tk—视频vk| www日韩在线| 久久精品国产成人一区二区三区| 久久福利电影| av剧情在线观看| 日韩欧美一区在线| 91视频青青草| 极品美女销魂一区二区三区免费| 色女人综合av| 韩国成人在线| 国产一区二区三区在线播放免费观看 | 国产日本一区二区| 日韩黄色片视频| 色先锋久久影院av| 欧美一级免费看| 三级做a全过程在线观看| 午夜亚洲国产au精品一区二区| 韩国三级在线看| 欧美日韩网站| 亚洲淫片在线视频| 精精国产xxxx视频在线中文版 | 国产美女久久精品| 丁香在线视频| 欧美日韩一区中文字幕| аⅴ天堂中文在线网| 日本亚洲欧美天堂免费| 神马影院一区二区| 男女啪啪999亚洲精品| 日韩在线高清视频| 国产精品一区二区人人爽| 亚洲三级在线看| 国产精品19p| 亚洲精选在线| 日本欧美精品久久久| 成人网ww555视频免费看| 日韩在线免费av| 99久久久国产精品无码免费| 亚洲自拍偷拍网站| 99久久人妻无码中文字幕系列| 午夜在线精品| 日韩在线导航| 精品国产乱码久久久久久樱花| 不卡中文字幕av| 欧美视频一二区| 在线亚洲一区二区| 看免费黄色录像| a级高清视频欧美日韩| 国产男女无遮挡| 国产精品麻豆久久| 国产高清一区视频| 中文字幕21页在线看| 中文字幕亚洲综合久久筱田步美| 国产男男gay体育生网站| 亚洲成人一区二区在线观看| 久久亚洲AV无码专区成人国产| 麻豆视频一区二区| 隔壁人妻偷人bd中字| 国产成人高清| 97欧洲一区二区精品免费| 欧美xxxhd| 不卡毛片在线看| 欧美欧美欧美| 欧美一卡二卡在线| 久久精品无码av| 亚洲男人的天堂一区二区| 香蕉视频黄色在线观看| 久久99精品久久久| 成熟了的熟妇毛茸茸| 国产精品久久观看| 久久精品久久精品国产大片| 日韩欧国产精品一区综合无码| 国模私拍一区二区三区| 77777影视视频在线观看| 欧美精品一区二区三区蜜桃| 少妇无套内谢久久久久| 亚洲国产中文字幕| 黄色录像免费观看| 久久影院视频免费| 91精品国产高清91久久久久久 | 国产精品中文字幕久久久| 国产网红女主播精品视频| 色爱精品视频一区| 视频二区在线| 精品国产免费人成电影在线观看四季 | 97人人模人人爽人人喊38tv| 亚洲四虎影院| 91av视频在线免费观看| 午夜dj在线观看高清视频完整版| 亚洲色无码播放| 无码国产伦一区二区三区视频| 91精品国产高清一区二区三区蜜臀| 午夜精品一区二| 午夜久久久影院| 久久久久香蕉视频| 日韩理论在线观看| 成人免费视频入口| 国产日产欧美精品一区二区三区| 在线精品一区二区三区| 国产成人精品影院| 两女双腿交缠激烈磨豆腐| 麻豆免费看一区二区三区| 能看的毛片网站| 性娇小13――14欧美| 日本丰满少妇xxxx| 亚洲国产婷婷| 精品无码一区二区三区爱欲| 亚洲高清资源在线观看| 人人妻人人澡人人爽精品欧美一区| jiujiure精品视频播放| 日本一区二区不卡高清更新| 一区二区导航| 欧洲成人一区二区| 久久不卡国产精品一区二区| 久久久久天天天天| 国产精品美女久久久久久不卡| 精品亚洲一区二区三区四区五区高| 超碰cao国产精品一区二区| 97se视频在线观看| 中文字幕一区图| 不卡一区二区三区四区五区| 91精品日本| 国产在线精品日韩| 性欧美lx╳lx╳| 欧美成ee人免费视频| 亚洲专区视频| 日韩电影天堂视频一区二区| 日韩av有码| 天天综合中文字幕| 综合av在线| 日韩av高清在线看片| 在线视频亚洲| 激情五月亚洲色图| 精品在线观看免费| 国产精品日日摸夜夜爽| 成人福利视频在线看| 黄色a一级视频| 国产三级一区二区| 国产第一页浮力| 亚洲一二三级电影| 91在线视频在线观看| 欧美性感一类影片在线播放| 亚洲一区二区天堂| 日韩欧美区一区二| 日本五码在线| 中文字幕一区二区精品| 七七成人影院| 日韩av不卡电影| 动漫一区二区三区| 国内一区二区在线视频观看| 一本久久青青| 中国一级黄色录像| 亚洲永久视频| 国产精品视频中文字幕| 不卡的av中国片| 自拍偷拍你懂的| 亚洲一区二区三区四区不卡| 久久精品视频7| 日韩网站在线看片你懂的| 三级视频在线看| 在线观看国产精品日韩av| 亚洲电影视频在线| 欧美亚洲一区在线| 国产亚洲久久| 日韩高清三级| 亚洲激情网址| 亚洲一区二区三区观看| av网站一区二区三区| 成人精品一二三区| 精品国产乱码久久久久久天美 | 国产在线视频99| 欧美日韩亚洲高清一区二区| 日本美女一级视频| 麻豆成人在线看| 久久亚洲精品爱爱| 久久riav二区三区| 牛夜精品久久久久久久99黑人| 日韩a在线播放| 国产91丝袜在线播放| 奇米网一区二区| 日韩欧美在线第一页| 丰满人妻一区二区三区四区53| 在线观看欧美www| 欧美少妇网站| 国产伦精品一区二区三区高清版 | 18岁网站在线观看| 国产福利一区二区三区视频在线| 免费黄在线观看| 一本色道久久综合亚洲精品按摩| 亚洲精品911| 理论片在线不卡免费观看| 国产成人福利夜色影视| 欧美极品一区| 国产精品亚洲综合色区韩国| 香蕉久久久久久av成人| 亚洲色图视频网站| 91极品身材尤物theporn| 亚洲性生活视频| 伊人久久综合一区二区| 久久www免费人成精品| 99国产精品久久久久久久 | 久久精品人人做人人综合 | 国产精品亚洲综合| 中文字幕日韩欧美精品高清在线| 国产原创精品在线| 中国av一区二区三区| 一级黄色在线观看| 亚洲图片在区色| 国产 日韩 欧美一区| 欧美日韩在线一区二区三区| 日韩午夜免费视频| 黄色免费视频网站| 亚洲高清视频中文字幕| 国产成人手机在线| 国内精品视频久久| 欧美精品中文| 亚洲国产精品久久久久婷蜜芽| 不卡大黄网站免费看| 日韩成人在线免费视频| 精品国内片67194| 国产极品在线观看| 开心色怡人综合网站| 久久av在线| 中字幕一区二区三区乱码 | 黄色av网址在线| 国外成人在线视频| 亚洲精品中文字幕99999| 精品国产成人av在线免| 国产欧美一区二区精品久导航 | 爱啪视频在线观看视频免费| 国产私拍一区| 天堂成人国产精品一区| 国产一区二区三区四区在线| 欧美日韩精品二区第二页| 黄色片免费在线观看| 国产精品v欧美精品v日韩| 一区二区三区成人精品| 一区二区黄色片| 欧美女孩性生活视频| caopon在线免费视频| 韩国成人一区| 日本系列欧美系列| 国产极品国产极品| 欧美精品一区二区蜜臀亚洲| 久久人体大尺度| 五月天男人天堂| kk眼镜猥琐国模调教系列一区二区 | 国产欧美精品日韩精品| 中文无码久久精品| 香港三级日本三级| 欧美亚洲国产一区二区三区| 成人午夜在线影视| 精品久久蜜桃| 久久草av在线| 午夜影院在线看| 日韩一区二区久久久| 91九色鹿精品国产综合久久香蕉| 又粗又黑又大的吊av| 国产精品久久久久永久免费观看 | 国产成人精品片| 最新国产成人av网站网址麻豆| av在线成人| 成人羞羞国产免费网站| 日韩毛片一二三区| 欧美孕妇性xxxⅹ精品hd| 成人在线激情视频| 一区二区三区成人精品| 中文字幕五月天| 亚洲天堂男人天堂| 精品五月天堂| 色网站在线视频|