精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

99999精品视频| 色偷偷偷综合中文字幕;dd| 精品视频在线观看一区二区| 亚洲成熟女性毛茸茸| 欧美理论片在线播放| 国产99久久久国产精品潘金| 在线观看亚洲区| 色综合av综合无码综合网站| 97视频在线观看网站| 福利视频网站一区二区三区| 日韩美女福利视频| 久久久久亚洲av成人无码电影| 狂野欧美性猛交xxxx| 日本不卡中文字幕| 久久综合色影院| 亚洲一二三av| 国产一区二区三区成人| 精品国产一区二区三区小蝌蚪| 疯狂做受xxxx欧美肥白少妇 | 国产乱论精品| 欧美日韩综合不卡| 91精品久久久久久久久中文字幕| 国精品无码人妻一区二区三区| 高清毛片在线观看| 国产精品久久久久天堂| 精品无人区一区二区三区| 亚洲一区二区色| 午夜精品久久久久久久四虎美女版| 亚洲国产三级网| 欧美一区少妇| 无码人妻熟妇av又粗又大| 欧美午夜影院| 精品久久一二三区| 天天爽人人爽夜夜爽| 999福利在线视频| 亚洲精品乱码久久久久久黑人| 国产激情一区二区三区在线观看 | 国产综合精品久久久久成人av| 黄瓜视频成人app免费| 亚洲国产精品成人综合| 玛丽玛丽电影原版免费观看1977 | 日韩经典在线观看| 一个色免费成人影院| 亚洲国产欧美日韩另类综合| 亚洲激情一区二区| 瑟瑟视频在线免费观看| 99在线精品免费视频九九视| 欧美美最猛性xxxxxx| 国产大学生视频| 国产区一区二| 亚洲资源中文字幕| 永久免费看av| 国产福利视频在线| 亚洲视频在线观看一区| 成人91视频| 日韩电影在线观看一区二区| 日韩午夜电影| 日韩视频―中文字幕| 国模大尺度视频| 日韩欧美久久| 欧美成va人片在线观看| 91蝌蚪视频在线观看| 天堂成人av| 国产性天天综合网| 色狠狠久久av五月综合| 国产无遮挡aaa片爽爽| 亚洲网色网站| 欧美日韩成人一区二区| 女人帮男人橹视频播放| 神马久久久久| 91美女在线观看| 川上优av一区二区线观看| 91国内精品久久久| 中文一区在线| 国产精品v片在线观看不卡| 亚洲欧美另类在线视频| 日韩中文字幕91| 久久大大胆人体| 中文字幕一区二区三区人妻不卡| 国产精品欧美一区二区三区不卡 | 亚洲人吸女人奶水| 激情五月五月婷婷| 2021中文字幕在线| 色av成人天堂桃色av| 超碰人人草人人| 男人的天堂久久| 国产亚洲精品久久久| 任你操精品视频| 欧美婷婷在线| xvideos亚洲| 少妇无套高潮一二三区| 欧美a级片视频| 中文字幕日韩欧美在线| 亚洲国产成人精品综合99| 天天做天天爱天天综合网| 国产亚洲精品美女久久久久| 色哟哟一一国产精品| 亚洲精品影院在线观看| 国产精品欧美风情| 波多野结衣理论片| 久久综合亚州| 国产精品99久久久久久白浆小说| 国产理论片在线观看| 91在线观看污| 免费成人深夜夜行视频| 国产原创精品视频| 狠狠躁夜夜躁人人爽天天天天97 | 亚洲网站在线播放| 久久高清内射无套| 久久久久久夜| 国产精品果冻传媒潘| 黄色美女一级片| 亚洲激情综合| 97在线观看免费高清| 男人操女人的视频网站| 亚洲成av人电影| 日本不卡高字幕在线2019| 国产成人av免费看| 精品夜夜嗨av一区二区三区| 九九九九久久久久| 欧美性孕妇孕交| 国产精品麻豆一区二区 | 日韩在线一二三区| 国产欧美一区二区三区不卡高清| 95在线视频| 日韩理论片中文av| 成人亚洲视频在线观看| 日韩欧国产精品一区综合无码| 亚洲精品456在线播放狼人| 国产ts丝袜人妖系列视频| 亚洲国产欧美日韩在线观看第一区| 亚洲国产精品va在线观看黑人| 182在线观看视频| 天堂在线亚洲视频| 麻豆成人av| 九九精品调教| 国产欧美视频在线观看| 成人免费观看cn| 久久天堂av| 8v天堂国产在线一区二区| 免费观看黄网站| 色愁久久久久久| 亚洲精选在线观看| 五月天免费网站| 国内揄拍国内精品久久| 成人日韩av在线| 女女色综合影院| 五月综合激情婷婷六月色窝| 色欲欲www成人网站| 国产美女久久| 亚洲欧洲在线免费| 久久久精品少妇| 亚洲三级观看| 国产精品久久精品国产| 欧美精品videosex| 欧美日韩综合一区| 成人黄色短视频| 久久se这里有精品| 一本色道婷婷久久欧美| 狠狠操一区二区三区| 亚洲国产精品va在线看黑人| 日韩欧美一区二区一幕| 91麻豆免费看片| 日韩视频在线免费看| 日韩在线亚洲| 久久久久久久一| 国产精品一区二区黑人巨大| 91视频你懂的| 国产精品无码电影在线观看| 北条麻妃一区二区三区在线| 韩国视频理论视频久久| 日本成人一区二区三区| 亚洲一区欧美一区| 自拍偷拍一区二区三区四区| 午夜精品福利影院| 国产精品va在线播放| 久久综合网导航| 精品裸体舞一区二区三区| 成年免费在线观看| 国产精品一区在线观看你懂的| 女人被男人躁得好爽免费视频 | 日本美女xxx| 国产精品亚洲视频| 草草久久久无码国产专区| 国产精品欧美日韩一区| 91精品在线一区| 不卡专区在线| 亚洲天堂第二页| 青草视频在线观看免费| 成人一级黄色片| 久章草在线视频| 亚洲精品白浆高清| 91爱视频在线| 理论片午午伦夜理片在线播放| 在线一区二区观看| 青娱乐国产在线| 亚洲无线一线二线三线区别av| 国产日本欧美视频| tube8在线hd| 欧美成人免费网站| 免费黄色av片| 一区二区成人在线| 一级特黄曰皮片视频| 不卡的av电影在线观看| 亚洲国产高清av| 99久久99久久精品国产片果冰| 国产精品扒开腿做爽爽爽男男 | 亚洲欧洲国产日韩| 污视频网址在线观看| 亚洲激情一区| 免费在线观看一区二区| 久久国产精品美女| 国产精品久久久久久久久久久新郎| 国产在线观看网站| 国产香蕉在线观看| 日韩欧美999| 黄色一级片中国| 欧美高清一级片在线观看| 国产综合av在线| 亚洲国产日韩欧美在线| 欧美日韩精品免费看| 97精品国产99久久久久久免费| 中文字幕欧美日韩在线| 五月婷婷丁香网| 欧美大片国产精品| 国产伦精品一区二区三区视频痴汉 | 免费网站成人| 精品久久久久久久久久久久久久久久久| 精品视频一二三区| 岛国精品视频在线播放| 国产精品av久久久久久无| 国内精品免费**视频| 美女喷白浆视频| 亚洲一区二区三区| 国产一区二区精品免费| 国产情侣一区在线| 亚洲va久久久噜噜噜| 日本成人在线网站| 国产精品久久久久久久久借妻| 成人影院在线看| 欧美精品一区二区三| www日本高清| 国产激情视频一区二区在线观看| 成人在线观看a| 免费视频一区| 欧洲av无码放荡人妇网站| 一本久道久久综合狠狠爱| 青青青在线视频播放| 亚洲精选久久| 一本一本久久a久久精品综合妖精| av中文字幕一区二区| 国产a一区二区| 91夜夜蜜桃臀一区二区三区| 国产精品高清免费在线观看| 日本精品600av| 色综合视频网站| 91福利在线免费| 久久精品国亚洲| 天天干,夜夜操| 欧美日韩三级一区| 亚洲视频一区二区三区四区| 性做久久久久久久免费看| 国产午夜精品无码一区二区| 亚洲成人av电影在线| 国产成人愉拍精品久久| 狠狠色噜噜狠狠狠狠97| 久久久久久久久久一级| 欧美日韩国产另类不卡| 国产jzjzjz丝袜老师水多| 日韩欧美在线视频免费观看| 久草视频手机在线观看| 中文字幕av一区 二区| 免费成人深夜夜行网站| 亚洲影院理伦片| 亚洲另类在线观看| 欧美日韩视频在线一区二区| www.国产精品视频| 亚洲精品xxx| 在线免费看a| 久久久久久999| 一区二区三区短视频| 久久全球大尺度高清视频| 在线精品亚洲欧美日韩国产| 97在线免费观看| 欧美与亚洲与日本直播| 91在线视频免费| 欧美电影在线观看完整版| 日韩一二三区不卡在线视频| 欧美日本成人| 免费精品视频一区二区三区| 日韩精品永久网址| 日韩一级片免费视频| 国内精品久久久久久久影视麻豆| 中文字幕欧美日韩一区二区三区| 久久精品黄色| 亚洲一区二区三区视频| 欧美一级三级| 精品一区久久久久久| 成人高潮视频| 国产chinese精品一区二区| 精品国产一区二区三区| 日本中文不卡| 大胆日韩av| 91在线视频一区| 在线观看欧美| 麻豆传媒一区| 欧美欧美天天天天操| 中文字幕无码不卡免费视频| 久久蜜桃精品| 国偷自产av一区二区三区麻豆| 国产麻豆成人精品| 亚洲精品国产精品国自产网站| 亚洲精品久久嫩草网站秘色| 免费看一级一片| 在线观看不卡一区| 一区二区日韩在线观看| 日韩精品在线观看一区| 精品99又大又爽又硬少妇毛片| 亚洲人午夜精品| 四虎久久免费| 欧美精品在线观看| 欧美黄色网络| 日韩免费毛片| 伊人久久大香线蕉精品组织观看| 中文字幕在线中文| 毛片av一区二区三区| 深爱五月激情网| 中文字幕亚洲不卡| 久久久久久久久久一区二区三区| 欧美乱妇15p| av中文天堂在线| 欧美日韩不卡合集视频| 精品丝袜在线| 国产一区二区在线网站| 国产精品久久久久久| 拔插拔插海外华人免费| 国产一区二区91| 成人免费毛片xxx| 天天影视色香欲综合网老头| 波多野结衣大片| 欧美电影免费提供在线观看| 男人天堂网在线| 欧美最猛黑人xxxx黑人猛叫黄| 美女主播精品视频一二三四| 成人免费在线网| 懂色av噜噜一区二区三区av| 无码人妻精品一区二区三区夜夜嗨| 欧美挠脚心视频网站| 91这里只有精品| 国产日韩在线看片| 99热在线成人| gogo亚洲国模私拍人体| 夜夜揉揉日日人人青青一国产精品| 麻豆精品久久久久久久99蜜桃| 在线电影欧美成精品| 免费在线看黄| 国产成人91久久精品| 一区二区三区国产好| www插插插无码免费视频网站| 国产不卡高清在线观看视频| 久久一区二区三| 亚洲黄色av女优在线观看| 秋霞午夜理伦电影在线观看| 欧美亚洲视频在线看网址| 亚洲区小说区| 亚洲欧美日韩一级| 久久综合九色综合97婷婷女人| 精品国产乱码久久久久久鸭王1 | 欧美日韩精品一区二区视频| 国产真人无码作爱视频免费| 成年人国产精品| 日本中文在线播放| 色狠狠综合天天综合综合| 国产精品99999| 97国产精品久久| 九九热线有精品视频99| www.com黄色片| 久久久蜜臀国产一区二区| 精品无码人妻一区二区三区品 | 国产精品最新在线观看| 影视一区二区| 国产伦精品一区二区三区精品| 欧美性精品220| 免费网站看v片在线a| 国产日韩在线一区二区三区| 亚洲一区二区动漫| 成人欧美一区二区三区黑人一| 日韩欧美一级二级| 搞黄网站在线观看| 国产亚洲欧美一区二区 | 手机在线播放av| 色综合天天做天天爱| 美女黄视频在线观看| 国产精品视频地址| 黄色亚洲精品| 亚洲精品乱码久久久久久蜜桃图片| 亚洲午夜电影网| 91亚洲欧美| 91精品久久久久久久久久久久久 | 黄色a级片免费|