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

微信小程序端智能項目工程化實踐

開發 前端
本文介紹可以在微信小程序上應用的端智能技術方案,聚焦 TensorFlow.js 推理和微信原生推理,詳細講解這兩種方案在項目中的應用過程,為小程序開發者提供可復用的端智能技術選型策略與工程化解決方案。

本文提供配套演示代碼,可下載體驗:Github | weixin-mini-ai

01背景

隨著AI浪潮的到來,各行各業都在利用AI賦能自身的業務,我們在vivo+云店項目上也進行了端智能探索,并成功應用到個性化商品推薦業務上,小程序端直接本地調用AI模型進行商品推薦,上線后商品點擊率提升了30%,取得了不錯的業務效果,接下來介紹如何讓微信小程序具備端智能能力。

02、技術選型

在項目啟動之前我們進行了相關技術調研,發現完備的微信小程序端智能方案并不是很多,最終鎖定了 TensorFlow.js 推理和微信原生推理這兩種方案,它們有著相對完善的說明介紹,整體對比如下表所示。



推理方案





提供方





最低基礎庫版本





接入復雜度





TensorFlow.js推理





谷歌





2.7.3





復雜





微信原生推理





微信





2.30.0





簡單



2.1TensorFlow.js 推理

TensorFlow.js 是谷歌開發的機器學習開源項目,致力于為Javascript提供具有硬件加速的機器學習模型訓練和部署,在小程序端以插件的方式封裝了TensorFlow.js庫,方便小程序進行調用,同時需要配合安裝相應的TensorFlow.js npm包來使用,接入步驟相對繁瑣,但支持更低的微信基礎庫版本。

2.2微信原生推理

微信原生推理是指調用小程序AI通用接口來進行推理,它是一套官方提供的通用AI模型推理解決方案,開發者無需關注其內部實現,只需要提供訓練好的ONNX模型,小程序內部就可以自動完成推理。該方案接入步驟很少,目前還處于Beta階段,所需要的微信基礎庫版本更高。

03、項目接入

技術方案選定好以后進入到項目接入環節,接下來將會分別介紹 TensorFlow.js 推理和微信原生推理方案的接入細節以及在項目接入過程中遇到的一些問題。

3.1模型處理

在開始之前需要準備一個訓練好的個性化商品推薦模型,本次模型是基于TensorFlow框架來進行訓練的,模型訓練完保存的格式是默認的SavedModel格式,但這個格式無法在小程序上直接使用,還需要進行相應的格式轉換。

3.1.1 TensorFlow.js 格式

如果使用TensorFlow.js推理方案,要將SavedModel格式轉換成TensorFlow.js格式,可以安裝@tensorflow/tfjs-converter包,這個包專門用來將TensorFlow模型格式轉換成Web端可加載的TensorFlow.js格式,具體轉換命令如下:

tensorflowjs_converter --input_format=keras_saved_model output output/tfjs_model

執行命令后會生成model.json模型拓撲文件和后綴為.bin的二進制權重文件。

3.1.2 ONNX 格式

如果使用微信原生推理方案,同樣要將SavedModel格式轉換成ONNX模型格式,可以安裝tf2onnx庫,這個庫可以將TensorFlow模型格式轉換成ONNX模型格式,具體轉換命令如下:

python -m tf2onnx.convert --saved-model output --output output/model.onnx

執行命令后會生成一個后綴為.onnx的文件。

3.1.3 模型更新

通過前面的操作得到了不同格式的模型文件,我們將這些模型文件放到靜態資源服務器上,小程序端遠程加載模型文件,需要注意模型需要定期用最新的數據進行訓練更新,因此在獲取模型鏈接時我們通過服務端接口來獲取,方便隨時進行更新。

3.2小程序AI能力封裝

小程序端相對于其它端有很大的不同,小程序代碼包體積受限,單個包體積不能超過2MB,因此在設計AI模型調用方案時需要考慮到代碼體積問題。vivo+云店項目是基于uniapp框架開發的小程序,接下來介紹不同推理方案的接入細節。

3.2.1 TensorFlow.js推理接入

TensorFlow.js 推理在接入之前需要在小程序管理后臺安裝一下TensorFlow.js插件,直接搜索wx6afed118d9e81df9即可完成添加:

接著在項目代碼倉啟用該插件,并安裝TensorFlow.js相關依賴,可以按需加載必要的依賴,本次項目使用了tfjs-core、tfjs-layers、tfjs-backend-webgl和fetch-wechat這幾個包。安裝完相關依賴以后,還需要初始化插件:

const plugin = requirePlugin('tfjsPlugin')
plugin.configPlugin({
  // polyfill fetch function
  fetchFunc: fetchWechat.fetchFunc(),
  // inject tfjs runtime
  tf,
  // inject webgl backend
  webgl,
  // provide webgl canvas
  canvas: wx.createOffscreenCanvas()
})

初始化完成以后就可以加載使用模型了,然而在小程序打包上傳的時候提示主包體積嚴重超包,原因是TensorFlow.js相關依賴包體積太大了,達到了1.3MB左右,嚴重影響了正常的業務代碼體積,因此還要解決超包問題。我們最終采用了分包異步加載的方式將相關依賴剝離出主包,具體步驟如下:

(1)封裝分包組件

將TensorFlow.js相關依賴的引入和插件初始化邏輯封裝到分包組件當中,采用事件傳遞的方式將引入的TensorFlow模塊傳遞給父頁面。

// 組件路徑/sdkPackages/tensorflow/index
<template>
  <div></div>
</template>
<script>
import * as tf from '@tensorflow/tfjs-core'
import * as tfLayers from '@tensorflow/tfjs-layers'
...
export default {
  mounted() {
    this.initTf()
  },
  methods: {
    initTf() {
      // 插件初始化
      ...
      // 將引入的依賴模塊以事件的方式拋出
      this.$emit('start', { tf, tfLayers })
    }
  }
}
</script>

(2)異步分包加載

封裝的組件想要在父頁面中進行異步分包加載,還需要在page.json文件中進行異步分包組件引入配置,設置完成以后直接在父頁面里使用即可,具體配置如下:

{
  "path": "pages/demo/index",
  "style": {
    "navigationBarTitleText": "demo",
    "componentPlaceholder": {
      "tf-com": "view"
    },
    "usingComponents": {
      "tf-com": "/sdkPackages/tensorflow/index"
    }
  }
}

需要注意,父頁面獲取的異步分包組件傳遞的事件值和普通Vue組件傳遞的事件值不太一樣,需要在 e.detail.args[0]中獲取到。

<template>
   <div>
    <!-- 父頁面引入分包異步組件 -->
    <tf-com @start="startTf"></tf-com>
   </div>
</template>
<script>
export default {
  methods: {
    startTf(e) {
      //獲取子組件傳遞的Tensorflow模塊
      const { tf, tfLayers } = e.detail.__args__[0]
      ....
    }
  }
}
</script>

完成上面兩個步驟,TensorFlow.js相關依賴會全部打包到分包當中,不會占用主包體積。

到這里 TensorFlow.js 推理相關準備已全部完成,以下是調用示例,主要分為兩個階段:

  • 模型加載:調用loadLayersModel方法加載遠程模型
  • 模型推理:調用模型的predict方法輸出推理結果
export class TfModel {
  modelUrl
  modelName
  model
  hasInited = false
  constructor({ modelUrl, modelName, spuIdList}) {
    this.modelUrl = modelUrl
    this.modelName = modelName
  }
  // 模型加載
  async load() {
    this.model = await tfLayers.loadLayersModel(this.modelUrl)
    this.hasInited = true
  }
  // 模型推理
  async run(inputList) {
    const prediction = this.model.predict(tf.tensor([inputList]))
    const values = await prediction.array()
    console.log('模型推理結果:', values)
  }
}

由上可以看出TensorFlow.js推理方案缺點是接入步驟挺多,需要處理超包問題,但優點是支持的微信版本范圍廣,更重要的是它支持本地開發者工具調試。看到這里可能有人會疑問為什么支持本地調試也是優點?繼續往下看就能得到答案。

3.2.2 微信原生推理接入

微信原生推理方案不需要安裝任何依賴,僅使用微信提供的API即可完成模型調用,以下是調用示例:

export class OnnxModel {
  modelUrl
  modelName
  session
  hasInited = false// 模型是否初始化完成
  constructor({ modelUrl, modelName }) {
    this.modelUrl = modelUrl
    this.modelName = modelName
  },
  // 模型加載初始化
  load() {...},
  // 創建推理會話
  createInferenceSession(modelPath) {...},
  // 推理運行
  run(inputList) {...}
}

整個模型加載推理分為下面3個階段

(1)模型加載初始化

模型先遠程加載,下載到本地同時創建模型緩存文件,當二次加載時會查看本地是否有緩存的模型文件,如果有緩存就直接使用緩存數據。

load() {
  return new Promise((resolve, reject) => {
    const modelPath = `${wx.env.USER_DATA_PATH}/${this.modelName}.onnx`
    // 判斷之前是否已經下載過onnx模型
    wx.getFileSystemManager().access({
     path: modelPath,
     success: () => {
       // 模型有本地緩存
       // 創建推理會話
       this.createInferenceSession(modelPath)
       ...
     },
     fail: (res) => {
       // 遠程加載onnx模型
       wx.downloadFile({
         url: this.modelUrl,
         success: (result) => {
           wx.getFileSystemManager().saveFile({
             tempFilePath: result.tempFilePath,
             filePath: modelPath,
             success: (res) => {
               // 創建推理會話
               const modelPath = res.savedFilePath
               this.createInferenceSession(modelPath)
               ...
             },
             fail: (err) => { reject(err) }
           })
         }
         fail: (err) => { reject(err) }
       })
     }
  })
})

(2)創建推理會話

模型加載完以后調用wx.createInferenceSession創建一個session用來模型推理。

createInferenceSession(modelPath) {
  return new Promise((resolve, reject) => {
   this.session = wx.createInferenceSession({
     model: modelPath
   })
   // 監聽error事件
   this.session.onError((error) => {
     reject(error)
   })
   this.session.onLoad(() => {
     resolve()
   })
 })
}

需要注意,在實際代碼調試時發現本地開發者工具目前還不支持該API,只能真機調試。

(3)執行推理

創建好session以后就可以執行模型推理了,直接調用session.run方法即可。

async run(inputList){
const input = {
   type: 'float32',
   shape: [1, 8],
   data: new Float32Array(inputList).buffer
 }
const res = await this.session.run({ input })
 console.log('onnx模型推理結果:', Array.from(new Float32Array(res.output.data)))
}

到這里微信原生推理方案也介紹完了,可以看出它的優點是接入步驟很少,僅占用很少代碼體積,但它的缺點也很明顯,不能本地調試,而且要求的基礎庫版本高,目前處于Beta階段,還不清楚線上不同系統機型是否都支持。

3.3組合調用

為了保證小程序端智能的穩定運行和更廣范圍的微信版本支持,同時兼顧本地開發體驗,我們將兩種方案組合起來使用,優先使用接入簡單的微信原生推理,其次使用TensorFlow.js 推理。調用示例如下:

async initAI(){
  if (wx.canIUse('getInferenceEnvInfo')) {
    // 基礎庫滿足微信原生推理
    await new Promise((resolve) => {
      wx.getInferenceEnvInfo({
        success: async () => {
          // 調用微信原生推理
          ...
          resolve()
        },
        fail: (res) => {
          // 調用TensorflowJS推理
          ...
          resolve()
        }
      })
    })
  } else if(checkVersion()){
    // 檢查基礎庫版本,符合條件調用TensorflowJS推理
    ...
  } else {
    // 不支持端智能,兜底處理
    ...
  }
}

通過調用微信getInferenceEnvInfo方法可以獲取通用AI推理引擎版本,如果當前手機支持微信原生推理就會觸發成功的回調,否則會觸發失敗的回調,如果基礎庫不支持微信原生推理就會去判斷是否滿足TensorFlow.js推理調用條件,通過這樣的方式動態選擇當前手機支持的推理方式,如果都不支持就走兜底處理方案。通過該方式,線上90%以上的用戶成功走到了端智能場景。

3.4性能效果

當小程序端智能能力正式上線以后,推薦設計一些埋點監控模型推理執行的性能效果,包括模型推理運行各階段耗時和模型推理異常日志,方便后續的迭代優化。



推理方案





初始化耗時(ms)





運行耗時(ms)





分包加載耗時(ms)





總耗時(ms)





TensorFlow.js推理





321





252





971





1544





微信原生推理





531





19





0





550



上表是業務上線后兩種推理方案的各階段平均耗時,我們使用的模型大小在110KB左右,從數據表現來看微信原生推理方案性能更好,總耗時僅需要550ms,而TensorFlow.js推理方案總耗時多是因為需要加載異步分包組件,當然可以考慮設置分包預加載來減少前置等待。

04、總結

整體回顧一下,本文介紹了兩種可以在微信小程序上落地實施的端智能工程化解決方案:TensorFlow.js推理和微信原生推理,在項目接入過程中針對以下幾個方面進行了處理:

  • 模型格式:一鍵命令格式轉換,適配不同推理方案
  • 代碼包體積:異步分包加載,解決TensorFlow.js相關依賴超包問題
  • 開發體驗、支持范圍:組合兩種方案,保障開發體驗,最大化覆蓋微信版本范圍

希望本文采取的方案以及處理的問題對你進行小程序端智能技術選型有所幫助

責任編輯:龐桂玉 來源: vivo互聯網技術
相關推薦

2019-06-21 10:40:25

微信小程序前端

2023-09-15 10:33:45

前端工程化commit

2022-10-09 14:50:24

前端pnpm工具

2023-06-29 07:37:26

2017-05-08 15:03:07

微信小程序開發實戰

2018-05-18 10:08:15

人工智能移動平臺大數據

2024-07-02 10:48:04

語言項目配置

2023-06-26 22:18:19

2020-03-10 10:06:08

小程序微信開發

2023-01-12 17:53:42

2022-09-11 13:22:13

開源微信小程序

2016-10-20 21:02:12

微信小程序javascript

2017-01-09 10:01:49

微信小程序

2017-06-09 10:40:00

微信小程序架構分析

2016-09-28 18:10:59

微信程序MINA

2017-06-09 12:58:20

微信小程序架構分析

2017-06-09 10:06:54

微信小程序架構分析

2016-11-04 10:31:49

微信程序指南

2016-11-22 11:23:52

微信小程序騰訊微信

2016-09-27 15:40:58

微信程序前端
點贊
收藏

51CTO技術棧公眾號

日韩视频在线观看一区二区三区| 欧美国产亚洲另类动漫| 一区二区三区日韩欧美| 亚洲图片欧美日产| 拔插拔插海外华人免费| 在线观看视频中文字幕| 在线日本制服中文欧美| 亚洲图片欧美色图| 7777精品伊久久久大香线蕉语言| 欧美人与性囗牲恔配| 免费成人在线电影| 国产成人精品www牛牛影视| 中文字幕欧美日韩va免费视频| www.av中文字幕| 亚洲av无码一区二区乱子伦| 亚洲成人99| 91 com成人网| 中文字幕一区二区三区四区五区人 | 欧美一级黄色录像片| 久久久蜜桃一区二区| 欧美精品国产白浆久久久久| 亚洲国产精品嫩草影院| 岛国视频一区免费观看| 久久免费精彩视频| gogo人体一区| 午夜成人在线视频| 久久久久久高清| 粉嫩aⅴ一区二区三区| 哺乳一区二区三区中文视频| 欧美日韩精品三区| 最新不卡av| 99产精品成人啪免费网站| 91精品秘密在线观看| 日韩经典一区二区三区| 亚洲午夜精品久久久久久人妖| 性感美女一级片| 久久国产欧美| 中文字幕亚洲欧美在线| 亚洲国产果冻传媒av在线观看| 国产传媒在线| 中文亚洲免费| 亚洲午夜小视频| 午夜男人的天堂| 亚洲伊人av| 中文字幕欧美国产| 91亚洲人电影| 日韩久久久久久久久| 国产videos久久| 91 com成人网| 午夜视频在线网站| av资源在线播放| 久久综合色播五月| 国产精品欧美激情| 久久成人在线观看| 神马久久一区二区三区| 91精品在线一区二区| 超碰在线播放91| 精灵使的剑舞无删减版在线观看| 91啦中文在线观看| 91久久久久久国产精品| 一级特黄aaa大片| 伊人蜜桃色噜噜激情综合| 亚洲人a成www在线影院| 亚洲第一色av| 超碰在线公开| 红桃av永久久久| 香蕉视频在线网址| 久做在线视频免费观看| 99精品视频在线观看免费| 国产精品亚洲欧美导航| 精品国产欧美日韩不卡在线观看 | 欧美三级韩国三级日本一级| 天堂av在线中文| 日韩大片b站免费观看直播| 国内成+人亚洲+欧美+综合在线| 97视频国产在线| 日本少妇aaa| 亚洲黄页在线观看| 一区二区在线视频播放| 少妇被狂c下部羞羞漫画| 天天操综合520| 日韩女优视频免费观看| 冲田杏梨av在线| 天堂av在线| 亚洲伊人色欲综合网| 欧美人成在线观看| 在线看福利影| 国产精品成人午夜| 欧美日韩在线一二三| 亚洲免费不卡视频| 国产麻豆91精品| 国产精品视频久久久久| 99久久精品无免国产免费| 成人av在线观| 99视频在线播放| 国产精品久久久久久69| 热久久一区二区| 欧洲日韩成人av| 国产午夜视频在线| 在线观看国产精品入口| xxxxx成人.com| 香蕉成人在线视频| 在线观看不卡| 国产精品视频一| 狠狠综合久久av一区二区| 国产色91在线| 日韩欧美亚洲日产国产| 国产视频网址在线| 国产欧美日韩激情| 国产精品无码免费专区午夜| 亚洲资源一区| 中文欧美字幕免费| www污在线观看| 久久91视频| 欧美日韩一区在线| 中文字幕人妻一区二区三区| 欧美激情另类| 菠萝蜜影院一区二区免费| 日韩精品乱码久久久久久| 麻豆视频观看网址久久| 国产中文日韩欧美| 国产女18毛片多18精品| 久久久久久久久岛国免费| 秋霞毛片久久久久久久久| 国产色在线 com| 亚洲va中文字幕| 亚洲av毛片在线观看| 日本亚洲视频| 亚洲精品一区二区三区福利| 在线免费观看a级片| 亚洲综合色网| 国产在线播放不卡| а天堂8中文最新版在线官网| 欧美高清在线精品一区| 国产96在线 | 亚洲| 日韩免费一级| 久热爱精品视频线路一| 国产一级一片免费播放| 国内精品伊人久久久久av影院| 日韩精品久久一区二区三区| 一本大道色婷婷在线| 亚洲国产精品va| a级大片在线观看| 999国产精品| 国产精品久久久久久av| 99久久国产免费| 亚洲欧美国产高清| 五十路熟女丰满大屁股| 91蝌蚪精品视频| 欧美国产日韩一区二区三区| 中文字幕视频网站| 看国产成人h片视频| 四虎永久国产精品| 色图在线观看| 欧美大片国产精品| 久久久久久久久久99| 成人午夜av电影| 色一情一区二区三区四区| 成人av三级| 一区二区三区视频观看| 中文天堂在线播放| av一区二区久久| 亚洲制服欧美久久| 中文在线аv在线| 亚洲欧美日韩综合| 九九热这里有精品视频| 成人性色生活片| 免费无码不卡视频在线观看| 偷拍自拍亚洲| 亚洲女人天堂成人av在线| 亚洲欧美另类在线视频| 国产伦精品一区二区三区免费迷| 男插女免费视频| 大桥未久女教师av一区二区| 亚洲性日韩精品一区二区| 久久久久久av无码免费看大片| 国产成人99久久亚洲综合精品| 日本中文字幕在线视频观看| 亚洲ab电影| 国产免费亚洲高清| 黄页在线观看免费| 在线电影院国产精品| 色噜噜在线观看| 精品96久久久久久中文字幕无| 精品国产一区二区三区免费 | 国产色噜噜噜91在线精品 | 日本大胆人体视频| 日本精品另类| 精品五月天久久| 国产一级中文字幕| 久久九九久精品国产免费直播| 日本www.色| 国内精品久久久久久久97牛牛 | aaa在线观看| 色婷婷综合激情| 欧美黑人欧美精品刺激| 日本不卡视频一二三区| 国产视频在线观看网站| 国产探花一区在线观看| 亚洲最大福利视频网| 日本综合字幕| 亚洲人成网7777777国产| 国产一区二区在线视频观看| 午夜在线电影亚洲一区| 亚洲女人毛茸茸高潮| 99精品欧美一区二区三区小说| 日日干夜夜操s8| 日韩夫妻性生活xx| 国产精品热视频| gogo高清在线播放免费| 最近2019年中文视频免费在线观看| 国产寡妇亲子伦一区二区三区四区| 日韩一区在线播放| 交换做爰国语对白| 老牛嫩草一区二区三区日本| 欧美一级二级三级| 亚洲超碰在线观看| 国产在线观看精品一区二区三区| 涩涩av在线| 欧美精品久久久久a| 蜜桃91麻豆精品一二三区 | 久久人人爽人人爽人人| 欧美激情在线观看视频免费| 呦呦视频在线观看| 成人免费高清在线观看| 三年中文在线观看免费大全中国| 日韩av一区二区在线影视| 波多野结衣家庭教师在线| 亚洲无线视频| 欧美乱做爰xxxⅹ久久久| 99久久综合| 99久re热视频这里只有精品6| 视频精品导航| 热草久综合在线| 小视频免费在线观看| 午夜精品在线视频| av中文字幕在线看| 欧美激情第6页| 羞羞电影在线观看www| 欧美不卡视频一区发布| 四虎永久在线精品免费网址| 色婷婷综合久久久久中文一区二区 | 亚洲美女色禁图| 欧美日韩成人一区二区三区| 都市激情久久| 国产日韩欧美精品| 日本肉肉一区| 国产精品久久电影观看| 日韩大尺度黄色| 国产精品成人播放| 成人精品一区二区三区电影| 欧美老女人性视频| 可以免费看污视频的网站在线| 欧美日韩mp4| 国产又粗又大又黄| 欧美一区二区三区在| 伊人365影院| 午夜亚洲福利老司机| 黄色激情视频在线观看| 婷婷久久综合九色国产成人| 成人免费视频毛片| 亚洲同性gay激情无套| 污污污www精品国产网站| 99热精品一区二区| wwwwww日本| 高清在线观看日韩| 成年人看片网站| 免费成人在线影院| 久久久久久久午夜| 久久九九99| 黄色一级片免费的| 国产不卡免费视频| 成人精品在线观看视频| 国产精品丝袜一区| 青青草在线观看视频| 精品国产精品自拍| 中文字幕在线视频第一页| 日韩视频永久免费| 亚洲午夜无码久久久久| 制服丝袜av成人在线看| 刘亦菲久久免费一区二区| 国产一区二区三区高清在线观看| 美女免费久久| 亚洲男人天堂视频| 亚洲视频tv| 亚洲美女久久久| 日本视频在线免费观看| 欧美精品激情在线观看| 成人精品国产亚洲| 精品免费视频123区| 精品一区二区三| 欧美久久久久久久| 亚洲女同中文字幕| 亚洲国产精品久久久久爰色欲| 伊人成人在线视频| 手机看片福利盒子久久| 男女av一区三区二区色多| 午夜免费福利视频在线观看| 成人免费黄色在线| www日韩在线| 亚洲三级视频在线观看| 天天插天天操天天干| 欧美日韩五月天| 亚洲人成色777777精品音频| 蜜臀久久99精品久久久久久宅男 | 色综合中文字幕| 国产黄色一级大片| 日韩一区二区精品| a天堂中文在线88| 91av在线视频观看| 日韩免费福利视频| 国产91一区二区三区| 久久综合成人| 久久综合久久色| 免费人成黄页网站在线一区二区| 91精品人妻一区二区三区四区| 欧美国产禁国产网站cc| www.国产一区二区| 亚洲高清免费观看高清完整版| 久操视频在线免费播放| 日韩免费在线看| 久久人体av| 欧美日韩一区二区三区免费| 在线成人亚洲| 人妻互换一二三区激情视频| av亚洲精华国产精华精华| 午夜激情福利网| 欧美精品色一区二区三区| 国产精品天堂| 国产999在线观看| 婷婷五月色综合香五月| 全黄性性激高免费视频| 国产福利电影一区二区三区| 波多野结衣办公室双飞| 亚洲免费观看视频| 国产精品人妻一区二区三区| 中文字幕成人精品久久不卡| 精品3atv在线视频| 成人国产精品色哟哟| 一区二区三区四区高清视频 | 亚洲高清视频中文字幕| 国产成人精品免费看视频| 美女精品视频一区| 警花av一区二区三区| 精品一区2区三区| 精品动漫一区| av黄色一级片| 欧美日韩免费网站| 97超碰资源站| 久久精品视频在线观看| 爱情岛亚洲播放路线| 国产精品久久精品国产| 精品久久影院| wwww.国产| 国产精品久久99| 国产精品国产三级国产普通话对白| 久久五月情影视| 亚洲一区av| 欧美一级爱爱| 美女视频黄久久| 国产免费无码一区二区视频| 日韩欧美亚洲一二三区| 国产精品一区二区av白丝下载| 久久久国产精品一区| 综合欧美亚洲| 国产成人黄色片| 国产精品色呦呦| 中文字幕精品三级久久久| 亚洲欧美在线第一页| 国产成人精品一区二区三区免费 | 精品成人无码一区二区三区| 欧美性一二三区| 亚洲欧美综合在线观看| 国产91精品网站| 亚洲第一天堂| 亚洲av成人片色在线观看高潮| 色婷婷精品久久二区二区蜜臂av | 亚洲天堂网2018| 亚洲国产一区视频| 国产福利小视频在线观看| 91精品久久久久久久久久| 亚洲久久在线| 国产精久久久久| 日韩欧美在线中文字幕| 日本福利在线| 精品蜜桃一区二区三区| 精品在线一区二区三区| 黄色国产在线播放| 在线一区二区三区四区五区 | 91亚洲精品一区二区乱码| 中文字幕福利视频| 国模视频一区二区| 一区二区中文字幕在线观看| 国产中文字幕免费观看| 中文字幕在线不卡视频| 亚洲欧美日韩成人在线| 91麻豆国产精品| 久久久久在线| 久久精品国产亚洲av无码娇色 | 自拍偷拍你懂的|