日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

AI应用开发实战(转)

發布時間:2025/3/8 ChatGpt 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AI应用开发实战(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

AI應用開發實戰 - 從零開始配置環境

與本篇配套的視頻教程請訪問:https://www.bilibili.com/video/av24421492/

建議和反饋,請發送到
https://github.com/Microsoft/vs-tools-for-ai/issues

聯系我們
OpenmindChina@microsoft.com

零、前提條件

  • 一臺能聯網的電腦,使用win10 64位操作系統
  • 請確保鼠標、鍵盤、顯示器都是好的

一、Windows下開發環境搭建

本教材主要參考了如下資源:

官方github教程:https://github.com/microsoft/vs-tools-for-ai

斗魚tv教程:https://v.douyu.com/show/V6Aw87OBmXZvYGkg

本教程分為五步:

  • 安裝VS:難度一星
  • 安裝python:難度一星
  • 安裝CUDA和cuDNN:這是本教程最繁瑣的一步,這一步直接拉高本教程的平均難度。
  • 配置機器學習環境:這是本教程最簡單的一步,為了方便用戶配置環境,微軟提供了一鍵安裝工具!沒錯,一鍵安裝工具!業界良心阿!
  • 安裝VS Tools For AI插件:難度一星

note:本教程對各個軟件需要使用的版本都做出了明確說明,請安裝指定的版本

請放輕松,接下來的傻瓜教程不需要動腦子,你甚至可以打開手機邊刷微博邊配置環境

0.安裝Git

訪問 https://git-scm.com/download/win

選擇64-bit Git for Windows Setup下載

雙擊.exe開始安裝

選擇好自己的安裝路徑,一路next,直到Adjusting your PATH environment

請選擇Use Git from the Windows Command Prompt

這一步就已經將Git添加到環境變量中了,然后就可以直接在命令行里使用Git啦。

然后繼續next,直到安裝結束

1.安裝VS

訪問 https://www.visualstudio.com/zh-hans/products/
在產品中點擊Visual Studio 2017

選擇Community版本下載

打開Visual Studio Installer進行如下的配置:

僅選擇.NET桌面開發與Python開發即可

僅選擇.NET桌面開發與Python開發即可

僅選擇.NET桌面開發與Python開發即可

note:請自行決定Visual Studio的安裝路徑

等待數分鐘,時長視網絡狀況而定,這個時候你可以去泡一杯茶,或者聽一首歌,如果你的網絡不是很好,那你可以去看集美劇或者別的什么,等待安裝結束。

note:坐 和 放寬

2.安裝python

注意!!!如果你已經安裝了VS2017帶Python開發的環境,就不需要再裝一遍python了。打開vs2017, 點擊Tools->Python->Python Environments,應該可以看到Python 3.6已經安裝,在下面有個folder,大概是“c:\Program Files(x86)\Microsoft Visual Studio\Shared\Python36_64”,把這個字符串copy下來。然后打開Settings->Home->About->System info,在彈出的窗口中選擇Advanced system settings->Advanced->Environment Variables->System variables->Path->Edit->New,把剛才的python環境變量字符串paste進來。如果有多個python環境,建議把一些舊的版本卸載先,保證你的機器沒有那么多垃圾。
點擊OK后,再打開一個command窗口,輸入Python,就可以正常使用了。

訪問 https://www.python.org/downloads/

選擇版本3.5.4或3.6.5?,Windows x86-64 executable installer下載。

打開安裝包,在安裝前,請選擇Add Python 3.X to PATH,隨后按照默認選項安裝即可。

點選后,程序將自動將Python加入環境變量,這樣避免在安裝后手動配置環境變量。

安裝結束后,請進行如下操作驗證python是否安裝成功

1.同時按下 win 與 R,在彈出的輸入框里輸入cmd 2.在彈出的窗口中輸入 python 3.輸入exit()退出 4.輸入python -m pip install -U pip以更新pip到最新版本

note: pip是一個用來管理python包的工具

自此,你已經完成了python的安裝,在朝著AI技術大牛的路上又前進了一步!

note:請伸出大拇指給自己一個贊?

3.安裝CUDA與cuDNN

如果你的電腦裝有Nvidia的顯卡,請進行這一步配置,否則請跳過。

首先通過操作系統更新,升級顯卡驅動到最新版。

3.1 安裝CUDA

打開 https://developer.nvidia.com/cuda-toolkit-archive

選擇CUDA 9.0 進行安裝。

點擊后,選擇如下的配置:

note:請選擇local版本下載,一旦失敗還可以重新再來;如果使用network版本,一旦失敗,需要重新下載1.4GB的安裝包

打開安裝包,進行安裝,請自行配置CUDA的安裝路徑,并手動將CUDA庫添加至PATH環境變量中。

note:在Windows中,CUDA的默認安裝路徑是:

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin"

3.2 安裝cuDNN

note:打起精神!這是操作最復雜的一步!

訪問 https://developer.nvidia.com/rdp/cudnn-archive 找到我們需要的cuDNN版本:

cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0

cuDNN v7.0.5 Library for Windows 10

點擊鏈接,等待著你的并不是文件下載,而是:

↑這就是本教程里最麻煩的一步:在下載cuDNN之前需要注冊Nvidia會員并驗證郵箱。不過還好可以微信登錄,省掉一些步驟。

一番令人窒息的操作之后,我們終于得到了cuDNN,我們把文件解壓,取出這個路徑的cudnn64_7.dll,復制到CUDA的bin目錄下即可。默認的地址是:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin

note:到這里,我們已經完成了本教程最復雜的一步了

4.安裝機器學習的軟件及依賴

這一步雖然是整個教程最簡單的一步,甚至比把大象關進冰箱更簡單。

你只需要:

win + R ,打開cmd,在命令行中輸入:cd c:\ //選擇一個你喜歡的路徑 md AI //在這里創建一個AI目錄 cd AI //打開這個目錄 //克隆倉庫到本地 git clone https://github.com/Microsoft/samples-for-ai.git cd samples-for-ai //打開這個目錄 cd installer //還有這個目錄 python.exe install.py //開始安裝

然后刷會微博,等待安裝結束即可。

成功之后是這樣的:

或者你覺得自己不怕麻煩,那么請訪問:https://github.com/Microsoft/vs-tools-for-ai/blob/master/docs/zh-hans/docs/prepare-localmachine.md

根據教程按步安裝,相信我,你會回來選擇一鍵安裝的。

note:就差一步啦!成功就在眼前!

5.安裝tools for ai插件

打開Visual Studio,選擇工具->擴展和更新->選擇“聯機”->搜索“AI”
就像這樣:

等待下載完成之后,關閉Visual Studio,沒錯,關閉Visual Studio,系統將自動安裝AI插件。

安裝完畢后再次打開Visual Studio,你將在界面上看到這樣的內容:

那么恭喜你!安裝成功!

note:千里之行始于足下,恭喜你成功地完成了環境的搭建,接下來就已經可以使用Visual Studio Tools For AI進行開發了?

二、離線模型的訓練


6.14日更新
GitHub上的samples-for-ai進行了一定的更新,目前MNIST文件夾下只有一個mnist.py文件,

下述步驟中,請使用最新的mnist.py文件


在進行完環境搭建后,我們馬上就可以開始訓練第一個模型了,我們選擇tensorflow下的MNIST作為第一個例子。

MNIST的介紹請參考這個鏈接 https://www.tensorflow.org/versions/r1.1/get_started/mnist/beginners

首先我們打開這個路徑:C:\AI\samples-for-ai\examples\tensorflow,如果你在別的目錄下克隆了目錄,那么請打開你對應的目錄。然后雙擊TensorflowExamples.sln
就像這樣:

note:如果存在多個Python環境,你需要為Visual Studio的AI項目設置默認的Python環境。

例如,手動安裝的Python 3.5與Visual Studio 2017 Python開發負載自動安裝了64位的Python 3.6

如果要為Visual Studio設置全局的默認Python環境,請打開工具->Python?->?Python環境。然后,選擇自己需要的Python版本,點擊將此作為新項目的默認環境。

然后在解決方案資源管理器中,選擇MNIST,單擊右鍵,選擇設為啟動項目

然后選擇MNIST中的mnist.py,單擊右鍵,選擇在不調試的情況下啟動

然后程序就開始運行了,就像這樣:

等待一段時間之后,模型就訓練好了!這個時候打開MNIST所在的文件夾,MNIST下是否多了三個文件夾?分別是input和output還有export,這三個文件夾分別存儲了訓練模型的輸入文件、訓練時的檢查點文件,還有最終導出的模型文件

檢查點文件:

模型文件:

可能存在的問題

GPU ran out of memory

方法一:
修改convolutional.py第45行或第47行的BATCH_SIZE或EVAL_BATCH_SIZE為一個更小的數字。具體修改哪一個,需要視你在程序運行的哪個部分得到了ERROR決定。

方法二:
不使用GPU訓練,在項目MNIST上單擊右鍵,選擇屬性(R)

修改環境變量為CUDA_VISIBLE_DEVICES=" "

?

AI應用開發實戰 - 手寫識別應用入門

手寫體識別的應用已經非常流行了,如輸入法,圖片中的文字識別等。但對于大多數開發人員來說,如何實現這樣的一個應用,還是會感覺無從下手。本文從簡單的MNIST訓練出來的模型開始,和大家一起入門手寫體識別。

在本教程結束后,會得到一個能用的AI應用,也許是你的第一個AI應用。雖然離實際使用還有較大的距離(具體差距在文章后面會分析),但會讓你對AI應用有一個初步的認識,有能力逐步搭建出能夠實際應用的模型。

建議和反饋,請發送到
https://github.com/Microsoft/vs-tools-for-ai/issues

聯系我們
OpenmindChina@microsoft.com

準備工作

  • 使用win10 64位操作系統的計算機
  • 參考上一篇博客AI應用開發實戰 - 從零開始配置環境。在電腦上訓練并導出MNIST模型。

一、 思路

通過上一篇文章搭建環境的介紹后,就能得到一個能識別單個手寫數字的模型了,并且識別的準確度會在98%,甚至99%以上了。那么我們要怎么使用這個模型來搭建應用呢?

大致的步驟如下:

  • 實現簡單的界面,將用戶用鼠標或者觸屏的輸入變成圖片。
  • 將生成的模型包裝起來,成為有公開數據接口的類。
  • 將輸入的圖片進行規范化,成為數據接口能夠使用的格式。
  • 最后通過模型來推理(inference)出圖片應該是哪個數字,并顯示出來。
  • 是不是很簡單?

    二、動手

    步驟一:獲取手寫的數字

    提問:那我們要怎么獲取手寫的數字呢?

    回答:我們可以寫一個簡單的WinForm畫圖程序,讓我們可以用鼠標手寫數字,然后把圖片保存下來。

    首先,我們打開Visual Studio,選擇文件->新建->項目。

    在彈出的窗口里選擇Visual C#->Windows窗體應用,項目名稱不妨叫做DrawDigit,解決方案名稱不妨叫做MnistForm,點擊確定。

    此時,Visual Studio也自動彈出了一個窗口的設計圖。

    在DrawDigit項目上點擊右鍵,選擇屬性,在生成一欄將平臺目標從Any CPU改為x64。

    否則,DrawDigit(首選32位)與它引用的MnistForm(64位)的編譯平臺不一致會引發System.BadImageFormatException的異常。

    然后我們對這個窗口做一些簡單的修改:

    首先我們打開VS窗口左側的工具箱,這個窗口程序需要以下三種組件:

  • PictureBox:用來手寫數字,并且把數字保存成圖片
  • Label:用來顯示模型的識別結果
  • Button:用來清理PictureBox的手寫結果
  • 那經過一些簡單的選擇與拖動還有調整大小,這個窗口現在是這樣的:

    一些注意事項

  • 這些組件都可以通過右鍵->查看屬性,在屬性里修改它們的設置
  • 為了方便把PictureBox里的圖片轉化成Mnist能識別的格式,PictureBox的需要是正方形
  • 可以給這些控件起上有意義的名稱。
  • 可以調整一下label控件大小、字體等,讓它更美觀。
  • 經過一些簡單的調整,這個窗口現在是這樣的:

    現在來讓我們愉快地給這些組件添加事件!

    還是在屬性窗口,我們選擇某個組件,右鍵->查看屬性,點擊閃電符號,給組件綁定對應的事件。每次綁定后,會跳到代碼部分,生成一個空函數。點回設計視圖繼續操作即可。

    組件類型事件
    pictureBox1在Mouse下雙擊MouseDown、MouseUp、MouseMove來生成對應的響應事件函數。
    button1如上,在Action下雙擊Click。
    Form1如上,在Behavior下雙擊Load。

    然后我們開始補全對應的函數體內容。

    注意,如果在上面改變了控件的名稱,下面的代碼需要做對應的更改。

    廢話少說上代碼!

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D;//用于優化繪制的結果 using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MnistModel; namespace DrawDigit { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Bitmap digitImage;//用來保存手寫數字 private Point startPoint;//用于繪制線段,作為線段的初始端點坐標 private Mnist model;//用于識別手寫數字 private const int MnistImageSize = 28;//Mnist模型所需的輸入圖片大小 private void Form1_Load(object sender, EventArgs e) { //當窗口加載時,繪制一個白色方框 model = new Mnist(); digitImage = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(digitImage); g.Clear(Color.White); pictureBox1.Image = digitImage; } private void clean_click(object sender, EventArgs e) { //當點擊清除時,重新繪制一個白色方框,同時清除label1顯示的文本 digitImage = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(digitImage); g.Clear(Color.White); pictureBox1.Image = digitImage; label1.Text = ""; } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { //當鼠標左鍵被按下時,設置isPainting為true,并記錄下需要繪制的線段的起始坐標 startPoint = (e.Button == MouseButtons.Left) ? e.Location : startPoint; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { //當鼠標在移動,且當前處于繪制狀態時,根據鼠標的實時位置與記錄的起始坐標繪制線段,同時更新需要繪制的線段的起始坐標 if (e.Button == MouseButtons.Left) { Graphics g = Graphics.FromImage(digitImage); Pen myPen = new Pen(Color.Black, 40); myPen.StartCap = LineCap.Round; myPen.EndCap = LineCap.Round; g.DrawLine(myPen,startPoint, e.Location); pictureBox1.Image = digitImage; g.Dispose(); startPoint = e.Location; } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { //當鼠標左鍵釋放時 //同時開始處理圖片進行推理 //暫時不處理這里的代碼 } } }

    步驟二:把模型包裝成一個類

    將模型包裝成一個C#是整個過程中比較麻煩的一步。所幸的是,Tools for AI對此提供了很好的支持。進一步了解,可以看這里。

    首先,我們在解決方案MnistForm下點擊鼠標右鍵,選擇添加->新建項目,在彈出的窗口里選擇AI Tools->Inference->模型推理類庫,名稱不妨叫做MnistModel,點擊確定,于是我們又多了一個項目,

    然后自己配置好這個項目的名稱、位置,點擊確定。

    然后彈出一個模型推理類庫創建向導,這個時候就需要我們選擇自己之前訓練好的模型了~

    首先在模型路徑里選擇保存的模型文件的路徑。這里我們使用在AI應用開發實戰 - 從零開始配置環境博客中訓練并導出的模型

    note:模型可在/samples-for-ai/examples/tensorflow/MNIST目錄下找到,其中output文件夾保存了檢查點文件,export文件夾保存了模型文件。

    對于TensorFlow,我們可以選擇檢查點的.meta文件,或者是保存的模型的.pb文件

    這里我們選擇在AI應用開發實戰 - 從零開始配置環境這篇博客最后生成的export目錄下的檢查點的SavedModel.pb文件,這時程序將自動配置好配置推理接口,見下圖:

    類名可以自己定義,因為我們用的是MNIST,那么類名就叫Mnist好了,然后點擊確定。

    這樣,在解決方案資源管理器里,在解決方案MnistForm下,就多了一個MnistModel:

    雙擊Mnist.cs,我們可以看到項目自動把模型進行了封裝,生成了一個公開的infer函數。

    然后我們在MnistModel上右擊,再選擇生成,等待一會,這個項目就可以使用了~

    步驟三:連接兩個部分

    這一步差不多就是這么個感覺:

    I have an apple , I have a pen. AH~ , Applepen

    首先,我們來給DrawDigit添加引用,讓它能使用MnistModel。在DrawDigit項目的引用上點擊鼠標右鍵,點擊添加引用,在彈出的窗口中選擇MnistModel,點擊確定。

    然后,由于MNIST的模型的輸入是一個28×28的白字黑底的灰度圖,因此我們首先要對圖片進行一些處理。
    首先將圖片轉為28×28的大小。
    然后將RGB圖片轉化為灰階圖,將灰階標準化到[-0.5,0.5]區間內,轉換為黑底白字。
    最后將圖片用mnist模型要求的格式包裝起來,并傳送給它進行推理。
    于是,我們在pictureBox1_MouseUp中添加上這些代碼,并且在文件最初添加上using MnistModel;:

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { //當鼠標左鍵釋放時 //同時開始處理圖片進行推理 if (e.Button == MouseButtons.Left) { // 復制pictureBox中的圖片并縮放到28*28成為新的圖片(tmpBmp) Bitmap tmpBmp = new Bitmap(digitImage, MinstImageSize, MinstImageSize); //將圖片轉為灰階圖,并將圖片的像素信息保存在list中 var imageData = new List<float>(MnistImageSize * MnistImageSize); for (var y = 0; y < MnistImageSize; y++) { for (var x = 0; x < MnistImageSize; x++) { var color = tmpBmp.GetPixel(x, y); var pixel = (float)(0.5 - (color.R + color.G + color.B) / (3.0 * 255)); imageData.Add(pixel); } } //將圖片信息包裝為mnist模型規定的輸入格式 var batchData = new List<IEnumerable<float>>(); batchData.Add(imageData); //將圖片傳送給mnist模型進行推理 var result = model.Infer(batchData); //將推理結果輸出 label1.Text = result.First().First().ToString(); } }

    最后讓我們嘗試一下運行~

    三、效果展示

    現在我們就有了一個簡單的小程序,可以識別手寫的數字了。

    趕緊試試效果怎么樣~

    注意

  • 路徑中不能有中文字符,否則可能找不到模型。
  • 擴展

    嘗試識別多個數字

    我們已經支持了單個手寫數字的識別,那能不能支持多個手寫數字的識別呢?同時寫下多個數字,正是現實中更為常見的情形。相比之下,如果只能一次識別一個手寫數字,應用就會有比較大的局限性。
    首先,我們可以嘗試在現有的應用里一次寫下兩個數字,看看識別效果(為了更好的展示效果,將筆畫的寬度由40調整為20。這一改動對單個數字的識別并無大的影響):

    識別效果不盡人意。
    右上角展示的結果準確地反應了模型對我們手寫輸入的推理結果(即result.First().First().ToString()),然而這一結果并不像我們期望的那樣是“42”。
    了解MNIST數據集的讀者們可能已經意識到了,這是“理所當然”的。歸根結底,這一問題的癥結在于:作為我們AI應用核心的AI模型,本身并不具備識別多個數字的能力——當前案例中我們使用的AI模型是基于MNIST數據集訓練的(訓練過程請回顧我們之前的博客AI應用開發實戰 - 從零開始配置環境),而MNIST數據集只覆蓋了單個的手寫數字;并且,我們并未對筆跡圖形作額外的處理。
    結果是在寫下多個數字的情況下,我們實際上在“強行”讓AI模型做超出其適應性范圍的判斷。這屬于AI模型的誤用。其結果自然難以令人滿意。
    那么,為了增強應用的可用性,我們能不能改善它、讓它能識別多個數字呢?我們很自然地想到,既然MNIST模型已經能很好地識別單個數字,那我們只需要把多個數字分開,一個一個地讓MNIST模型進行識別就好了。這樣,我們就引入了一個新的子問題,即是“多個手寫數字的分割”。

    子問題:分割多個手寫數字

    我們注意到本文介紹的應用有一個特點,那就是最終用作輸入的圖形,是用戶當場寫下的,而非通過圖片文件導入的靜態圖片,即我們擁有筆畫產生過程中的全部動態信息,比如筆畫的先后順序,筆畫的重疊關系等等。考慮到這些信息,我們可以設計一種基本的分割規則:在水平面上的投影相重疊的筆畫,我們就認為它們同屬于一個數字。
    筆畫和水平方向上投影的關系示意如下圖:

    因此書寫時,就要求不同的數字之間盡量隔開。當然為了盡可能處理不經意的重疊,我們還可以為重疊部分相對每一筆畫的位置設定一個閾值,如至少進入筆畫一端的10%以內。
    應用這樣的規則后,我們就能比較好的把多個手寫數字分割開,并能利用Visual Studio Tools for AI提供的批量推理功能,一次性對所有分割出的圖形做推理。
    多個手寫數字識別的最終效果如圖:

    當然,我們對問題的定義還是非常理想化,分割算法也比較簡單。在實際應用中,我們還經常要考慮非二值圖形、噪點、非數字的判別等等。并且對手寫數字的分割可能比我們設定的規則要復雜,因為在現實場景中,水平方向上的重疊可能會影響圖形的涵義。
    將兩個手寫數字分割開這一問題,實際上和經典的圖像分割問題非常類似。雖然本文示例中的圖像非常簡單,但仍然可能具有相當復雜的語義需要處理。為此,我們可能需要引入更多的模型,或者擴展現有的模型來正確判斷多個圖形之間的關系。

    進階

    那么,如果要識別多個連寫的數字,或支持字母該怎么做呢?大家多用用也會發現,如果數字寫得很小,或者沒寫到正中,識別起來正確率也會不高。要解決這些問題,做成真正的產品,就不止這一個模型了。比如在多個數字識別中,可能要根據經驗來切分圖,或者訓練另一個模型來檢測并分割數字。要支持字母,則需要重新訓練一個包含手寫字母的模型,并準備更多的字母的數據。要解決字太小的問題,還要檢測一下字的大小,做合適的放大等等。

    我們可以看到,一個訓練出來的模型本身到一個實際的應用之間還有不少的功能要實現。希望我們這一系列的介紹,能夠幫助大家將機器學習的概念帶入到傳統的編程領域中,做出更聰明的產品。

    ?

    ?

    此時,界面會提示注冊Azure,因為定制化視覺服務實際上是Azure提供的一項云服務,正式使用這項服務需要有Azure訂閱。
    不過我們現在只是免費試用,所以選擇Continue With trial,如果在根據這篇博客流程做完了一個小應用之后,你覺得確實需要使用這項服務,那么你可以去注冊Azure賬號,獲取Azure訂閱。

    三、創建定制化視覺服務項目

    點擊New Project,填寫項目信息。

    這里不妨以一個熊的分類模型作為例子來實踐吧。

    填寫好Name和Description,這里Name不妨填寫為BearClassification。

    隨后選擇Classification和General(compact),點擊Create

    截圖操作
    在Project Type一欄,定制化視覺服務提供了識別和分類兩種服務,另外提供了多種識別場景,其中末尾帶有(compact),也即壓縮字樣的三種。
    壓縮模型,顧名思義,模型占用的空間更少,運行更快,甚至可以放到手機這種移動設備里。
    當然,會有一個小問題就是精確度會受影響。導出模型后,模型文件的使用是沒有任何限制的,而其余的幾種場景只能通過調用API來進行預測,由于當前屬于免費試用,因此這種方式有10000次調用上限。
    由于分類服務需要準備用來訓練的數據集,請自行準備幾種不同的熊的照片,將同種的熊放在以這種熊的名字命名的文件夾里,最后再將這些文件夾放在一個data文件夾中。然后點擊Add images
    選擇一種熊的全部照片,然后創建對應的標簽,點擊Up load xxx files
    在添加了所有的數據集和標簽之后,點擊網頁上方的Train,開始訓練模型。
    一小會之后,點擊網頁上方的performance,就可以看到這次訓練的結果了。
    這里簡單解釋一下Precision和Recall,這是兩個評估模型好壞的主要指標。
    簡單來說,兩個數都是越大越好。在這個項目中,以Brown Bear為例:
    Precision就是識別出來的結果的準確率,即在所有被識別為棕熊的圖片中真正有棕熊的圖片所占的比例;而Recall則是測試結果中正確識別為棕熊的圖片占測試集中所有棕熊圖片的比例。
    這時再點擊界面右上角的齒輪,可以看到免費用戶每個項目能夠使用的服務額度:
    一共可以上傳5000張圖片,創建50個不同標簽,保存10次迭代的結果。
    這十次迭代有什么用呢?當需要增刪標簽、給標簽添加或刪除訓練圖片時,這次再訓練,就會花費掉一次迭代。
    這些都是當前項目的總數而不是累計值。對于一般的免費用戶,這基本上就相當于你可以隨意使用這項服務了,如果有大量的訓練數據,那么建議您還是訂閱Azure云服務,Azure秉持著使用多少,收費多少的原則,即使收費,也仍然良心。
    然后選擇剛剛訓練好的這次迭代,點擊Export。
    視覺認知服務一共提供了適用于四種平臺的模型導出,對三大操作系統都能支持。
    選擇ONNX,這個格式由微軟、臉書、亞馬遜等大廠鼎力支持,點擊Export,等待服務器把模型導出,然后點擊Download,即可下載模型。最后得到了一個.onnx文件,然后就可以使用它來構建應用了。

    如果需要上傳大量的圖片數據,那么點擊鼠標的方式肯定不夠方便,微軟同時提供了代碼的支持,詳見官方文檔:

    https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/home

    四、使用Windows ML構建應用

    這次不寫Winform程序,而是搭建一個識別熊的UWP的AI應用,通過這個應用來教大家如何使用Windows ML導入模型。

    這部分的代碼已經完成了,請使用git克隆samples-for-ai到本地,UWP項目的代碼在/samples-for-ai/projects/BearClassificationUWPDemo中。

    在運行代碼之前,請先安裝開發UWP所需的工作負載,流程如下:

  • 打開Visual Studio Installer
  • 在工作負載中勾選Universal Windows Platform development
  • 在單個組件一欄中下拉到最下方,確認Windows 10 SDK(10.0.17134.0)已被勾選上,這是使用Windows ML開發的核心組件



  • 另外,請將您的操作系統更新到1803版本,否則本程序將不能安裝。

    如果您將進行類似的開發,請將UWP項目設置成最低運行目標版本為17134,否則對于版本低于17134的用戶,在運行時會出現:

    "Requested Windows Runtime type 'Windows.AI.MachineLearning.Preview.LearningModelPreview' is not registered."

    詳見:https://github.com/MicrosoftDocs/windows-uwp/issues/575

    安裝需要的時間比較長,可以先看看UWP的視頻教程,做一做頭腦預熱: https://www.bilibili.com/video/av7997007

    Visual Studio 和 Windows 更新完畢后,我們打開CustomVisionApp.sln,運行這個程序。

    你可以從必應上查找一些熊的圖片,復制圖片的URL,粘貼到輸入框內,然后點擊識別按鈕;或者,點擊瀏覽按鈕,選擇一張本地圖片,點擊確定,你就可以看到識別結果了:




    現在來看看這個程序是怎么實現的。

    我們來梳理一下這個應用的邏輯,這個應用的邏輯與上一篇博客中的手寫數字識別大體上是一樣的:

  • 導入模型
  • 按下按鈕后,通過某種方式獲取要用來識別的圖片
  • 將圖片交給模型識別
  • 將圖片與識別結果展示在界面上
  • 1. 文件結構:

    文件結構見下圖:

    • Assets文件夾存放了這個項目的資產文件,比如程序圖標等等,在本示例程序中,.onnx文件也存放在其中。
    • Strings文件夾存放了用于本地化與全球化資源文件,這樣可以支持不同的語言。
    • ViewModel文件夾中則存放了本項目的關鍵代碼,整個程序運行的邏輯都在ResultViewModel.cs中
    • BearClassification.cs則是系統自動生成的模型包裝文件
    • MainPage.xaml是程序的UI布局文件

    2. 核心代碼一:BearClassification.cs

    這部分的代碼是自動生成的,教程詳見鏈接:https://docs.microsoft.com/zh-cn/windows/uwp/machine-learning/

  • 將.onnx文件添加到UWP項目的Assets文件夾中,隨后將自動生成一個對應的包裝.cs文件,在本例中為BearClassification.cs。
  • 由于目前存在的一些BUG,生成的類名會有亂碼,需要將亂碼替換為別的字符串。
  • 修改BearClassification.onnx的屬性->生成操作,將其改為內容,確保在生成時,能夠調用到這個模型。
  • 生成的文件共有三個類:

    • BearClassificationModelInput:定義了該模型的輸入格式是VideoFrame
    • BearClassificationModelOutput:定義了該模型的輸出為一個list和一個dict,list存儲了所有標簽按照probability降序排列,dict則存儲了標簽與概率的鍵值對
    • BearClassificationModel:定義了該模型的初始化函數與推理函數
    // 模型的輸入格式為VideoFrame public sealed class BearClassificationModelInput { public VideoFrame data { get; set; } } // 模型的輸出格式,其中包含了一個列表:classLabel和一個字典:loss // 列表中包含每種熊的標簽,按照概率降序排列 // 字典中則包含了每種熊的標簽和其概率,按照用戶在創建模型時的添加順序排列 public sealed class BearClassificationModelOutput { public IList<string> classLabel { get; set; } public IDictionary<string, float> loss { get; set; } public BearClassificationModelOutput() { this.classLabel = new List<string>(); this.loss = new Dictionary<string, float>(){...} } } // 模型的包裝類,提供了兩個函數 // CreateBearClassificationModel:從.onnx文件中創建模型 // EvaluateAsync:對輸入對象進行評估,并返回結果 public sealed class BearClassificationModel { private LearningModelPreview learningModel; public static async Task<BearClassificationModel> CreateBearClassificationModel(StorageFile file) { ... } public async Task<BearClassificationModelOutput> EvaluateAsync(BearClassificationModelInput input) { ... } }

    3. 核心代碼二:ResultViewModel.cs

    通過之前的運行可以發現:每次識別圖片,UI中的內容需要進行頻繁地更新,為了簡化更新控件內容的代碼邏輯,這個程序使用UWP開發中常用的MVVM(model-view-viewmodel)這一組合模式開發,使用“綁定”的方式,將UI控件與數據綁定起來,讓數據與界面自動地同步更新,簡化了代碼邏輯,保證了ResultViewModel職責單一。

    綁定源(ResultViewMode.cs)綁定目標(MainPage.xaml)
    string BearUrlTextBox InputUriBox
    ObservableCollection?ResultsListView ResultArea
    BitmapImage BearImageImage DisplayArea
    string DescriptionTextBox DescribeArea
    ICommand RecognizeCommandButton RecognizeButton
    ICommand BrowseCommandButton BrowseButton

    綁定好之后,程序還需要一系列邏輯才能運行,這里就包括:

    導入與初始化模型:

    在程序一開始,需要調用LoadModel進行模型初始化工作。

    private async void LoadModel() { //導入模型文件,實例化模型對象 StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/BearClassification.onnx")); model = await BearClassificationModel.CreateBearClassificationModel(modelFile); }

    圖片推理:

    本程序提供了兩種方式訪問圖片資源:

  • 通過URL訪問網絡圖片
  • 通過文件選取器訪問本地圖片
  • private async void EvaluateNetPicAsync() { try { ... //BearClassification要求的輸入格式為VideoFrame //程序需要以stream的形式從URL中讀取數據,生成VideoFrame var response = await new HttpClient().GetAsync(BearUrl); var stream = await response.Content.ReadAsStreamAsync(); BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream.AsRandomAccessStream()); VideoFrame imageFrame = VideoFrame.CreateWithSoftwareBitmap(await decoder.GetSoftwareBitmapAsync()); //將videoframe交給函數進行識別 EvaluateAsync(imageFrame); } catch (Exception ex){ ... } } private async void EvaluateLocalPicAsync() { try { ... // 從文件選取器中獲得文件 StorageFile file = await openPicker.PickSingleFileAsync(); var stream = await file.OpenReadAsync(); ... // 生成videoframe BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); VideoFrame imageFrame = VideoFrame.CreateWithSoftwareBitmap(await decoder.GetSoftwareBitmapAsync()); // 將videoframe交給函數進行識別 EvaluateAsync(imageFrame); } catch (Exception ex){ ... } } private async void EvaluateAsync(VideoFrame imageFrame) { //將VideoFrame包裝進BearClassificationModelInput中,交給模型識別 //模型的輸出格式為BearClassificationModelOutput //其中包含一個列表,存儲了每種熊的標簽名稱,按照probability降序排列 //和一個字典,存儲了每種熊的標簽,和對應的probability //這里取出輸出中的字典,并對其進行降序排列 var result = await model.EvaluateAsync(new BearClassificationModelInput() { data = imageFrame }); var resultDescend = result.loss.OrderByDescending(p => p.Value).ToDictionary(p => p.Key, o => o.Value).ToList(); //根據結果生成圖片描述 Description = DescribResult(resultDescend.First().Key, resultDescend.First().Value); Results.Clear(); foreach (KeyValuePair<string, float> kvp in resultDescend) { Results.Add(resourceLoader.GetString(kvp.Key) + " : " + kvp.Value.ToString("0.000")); } }

    五、使用其他方法構建應用

    同樣,用之前使用Visual Studio Tools for AI提供的推理類庫生成器也能夠構建相似的應用。想看視頻教程的請移步:

    【教程】普通程序員一小時入門AI應用——看圖識熊(不含公式,包會)

    該教程講解了如何使用模型瀏覽工具Netron

    想看圖文教程請繼續往下看:

    1. 界面設計

    創建Windows窗體應用(.NET Framework)項目,這里給項目起名ClassifyBear。

    注意,項目路徑不要包含中文。

    在解決方案資源管理器中找到Form1.cs,雙擊,打開界面設計器。從工具箱中向Form中依次拖入控件并調整,最終效果如下圖所示:

    左側從上下到依次是:

    • Label控件,將內容改為“輸入要識別的圖片地址:”
    • TextBox控件,可以將控件拉長一些,方便輸入URL
    • Button控件,將內容改為“識別”
    • Lable控件,將label的內容清空,用來顯示識別后的結果。因為label也沒有邊框,所以在界面看不出來。可以將此控件的字體調大一些,能更清楚的顯示推理結果。

    右側的控件是一個PictureBox,用來預覽輸入的圖片,同時,我們也從這個控件中取出對應的圖片數據,傳給我們的模型推理類庫去推理。建議將控件屬性的SizeMode更改為StretchImage,并將控件長和寬設置為同樣的值,保持一個正方形的形狀,這樣可以方便我們直觀的了解模型的輸入,因為在前面查看模型信息的時候也看到了,該模型的輸入圖片應是正方形。

    2. 查看模型信息

    在將模型集成到應用之前,我們先來看一看模型的基本信息,比如模型需要什么樣的輸入和輸出。打開Visual Studio中的AI工具菜單,選擇模型工具下的查看模型,會啟動Netron模型查看工具。該工具默認不隨Tools for AI擴展一起安裝,第一次使用時可以按照提示去下載并安裝。

    Netron打開后,點擊Open model選擇打開之前下載的BearModel.onnx文件。然后點擊左上角的漢堡菜單顯示模型的輸入輸出。

    上圖中可以看到該模型需要的輸入data是一個float數組,數組中要求依次放置227*227圖片的所有藍色分量、綠色分量和紅色分量,后面程序中調用時要對輸入圖片做相應的處理。

    上圖中還可以看到輸出有兩個值,第一個值loss包含所有分類的得分,第二個值classLabel是確定的分類的標簽,這里只需用到第二個輸出即可。

    3. 封裝模型推理類庫

    由于目前模型推理用到的庫只支持x64,所以這里需要將解決方案平臺設置為x64。打開解決方案資源管理器,在解決方案上點右鍵,選擇配置管理器。

    在配置管理器對話框中,點開活動解決方案平臺下拉框,選擇新建

    在新建解決方案平臺對話框中,輸入新平臺名x64,點擊確定即可

    下面添加模型推理類庫,再次打開解決方案資源管理器,在解決方案上點右鍵,選擇添加,然后選擇新建項目。

    添加新項目對話框中,將左側目錄樹切換到AI Tools下的Inference,右側選擇模型推理類庫,下方填入項目名稱,這里用Model作為名稱。

    確定以后會出現檢查環境的進度條,耐心等待一會就可以出現模型推理類庫創建向導對話框。

    點擊模型路徑后面的瀏覽按鈕,選擇前面下載的BearModel.onnx模型文件。

    注意,這里會出現幾處錯誤提示,我們需要手動修復一下。首先會看到“發現不支持的張量的數據類型”提示,可以直接點確定。

    確定后如果彈出“正在創建項目…”的進度條,一直不消失,這里只需要在類名后面的輸入框內點一下,切換下焦點即可。

    然后,我們來手動配置一下模型的相關信息。類名輸入框中填入模型推理類的名字,這里用Bear。然后點擊推理接口右側的添加按鈕,在彈出的編輯接口對話框中,隨便起個方法名,這里用Infer。輸入節點的變量名和張量名填入data,輸出節點的變量名和張量名填入classLabel,字母拼寫要和之前查看模型時看到的拼寫一模一樣。然后一路確定,再耐心等待一會,就可以在解決方案資源管理器看到新建的模型推理類庫了。

    還有一處錯誤需要手動修復一下,切換到解決方案資源管理器,在Model項目的Bear目錄下找到Bear.cs雙擊打開,將函數Infer的最后一行

    return r0;

    替換為

    List<List<string>> results = new List<List<string>>(); results.Add(r0); return results;

    至此,模型推理類庫封裝完成。相信Tools for AI將來的版本中會修復這些問題,直接選擇模型文件創建模型推理類庫就可以了。

    4. 使用模型推理類庫

    首先添加對模型推理類庫的引用,切換到解決方案資源管理器,在ClassifyBear項目的引用上點右鍵,選擇添加引用。

    在彈出的引用管理器對話框中,選擇項目、解決方案,右側可以看到剛剛創建的模型推理類庫,勾選該項目,點擊確定即可。

    在Form1.cs上點右鍵,選擇查看代碼,打開Form1.cs的代碼編輯窗口。

    添加兩個成員變量

    // 使用Netron查看模型,得到模型的輸入應為227*227大小的圖片 private const int imageSize = 227; // 模型推理類 private Model.Bear model;

    回到Form1的設計界面,雙擊Form的標題欄,會自動跳轉到代碼頁面并添加了Form1_Load方法,在其中初始化模型推理對象

    private void Form1_Load(object sender, EventArgs e) { // 初始化模型推理對象 model = new Model.Bear(); }

    回到Form1的設計界面,雙擊識別按鈕,會自動跳轉到代碼頁面并添加了button1_Click方法,在其中添加以下代碼:

    首先,每次點擊識別按鈕時都先將界面上顯示的上一次的結果清除

    // 識別之前先重置界面顯示的內容 label1.Text = string.Empty; pictureBox1.Image = null; pictureBox1.Refresh();

    然后,讓圖片控件加載圖片

    bool isSuccess = false; try {pictureBox1.Load(textBox1.Text);isSuccess = true; } catch (Exception ex) { MessageBox.Show($"讀取圖片時出現錯誤:{ex.Message}"); throw; }

    如果加載成功,將圖片數據傳給模型推理類庫來推理。

    if (isSuccess) {// 圖片加載成功后,從圖片控件中取出227*227的位圖對象Bitmap bitmap = new Bitmap(pictureBox1.Image, imageSize, imageSize);float[] imageArray = new float[imageSize * imageSize * 3]; // 按照先行后列的方式依次取出圖片的每個像素值 for (int y = 0; y < imageSize; y++) { for (int x = 0; x < imageSize; x++) { var color = bitmap.GetPixel(x, y); // 使用Netron查看模型的輸入發現 // 需要依次放置227 *227的藍色分量、227*227的綠色分量、227*227的紅色分量 imageArray[y * imageSize + x] = color.B; imageArray[y * imageSize + x + 1* imageSize * imageSize] = color.G; imageArray[y * imageSize + x + 2* imageSize * imageSize] = color.R; } } // 模型推理類庫支持一次推理多張圖片,這里只使用一張圖片 var inputImages = new List<float[]>(); inputImages.Add(imageArray); // 推理結果的第一個First()是取第一張圖片的結果 // 之前定義的輸出只有classLabel,所以第二個First()就是分類的名字 label1.Text = model.Infer(inputImages).First().First(); }

    注意,這里的數據轉換一定要按照前面查看的模型的信息來轉換,圖片大小需要長寬都是227像素,并且要依次放置所有的藍色分量、所有的綠色分量、所有的紅色分量,如果順序不正確,不能達到最佳的推理結果。

    5. 測試

    編譯運行,然后在網上找一張熊的圖片,把地址填到輸入框內,然后點擊識別按鈕,就可以看到識別的結果了。注意,這個URL應該是圖片的URL,而不是包含該圖片的網頁的URL。

    六、下一步?

    本篇博客我們學會了使用定制化視覺服務與在UWP應用中集成定制化視覺服務模型。這里我提兩個課后習題:(想不到吧)

  • 當訓練含有多個標簽、大量圖片數據時,如何做到一鍵上傳圖片并訓練?

  • 如何通過調用REST接口的方式完成對圖片的推理?

  • 提示:請看看定制化視覺服務給我們提供的API,這一題肯定是要寫代碼做的
    https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/home

    加油!

    七、內容預告

    接下來我們將會陸續推出:

  • 微軟認知服務使用教程
  • 模型訓練及推理的通常流程及原理
  • 模型轉換工具的使用
  • 開放AI平臺-大規模計算資源調度系統
  • 請在下方留言,告知我們您最想閱讀哪個教程,我們將優先考慮。

    如果您有別的想要了解的內容,也可以在評論區留言。

    ?

    AI應用開發基礎傻瓜書系列的目錄~

    寫在前面,為啥要出這個系列的教程呢?

    總的說來,我們現在有了很多非常厲害的深度學習框架,比如tensorflow,pytorch,paddlepaddle,caffe2等等等等。然而,我們用這些框架在搭建我們自己的深度學習模型的時候,到底做了一些什么樣的操作呢?我們試圖去閱讀框架的源碼來理解框架到底幫助我們做了些什么,但是……很難!很難!很難!因為深度學習是需要加速啦,分布式計算啦,所以框架做了很多很多的優化,也讓像我們這樣的小白難以理解這些框架的源碼。所以,為了幫助大家更進一步的了解神經網絡模型的具體內容,我們整理了這樣一個系列的教程。

    對于這份教程的內容,如果沒有額外的說明,我們通常使用如下表格的命名約定

    符號含義
    X輸入樣本
    Y輸入樣本的標簽
    Z各層運算的結果
    A激活函數結果
    大寫字母矩陣或矢量,如A,W,B
    小寫字母變量,標量,如a,w,b

    適用范圍

    沒有各種基礎想學習卻無從下手哀聲嘆氣的玩家,請按時跟蹤最新博客,推導數學公式,跑通代碼,并及時提出問題,以求最高療效;

    深度學習小白,有直觀的人工智能的認識,強烈的學習欲望和需求,請在博客的基礎上配合代碼食用,效果更佳;

    調參師,訓練過模型,調過參數,想了解框架內各層運算過程,給玄學的調參之路添加一點心理保障;

    超級高手,提出您寶貴的意見,給廣大初學者指出一條明路!

    前期準備

    環境:

    windows(Linux也行),python(最好用3),anaconda(或者自己裝numpy之類的),tensorflow(嫌麻煩地請看這里《AI應用開發實戰 - 從零開始配置環境》,tools for AI(按照鏈接教程走的就不用管這個了)。

    自己:

    清醒的頭腦(困了的同學請自覺泡茶),紙和筆(如果像跟著推公式的話),鬧鐘(防止久坐按時起來轉轉),厚厚的衣服(有暖氣的同學請忽略)

    目錄

    • 1-神經網絡的基本工作原理
    • 2-神經網絡中反向傳播與梯度下降的基本概念
    • 3-基本數學導數公式
    • 4-激活函數
    • 5-損失函數
    • 6-單入單出的單層神經網絡能做什么
    • 7-單入單出的雙層神經網絡能做什么
    • 徒手搭建神經網絡
    • 徒手搭建CNN網絡
    • 徒手搭建RNN網絡
    • 模型內部

    ?

    ?

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的AI应用开发实战(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品无人国产偷自产在线 | 在线亚洲成人 | 日本免费久久高清视频 | 国产成人av综合色 | 亚洲综合精品视频 | 日韩首页 | 国产综合香蕉五月婷在线 | av在线免费播放 | 亚洲国产精品成人va在线观看 | 国产精品免费在线视频 | 亚洲精品国偷自产在线99热 | 久久国产乱 | 欧美日韩a视频 | 免费三及片 | 999久久久久 | 97综合在线 | 极品久久久 | 亚洲国产精品999 | 午夜精品一区二区三区在线观看 | 黄色片视频在线观看 | 99视频 | 精品欧美日韩 | 亚洲国产午夜 | 天天操天天摸天天爽 | 天天天色综合 | 激情综合啪啪 | 不卡的av| 日韩精品在线免费观看 | 免费精品视频在线 | 一区中文字幕电影 | www.亚洲精品视频 | 丰满少妇对白在线偷拍 | 三级黄色片在线观看 | 亚洲aⅴ免费在线观看 | 欧美日韩中文在线视频 | 91麻豆精品国产午夜天堂 | 久久久免费观看 | 精品国产一区二区三区久久久 | 欧美日本啪啪无遮挡网站 | 欧美一二区在线 | 亚洲欧美日韩中文在线 | 日韩免费电影一区二区 | 精品一区三区 | 免费色视频网站 | 欧美日韩在线视频观看 | 免费麻豆| 精品久久福利 | 婷婷中文字幕在线观看 | 国产手机免费视频 | 狠狠色丁香婷婷综合 | 高清日韩一区二区 | 国产午夜精品av一区二区 | 99精品视频免费观看视频 | 久久久婷 | 国产精品毛片久久 | 亚洲三级网| 亚洲无吗视频在线 | 麻豆视频在线观看免费 | 精品视频免费看 | 国产在线精品一区二区三区 | 国产一卡久久电影永久 | 日韩网站免费观看 | 婷婷在线网站 | va视频在线观看 | 国语对白少妇爽91 | 国产成人av网 | bbw av| 久久精品亚洲一区二区三区观看模式 | 午夜精品一二区 | 欧美 日韩 性 | 日韩| 日韩免费中文 | 欧美视频国产视频 | 国产黄色免费观看 | 一区二区三区免费在线 | 久久久久免费观看 | 久久久免费视频播放 | 91在线视频| 丁香花在线视频观看免费 | 久久国产精品影视 | 一本到在线 | 黄色av电影网 | 特片网久久| 国产精品18久久久久久久网站 | 国产中文字幕视频 | 国产伦精品一区二区三区无广告 | 成人免费观看完整版电影 | 国产大陆亚洲精品国产 | 色吊丝在线永久观看最新版本 | 黄色成人av | 九九涩涩av台湾日本热热 | 西西www4444大胆视频 | 99人久久精品视频最新地址 | 国产尤物在线 | 久久久免费 | 久久99精品久久久久蜜臀 | 久久亚洲影院 | 国产视频美女 | 日韩三级不卡 | 六月婷婷久香在线视频 | 久久久国产精品视频 | 欧美日韩另类在线观看 | 波多野结衣一区二区 | 久久人人插 | 成人av免费看 | 99热精品国产一区二区在线观看 | 97超碰人人澡人人爱 | 欧美超碰在线 | 日韩午夜一级片 | 精品一区久久 | 国产另类av| 97精品在线| 久久婷婷国产色一区二区三区 | 麻豆一级视频 | 亚洲 欧美 国产 va在线影院 | 国产精品综合久久久久 | 五月婷婷狠狠 | 天天爱天天舔 | 中文字幕美女免费在线 | 精品福利网站 | 99999精品视频 | 97av视频| 婷婷久久婷婷 | 中文字幕中文字幕在线中文字幕三区 | 国产精品视频在线观看 | 国产精品日韩欧美一区二区 | 国产麻豆精品传媒av国产下载 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 在线国产小视频 | 亚洲电影一区二区 | 亚洲一区视频在线播放 | 亚洲午夜久久久影院 | 超碰97成人| 亚洲天天在线 | 中国一级片在线观看 | 久久精品在线视频 | 国产999精品 | 精品久久毛片 | 91久久国产综合精品女同国语 | 国产视频亚洲精品 | 四虎5151久久欧美毛片 | av大全在线免费观看 | 国产精品免费在线播放 | 成人资源站 | 99久久久国产精品免费99 | 国产精品99久久免费黑人 | 国产精品亚 | 国产精品剧情在线亚洲 | 国产小视频网站 | 欧美a在线免费观看 | 黄色成人91| 久久亚洲影院 | 国产真实在线 | 欧美一二三区在线观看 | 99热精品国产一区二区在线观看 | 日韩最新在线 | 99久久激情视频 | 在线观看色网 | 欧美成a人片在线观看久 | 国内精品久久天天躁人人爽 | 久久天天躁狠狠躁亚洲综合公司 | av色网站 | 麻豆久久久 | 日韩在线精品视频 | 亚洲黄色成人 | 五月宗合网 | 8x成人免费视频 | 婷婷伊人综合亚洲综合网 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 日本韩国精品在线 | 麻豆播放 | 最近能播放的中文字幕 | 国产精品免费不卡 | www.久久久.cum| 日韩在线首页 | 国产精品麻豆视频 | 亚洲精选在线 | av免费在线免费观看 | 国产在线视频不卡 | 少妇高潮流白浆在线观看 | 亚洲综合网站在线观看 | 91热视频| 欧美成人精品三级在线观看播放 | 亚洲精品免费在线 | 波多野结衣亚洲一区二区 | 欧美91精品久久久久国产性生爱 | 97人人模人人爽人人喊网 | 99电影| 一区二区三区免费网站 | 天天操比 | 国产精品成人免费 | 国产亚洲欧美日韩高清 | 一区二区三区中文字幕在线 | 美女网站视频免费黄 | www.伊人网| 不卡的av中文字幕 | 日韩试看 | 日韩免费中文字幕 | 成人在线一区二区三区 | 视频一区在线免费观看 | 国产99久久九九精品 | 日韩a在线观看 | 亚洲欧美日韩精品久久奇米一区 | 日本精品久久久久中文字幕 | 久久精品日产第一区二区三区乱码 | 国产在线观看99 | 超碰在线97国产 | 天天艹天天操 | 国产精品福利在线观看 | 国产免费一区二区三区最新 | 在线视频在线观看 | 日韩免费av网址 | 国产高清在线免费视频 | 欧美激情综合五月色丁香 | 日韩在线大片 | 999久久久免费精品国产 | 亚色视频在线观看 | 国产免费xvideos视频入口 | 91大神免费视频 | 中文字幕在线观看2018 | 亚洲国产精品久久久久婷婷884 | 狠狠干电影 | 午夜国产一区 | 韩日精品中文字幕 | 成人国产精品电影 | 欧美极品少妇xxxx | 欧美日韩国产mv | 婷婷网在线 | 三三级黄色片之日韩 | 久久99久久99精品免观看粉嫩 | 色婷婷激情电影 | 国产原创在线 | 91av在线免费看 | 亚洲国产视频网站 | 99精品热视频只有精品10 | 夜夜爽天天爽 | 国产啊v在线 | 免费不卡中文字幕视频 | 免费在线a| 国产精品一区二 | 国产精品视频久久 | 久久综合九色综合97_ 久久久 | 国产精品久久久久免费 | 丁香 婷婷 激情 | www.夜夜草| 四虎在线免费观看 | 999久久久精品视频 日韩高清www | 精品毛片在线 | 色五婷婷 | 日韩网站在线观看 | 黄色免费观看网址 | 成人在线播放免费观看 | 欧美整片sss | 91av在线精品 | 亚洲干| 亚洲精品自拍视频在线观看 | 狠狠综合久久av | 国产精品免费观看国产网曝瓜 | 久久久精品一区二区三区 | 久久久www免费电影网 | 天天色官网 | 在线国产能看的 | 激情喷水 | 欧美性生活大片 | 久久国产精品一二三区 | 亚洲美女视频网 | 在线观看成人国产 | 五月天天av | 在线综合 亚洲 欧美在线视频 | 九九爱免费视频 | 亚洲激情 在线 | 五月婷婷视频在线 | 日色在线视频 | av亚洲产国偷v产偷v自拍小说 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 中文字幕在线日 | 99视频这里有精品 | 成人av影院在线观看 | 久久国产免费看 | 久久一本综合 | 国产在线污 | 中文字幕中文字幕在线中文字幕三区 | 夜夜操狠狠操 | 欧美 亚洲 另类 激情 另类 | 亚洲无吗视频在线 | 超碰97免费 | 久久免费成人精品视频 | 欧美精品久久99 | 青青草在久久免费久久免费 | 成人小视频在线 | 插综合网| 国产精品99久久久久久久久久久久 | 色噜噜狠狠色综合中国 | 国产一区二区在线观看视频 | 最新av在线免费观看 | 999久久久免费精品国产 | 字幕网在线观看 | 欧美国产精品久久久久久免费 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美日韩国产精品一区 | 五月婷婷一区二区三区 | 成人久久| 久久久久久久久久久久国产精品 | 国产中文字幕一区 | 亚洲最新在线视频 | av资源免费看 | 日本久久不卡视频 | 免费网站黄| 色www精品视频在线观看 | 在线免费av网 | 免费高清看电视网站 | 国产精品久久久久婷婷二区次 | 一区二区不卡视频在线观看 | 中文字幕日韩伦理 | 黄色小说网站在线 | 精品久久久久一区二区国产 | 国产一区精品在线观看 | 黄色精品在线看 | 黄色毛片视频免费观看中文 | 97超碰中文 | 美女网站视频久久 | 九九九九九九精品任你躁 | 日韩精品一区二 | 新av在线| 成全在线视频免费观看 | 久久久黄视频 | 日韩在线观看视频一区二区三区 | 丁香色综合 | 特级aaa毛片 | 六月丁香婷婷网 | 91热爆在线观看 | 一区二区不卡高清 | 成年人视频在线免费播放 | 国产欧美精品在线观看 | 亚洲日本韩国一区二区 | 欧美贵妇性狂欢 | www好男人 | 国产精品v a免费视频 | 国产一级片播放 | 欧美日韩国产页 | 黄色一级在线免费观看 | 俺要去色综合狠狠 | 国产在线不卡精品 | 久久久男人的天堂 | www.eeuss影院av撸 | 日韩黄色免费在线观看 | 免费高清看电视网站 | 在线播放亚洲激情 | 日韩 国产 | 国产精品v欧美精品 | 欧美国产不卡 | 蜜臀aⅴ国产精品久久久国产 | 中国一级片在线观看 | 最近在线中文字幕 | 亚洲国产97在线精品一区 | 久草网站在线 | 亚洲经典中文字幕 | av大全免费在线观看 | 91在线视频播放 | 91在线porny国产在线看 | 女人18片毛片90分钟 | 国产精品人人做人人爽人人添 | 欧美色图30p | 在线中文字幕网站 | 日韩xxxx视频| 国产99久久久国产精品免费看 | 国产精品第十页 | 最新国产一区二区三区 | 成人九九视频 | 亚洲热久久 | 91视频黄色 | 狠狠躁日日躁狂躁夜夜躁 | 国产欧美最新羞羞视频在线观看 | 不卡中文字幕在线 | 免费观看91 | 亚洲国产中文字幕在线观看 | 欧美国产精品久久久久久免费 | 日韩精品中文字幕一区二区 | 在线有码中文字幕 | 精品久久久久久久久久岛国gif | 国产视频精品视频 | 久久久久黄| 手机看片福利 | 日韩免费视频网站 | 日日操夜夜操狠狠操 | 麻豆成人网| 成人久久国产 | 国产区精品视频 | 亚洲国产精品va在线看黑人 | 黄色视屏免费在线观看 | 免费观看的av| 最近中文国产在线视频 | 国产精品久久久久999 | 伊人影院在线观看 | 黄色av播放 | 国产在线观看网站 | 欧美日本在线观看视频 | 亚洲免费av在线 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 九九九九精品九九九九 | 中文字幕在线免费 | 久久久久久国产精品亚洲78 | 国产欧美久久久精品影院 | 午夜精品成人一区二区三区 | 麻花天美星空视频 | 久久影视精品 | 国产一区二区手机在线观看 | 91精品在线视频观看 | 色在线免费 | 波多野结衣视频一区二区三区 | 日韩精品视频免费在线观看 | 黄色免费网 | 西西444www高清大胆 | 国产一级淫片在线观看 | www操操| 在线色亚洲 | 久久综合日 | 欧美黄色软件 | 免费黄色激情视频 | 一区二区三区在线观看免费 | 亚洲专区在线播放 | 三级在线国产 | 日日操日日插 | 欧美极品久久 | 天堂在线视频中文网 | 99视频在线精品 | 92国产精品久久久久首页 | 免费又黄又爽视频 | 色婷婷激情四射 | av大全在线 | 中文字幕.av.在线 | 色婷婷久久 | 一区二区激情 | 精品国产乱码久久久久久天美 | 久久免费国产电影 | 国产a精品 | 手机色站| 免费看黄网站在线 | 国产福利av在线 | 国产 一区二区三区 在线 | 婷婷草 | 美女黄频视频大全 | 999国产精品视频 | 丁香婷婷综合色啪 | 天天干天天干天天色 | 久久久综合电影 | 国产 日韩 在线 亚洲 字幕 中文 | 亚洲春色综合另类校园电影 | 伊甸园av在线 | 色久综合 | 久久久久99精品成人片三人毛片 | 日韩免费在线一区 | 99在线视频播放 | 在线黄av| 麻豆国产精品永久免费视频 | 亚洲精品午夜aaa久久久 | 91粉色视频 | 国产精品久久久久久久久久白浆 | 日韩一区二区免费在线观看 | 91精品国自产在线偷拍蜜桃 | 成人黄色大片在线免费观看 | 在线观看岛国av | 一区免费在线 | www.亚洲视频 | 中文字幕一区二区三区久久蜜桃 | 欧美日韩中文字幕视频 | 永久免费的啪啪网站免费观看浪潮 | 正在播放久久 | 日韩xxxbbb| 国产正在播放 | 粉嫩一二三区 | 99久久精品免费视频 | 日韩中文字幕免费在线观看 | 亚洲黄色片一级 | 亚洲成人精品影院 | 一区三区在线欧 | 免费视频在线观看网站 | 色a网 | 国产精品福利久久久 | 乱男乱女www7788| 午夜久久久久久久久久久 | 亚洲专区一二三 | 国产精品久久久久久久久久不蜜月 | 色婷婷激情电影 | 福利一区二区在线 | 在线精品在线 | 欧美一区二区在线免费看 | 亚洲国产精品视频 | 国产在线观看你懂得 | 久久爱影视i | 91人人网 | 亚洲精品一区二区三区四区高清 | 高清有码中文字幕 | 免费看亚洲毛片 | 日韩在线观看视频一区二区三区 | 黄色网大全 | 天天爱天天操天天爽 | 欧美精品一区二区三区一线天视频 | 精品国产亚洲日本 | 精品久久影院 | 久草在线在线精品观看 | 久久香蕉电影网 | 很黄很污的视频网站 | 超碰在线最新网址 | 日本成人中文字幕在线观看 | 91久久久久久国产精品 | 嫩草伊人久久精品少妇av | 久久久久久久久久久久国产精品 | 国产黄色视 | 男女啪啪视屏 | 日韩av成人在线观看 | 久久免费视频2 | 香蕉视频久久 | 日本h在线播放 | 激情综合亚洲 | 91日本在线播放 | 久久午夜鲁丝片 | 久久女同性恋中文字幕 | 欧美日韩一区二区三区在线免费观看 | 国产破处视频在线播放 | 国产精品去看片 | 狠狠操综合 | 天天操天天吃 | 91麻豆精品国产91久久久久久 | 亚洲激精日韩激精欧美精品 | 国产精品免费看久久久8精臀av | 三级黄色a| 国产成人在线播放 | 婷婷亚洲五月色综合 | 免费高清在线观看电视网站 | 在线成人av | 免费a视频 | 91夫妻视频 | 亚洲一区美女视频在线观看免费 | 日韩h在线观看 | 欧美一级性视频 | 久久69精品久久久久久久电影好 | 在线欧美日韩 | 国产精品精品视频 | 国产一级黄色av | 不卡的一区二区三区 | 草草草影院| 亚洲精品资源在线 | 伊人精品在线 | 中文在线www | 国产裸体永久免费视频网站 | 久久久久高清 | 久草在线观看视频免费 | 久久久久久黄色 | 欧美一区二区在线免费观看 | 亚洲第二色 | 亚洲精品久久久久999中文字幕 | 国产91精品看黄网站 | 午夜精品久久久久久久99婷婷 | 亚洲视频 在线观看 | aⅴ精品av导航 | 99热精品在线 | 国产黑丝一区二区三区 | 日韩av免费一区 | 久久伊人免费视频 | 中文字幕国语官网在线视频 | 四虎成人免费影院 | 中文字幕123区 | 在线播放精品一区二区三区 | 91 在线视频| 久久高清av | 91av免费观看 | 国产性xxxx | 青春草视频在线播放 | 色综合人人 | 中文字幕一区三区 | 丁香亚洲| 丝袜制服综合网 | 国产色一区| 国产手机在线观看视频 | 国产精品久久久久久久久久免费 | 奇米影视在线99精品 | 久久综合99| 超碰97在线资源站 | 黄网站色欧美视频 | 激情在线免费视频 | 国产精品手机在线观看 | 亚洲久草在线 | 青青草在久久免费久久免费 | 黄色av网站在线免费观看 | 手机在线看a | 久久99国产精品免费网站 | 欧美成天堂网地址 | 午夜精品久久久久久中宇69 | 婷婷视频在线 | 日韩精品一区二 | 天堂v中文 | 草久久久 | 国产第一页在线观看 | 免费欧美精品 | 久久理论电影 | 中文字幕免费久久 | a在线观看国产 | 麻豆综合网 | 成人小视频在线观看免费 | 91精品国产成 | 久久成 | 国产亚洲视频在线免费观看 | 在线看小早川怜子av | 欧美污污网站 | 久久99国产精品 | 精品无人国产偷自产在线 | 五月激情久久 | 欧美日韩国产一区二区三区 | 精品国产一区二区三区久久久 | 色婷婷五 | 在线电影91| 欧美日韩在线视频观看 | 日韩中文在线电影 | 最新国产精品拍自在线播放 | 日韩丝袜在线观看 | 一区中文字幕在线观看 | 久久成人国产精品免费软件 | 久久av网址 | 99久久99久久精品国产片果冰 | 美女黄频免费 | 国产精品福利视频 | 色操插 | 欧美一级特黄高清视频 | 久久婷婷国产色一区二区三区 | 国产色中涩 | 国产福利免费在线观看 | 激情五月伊人 | 精品主播网红福利资源观看 | 91人人爽人人爽人人精88v | 精品影院一区二区久久久 | 97在线观看免费观看 | 国产一区二区在线精品 | 亚洲人在线视频 | 久久兔费看a级 | 在线国产能看的 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 在线观看视频你懂 | 日韩中文字幕91 | 中文字幕日本特黄aa毛片 | 国产一级电影免费观看 | 尤物97国产精品久久精品国产 | 亚洲色图美腿丝袜 | 免费欧美精品 | 色综合咪咪久久网 | 日韩欧美精品在线观看视频 | 五月婷婷狠狠 | 黄色a一级视频 | 免费日韩 精品中文字幕视频在线 | 欧美无极色| 黄色小视频在线观看免费 | 日一日操一操 | 亚洲国产综合在线 | 国产小视频你懂的在线 | 狠狠五月天| 国产精品区免费视频 | 国产特黄色片 | 午夜视频在线观看一区 | 精品国产免费一区二区三区五区 | 97超碰人人看 | 亚洲午夜精品一区 | 欧美aaa级片 | 久久久久高清 | 久久久国产精品人人片99精片欧美一 | 久久久av免费 | 91大神免费视频 | av软件在线观看 | 亚洲一区二区观看 | 国产一区高清在线观看 | 国产999| 香蕉网在线观看 | 亚洲精品高清在线 | 欧美a影视 | 99热国产在线观看 | 9在线观看免费高清完整版在线观看明 | 毛片永久免费 | 亚洲永久精品在线 | 在线看黄色的网站 | 日韩视频一区二区三区 | 欧美亚洲三级 | 国内精品久久久久久久久 | 久久久91精品国产 | 日本黄色片一区二区 | 久草在线最新免费 | 久久婷亚洲五月一区天天躁 | 欧美色精品天天在线观看视频 | 亚洲精品视频在线观看免费视频 | 久久精品一区二区三区四区 | 五月亚洲 | 国产在线视频一区二区三区 | 久草在线视频首页 | 最新一区二区三区 | 国产在线国产 | 色姑娘综合天天 | 99精品在线免费观看 | 国产小视频国产精品 | 91网站观看| 成人精品视频 | 色婷婷综合久久久中文字幕 | 在线视频一二区 | 色婷婷亚洲综合 | 丁香六月天婷婷 | 日韩免费av在线 | 狠狠色丁香婷婷综合橹88 | 91九色最新地址 | 久久免费一 | 亚洲国产视频在线 | 日本精品在线 | 三级小视频在线观看 | 91av视频免费在线观看 | 在线观看日本高清mv视频 | 国产裸体bbb视频 | 久久电影国产免费久久电影 | 欧美在线观看禁18 | 97人人看 | 欧美极品久久 | 日本aaa在线观看 | 国产网站av| 五月天婷亚洲天综合网精品偷 | 97视频在线免费播放 | 国产精品久久久久久模特 | 日本黄色免费观看 | 午夜久久久久久久久久影院 | 日本精品视频免费观看 | 国产精品麻豆果冻传媒在线播放 | 国产精品资源在线 | 免费高清在线观看成人 | 日韩欧美视频免费在线观看 | 青草视频在线播放 | 亚洲,国产成人av | 超碰av在线免费观看 | 亚洲在线视频观看 | 99精品系列| 麻豆手机在线 | 国产v亚洲v | 在线视频 你懂得 | 国产黄色电影 | 日韩电影在线观看一区二区 | 久久免费视频这里只有精品 | 国产精品乱码久久久 | 久久久美女| 日韩在线资源 | 精品夜夜嗨av一区二区三区 | 九九热视频在线 | 探花视频在线版播放免费观看 | 国产一区二区不卡视频 | 综合久久久久久久 | 国产性xxxx| 日韩精品一区在线观看 | 国产高清免费 | 国产欧美在线一区 | 夜夜躁日日躁狠狠久久av | 在线亚洲人成电影网站色www | 黄www在线观看 | 香蕉视频国产在线 | 久久亚洲视频 | 亚洲天堂网在线视频观看 | 亚洲视频电影在线 | 日本精品一区二区三区在线播放视频 | 96久久欧美麻豆网站 | 精品视频国产 | 国产美女精品久久久 | www.福利视频| 国产三级视频在线 | 免费看精品久久片 | 91一区啪爱嗯打偷拍欧美 | 精品视频 | 99久久99久久精品国产片果冰 | av千婊在线免费观看 | 91亚洲欧美 | 精品国产一区二区三区四区在线观看 | 久久久久久福利 | 国产日产精品一区二区三区四区 | 超碰com| 国产成人久久av977小说 | 成人av高清 | 国产不卡网站 | 久久精品日产第一区二区三区乱码 | 国产亚洲婷婷免费 | 国产麻豆剧传媒免费观看 | www四虎影院 | 黄色在线成人 | 国产精品欧美日韩在线观看 | 一区精品在线 | 亚洲日韩欧美视频 | 一区二区三区免费在线观看视频 | 日韩a在线看 | 亚洲网站在线看 | 精品久久久一区二区 | 亚洲激情 欧美激情 | 亚洲开心激情 | 99精品在线免费视频 | 国产无限资源在线观看 | 亚洲第一中文字幕 | 91在线操 | 久久伊人国产精品 | 天天射天天射 | 最近免费在线观看 | 国产1级视频| 国产精品一区二区av日韩在线 | 亚洲精品在 | 欧美日韩免费视频 | 激情欧美一区二区免费视频 | 久草在线视频首页 | 日韩剧| 91av片| 狂野欧美激情性xxxx | 欧美午夜理伦三级在线观看 | 超碰午夜 | 狠狠狠色丁香婷婷综合久久五月 | 永久免费精品视频网站 | 西西444www大胆无视频 | 91.麻豆视频 | 久久99国产精品久久99 | 国产91aaa | 久久久久女人精品毛片九一 | 久久深夜 | 国产精品18久久久久vr手机版特色 | 欧美性超爽 | 婷婷色亚洲 | 国内精品久久久精品电影院 | 久久艹国产视频 | 在线中文字幕视频 | 久久久久久久久久久黄色 | 激情综合国产 | 一区二区av | 亚洲精品女人 | 国产一二三精品 | 免费在线观看黄色网 | 色婷婷中文 | 激情五月婷婷综合网 | 免费福利在线观看 | 久久不卡电影 | 国产91九色蝌蚪 | 丁香婷婷深情五月亚洲 | 日韩伦理片hd | 日韩免费视频一区二区 | 国产成人一区二区三区免费看 | 99免费在线视频 | 免费在线播放黄色 | 日韩黄色中文字幕 | 五月婷在线播放 | 成人av在线直播 | 国产成人精品久久久久 | 激情综合网五月婷婷 | 国产精品永久免费 | www黄| 久久99精品国产99久久 | 久久综合影视 | 国产亚洲精品无 | 99热免费在线 | 久久99热精品| 香蕉精品在线观看 | 丁香久久综合 | 亚洲在线网址 | 国产精品久久久久久久av大片 | 99视频这里只有 | 日韩av午夜在线观看 | 激情五月婷婷综合 | 91av视频| 99视频国产精品 | 国产日韩av在线 | 成人在线观看免费 | av中文电影 | 丁香视频全集免费观看 | 欧美视频18 | 日本论理电影 | 精品久久久久久久久久久久久久久久久久 | 麻豆一精品传二传媒短视频 | 69视频网站 | 91在线一区| 亚洲激情六月 | 91精品视频播放 | 国产成人专区 | 久久精品99久久久久久 | 国产在线欧美在线 | 国产一级不卡视频 | 99免费视频 | 黄色三级在线看 | 久久激情视频免费观看 | 国产日产精品一区二区三区四区的观看方式 | 国产乱码精品一区二区蜜臀 | 黄色a一级视频 | 99精品国产福利在线观看免费 | 看毛片的网址 | 超碰成人av | 国内精品中文字幕 | 欧美色图88| 91视频中文字幕 | 欧美日韩高清不卡 | 免费av在线 | 欧美精品xxx | 色在线视频网 | 在线观看国产中文字幕 | 成人av在线一区二区 | 日本爱爱免费视频 | 精品国产自在精品国产精野外直播 | 欧美一级免费黄色片 | 成人av片免费看 | av福利电影 | 欧洲色综合 | 日韩大片免费在线观看 | 久久精品伊人 | 国产精品资源网 | 免费电影一区二区三区 | 国产女人40精品一区毛片视频 | 国产高清视频免费观看 | 亚洲在线网址 | 欧美国产日韩久久 | 久久综合狠狠狠色97 | 久久久电影 | 亚洲欧美婷婷六月色综合 | 亚洲欧洲av | 丁香高清视频在线看看 | 亚洲一区动漫 | 日韩成人精品在线观看 | 麻豆视频免费播放 | 狠狠的日日 | 日韩视频一二三区 | 欧美日本三级 | 中文字幕在线观看免费高清完整版 | 亚洲视频资源在线 | 婷婷综合久久 | 97色国产 | 午夜精品久久久99热福利 | 国产免费又爽又刺激在线观看 | 波多野结衣在线观看视频 | 国产成人精品不卡 | 亚洲国产精品久久久久久 | 国产精品九九久久久久久久 | 亚洲经典在线 | 干狠狠| 免费a级观看 | 久久精品99国产国产 | 久久久久伊人 | 亚洲国产精品成人va在线观看 | 天天插天天射 | 久久亚洲欧美日韩精品专区 | 精品视频免费播放 | 日韩视频www| 日韩免费久久 | 成年人app网址 | 超碰在线色 | 黄色在线观看免费 | 日韩精品欧美视频 | 国产美女免费观看 | 麻豆免费精品视频 | 国产在线不卡视频 | 天天综合精品 | 久久亚洲日本 | 激情欧美xxxx| 天天射综合网站 | 欧美精品久久久久a | 国产精品美女久久久久久免费 | 在线观看黄污 | 日韩av中文在线 | 久久国产精品第一页 | 在线超碰av| 最新久久免费视频 | 韩国一区二区三区在线观看 | 日黄网站 | 日本在线h | 色欧美视频 | 黄色1级大片 | 亚洲黄色在线 | 在线看免费 | 久久电影国产免费久久电影 | 波多野结衣在线观看一区 | 超碰97网站| 久草a在线| 91自拍91| 欧美韩日精品 | 免费a网站 | 探花视频在线版播放免费观看 | 欧美另类69 | 欧美成人亚洲 | 国内精品久久久久久久97牛牛 | 欧美国产精品久久久久久免费 | 国产一级不卡毛片 | 亚洲成人av在线电影 | 夜夜操狠狠干 | 麻豆传媒在线免费看 | 欧美少妇xxxxxx | 国产永久网站 | 国产日韩精品视频 | 在线免费av观看 | 国产1区2区3区精品美女 | 亚洲九九影院 | 婷婷丁香五 | 国产 色| 91视频高清| 黄色影院在线免费观看 | 福利视频网址 | 亚洲日本在线一区 | 狠狠狠狠狠狠天天爱 | 国产在线精品一区二区 | 91精品久久久久久综合乱菊 | 91精品久久久久 |