国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

基于 Serverless 架構(gòu)的頭像漫畫(huà)風(fēng)處理小程序

共 30985字,需瀏覽 62分鐘

 ·

2022-04-10 22:56

后臺(tái)回復(fù) 手冊(cè) 即刻免費(fèi)下載 2022 Serverless 工具書(shū)

作者 | 劉宇(本文轉(zhuǎn)自 Go Serverless)


我一直都想要有一個(gè)漫畫(huà)版的頭像,奈何手太笨,用了很多軟件 “捏不出來(lái)”,所以就在想著,是否可以基于 AI 實(shí)現(xiàn)這個(gè)功能,并部署到 Serverless 架構(gòu)上讓更多人來(lái)嘗試使用呢?


項(xiàng)目開(kāi)發(fā)


01

后端項(xiàng)目


后端項(xiàng)目采用業(yè)界鼎鼎有名的動(dòng)漫風(fēng)格轉(zhuǎn)化濾鏡庫(kù) AnimeGAN 的 v2 版本,效果大概如下:


關(guān)于這個(gè)模型的具體的信息,在這里不做詳細(xì)的介紹和說(shuō)明。通過(guò)與 Python Web 框架結(jié)合,將 AI 模型通過(guò)接口對(duì)外暴露:

?
from PIL import Image
import io
import torch
import base64
import bottle
import random
import json

cacheDir = '/tmp/'
modelDir = './model/bryandlee_animegan2-pytorch_main'
getModel = lambda modelName: torch.hub.load(modelDir, "generator", pretrained=modelName, source='local')
models = {
    'celeba_distill': getModel('celeba_distill'),
    'face_paint_512_v1': getModel('face_paint_512_v1'),
    'face_paint_512_v2': getModel('face_paint_512_v2'),
    'paprika': getModel('paprika')
}
randomStr = lambda num=5"".join(random.sample('abcdefghijklmnopqrstuvwxyz', num))
face2paint = torch.hub.load(modelDir, "face2paint", size=512, source='local')


@bottle.route('/images/comic_style', method='POST')
def getComicStyle():
    result = {}
    try:
        postData = json.loads(bottle.request.body.read().decode("utf-8"))
        style = postData.get("style"'celeba_distill')
        image = postData.get("image")
        localName = randomStr(10)

        # 圖片獲取
        imagePath = cacheDir + localName
        with open(imagePath, 'wb'as f:
            f.write(base64.b64decode(image))

        # 內(nèi)容預(yù)測(cè)
        model = models[style]
        imgAttr = Image.open(imagePath).convert("RGB")
        outAttr = face2paint(model, imgAttr)
        img_buffer = io.BytesIO()
        outAttr.save(img_buffer, format='JPEG')
        byte_data = img_buffer.getvalue()
        img_buffer.close()
        result["photo"] = 'data:image/jpg;base64, %s' % base64.b64encode(byte_data).decode()
    except Exception as e:
        print("ERROR: ", e)
        result["error"] = True

    return result


app = bottle.default_app()
if __name__ == "__main__":
    bottle.run(host='localhost', port=8099)
整個(gè)代碼是基于 Serverless 架構(gòu)進(jìn)行了部分改良的:
  1. 實(shí)例初始化的時(shí)候,進(jìn)行模型的加載,已經(jīng)可能的減少頻繁的冷啟動(dòng)帶來(lái)的影響情況;
  2. 在函數(shù)模式下,往往只有/tmp目錄是可寫的,所以圖片會(huì)被緩存到/tmp目錄下;

  3. 雖然說(shuō)函數(shù)計(jì)算是“無(wú)狀態(tài)”的,但是實(shí)際上也有復(fù)用的情況,所有數(shù)據(jù)在存儲(chǔ)到tmp的時(shí)候進(jìn)行了隨機(jī)命名;

  4. 雖然部分云廠商支持二進(jìn)制的文件上傳,但是大部分的 Serverless 架構(gòu)對(duì)二進(jìn)制上傳支持的并不友好,所以這里依舊采用 Base64 上傳的方案;


上面的代碼,更多是和 AI 相關(guān)的,除此之外,還需要有一個(gè)獲取模型列表,以及模型路徑等相關(guān)信息的接口:


import bottle

@bottle.route('/system/styles', method='GET')
def styles():
    return {
      "AI動(dòng)漫風(fēng)": {
        'color''red',
        'detailList': {
          "風(fēng)格1": {
            'uri'"images/comic_style",
            'name''celeba_distill',
            'color''orange',
            'preview''https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1647773808708_20220320105649389392.png'
          },
          "風(fēng)格2": {
            'uri'"images/comic_style",
            'name''face_paint_512_v1',
            'color''blue',
            'preview''https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1647773875279_20220320105756071508.png'
          },
          "風(fēng)格3": {
            'uri'"images/comic_style",
            'name''face_paint_512_v2',
            'color''pink',
            'preview''https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1647773926924_20220320105847286510.png'
          },
          "風(fēng)格4": {
            'uri'"images/comic_style",
            'name''paprika',
            'color''cyan',
            'preview''https://serverless-article-picture.oss-cn-hangzhou.aliyuncs.com/1647773976277_20220320105936594662.png'
          },
        }
      },
    }


app = bottle.default_app()
if __name__ == "__main__":
    bottle.run(host='localhost', port=8099)
可以看到,此時(shí)我的做法是,新增了一個(gè)函數(shù)作為新接口對(duì)外暴露,那么為什么不在剛剛的項(xiàng)目中,增加這樣的一個(gè)接口呢?而是要多維護(hù)一個(gè)函數(shù)呢?
  1. AI 模型加載速度慢,如果把獲取AI處理列表的接口集成進(jìn)去,勢(shì)必會(huì)影響該接口的性能;
  2. AI 模型所需配置的內(nèi)存會(huì)比較多,而獲取 AI 處理列表的接口所需要的內(nèi)存非常少,而內(nèi)存會(huì)和計(jì)費(fèi)有一定的關(guān)系,所以分開(kāi)有助于成本的降低;
關(guān)于第二個(gè)接口(獲取 AI 處理列表的接口),相對(duì)來(lái)說(shuō)是比較簡(jiǎn)單的,沒(méi)什么問(wèn)題,但是針對(duì)第一個(gè) AI 模型的接口,就有比較頭疼的點(diǎn):
  1. 模型所需要的依賴,可能涉及到一些二進(jìn)制編譯的過(guò)程,所以導(dǎo)致無(wú)法直接跨平臺(tái)使用;
  2. 模型文件比較大 (單純的 Pytorch 就超過(guò) 800M),函數(shù)計(jì)算的上傳代碼最多才 100M,所以這個(gè)項(xiàng)目無(wú)法直接上傳;
所以這里需要借助 Serverless Devs 項(xiàng)目來(lái)進(jìn)行處理:

請(qǐng)參考:

https://www.serverless-devs.com/fc/yaml/readme 


完成 s.yaml 的編寫:


edition: 1.0.0
name: start-ai
access: "default"

vars: # 全局變量
  region: cn-hangzhou
  service:
    name: ai
    nasConfig:                  # NAS配置, 配置后function可以訪問(wèn)指定NAS
      userId: 10003             # userID, 默認(rèn)為10003
      groupId: 10003            # groupID, 默認(rèn)為10003
      mountPoints:              # 目錄配置
        - serverAddr: 0fe764bf9d-kci94.cn-hangzhou.nas.aliyuncs.com # NAS 服務(wù)器地址
          nasDir: /python3
          fcDir: /mnt/python3
    vpcConfig:
      vpcId: vpc-bp1rmyncqxoagiyqnbcxk
      securityGroupId: sg-bp1dpxwusntfryekord6
      vswitchIds:
        - vsw-bp1wqgi5lptlmk8nk5yi0

services:
  image:
    component:  fc
    props: #  組件的屬性值
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: image_server
        description: 圖片處理服務(wù)
        runtime: python3
        codeUri: ./
        ossBucket: temp-code-cn-hangzhou
        handler: index.app
        memorySize: 3072
        timeout: 300
        environmentVariables:
          PYTHONUSERBASE: /mnt/python3/python
      triggers:
        - name: httpTrigger
          type: http
          config:
            authType: anonymous
            methods:
              - GET
              - POST
              - PUT
      customDomains:
        - domainName: avatar.aialbum.net
          protocol: HTTP
          routeConfigs:
            - path: /*


然后進(jìn)行:


1、依賴的安裝:s build --use-docker
2、項(xiàng)目的部署:s deploy
3、在 NAS 中創(chuàng)建目錄,上傳依賴:


s nas command mkdir /mnt/python3/python
s nas upload -r 本地依賴路徑 /mnt/python3/python
完成之后可以通過(guò)接口對(duì)項(xiàng)目進(jìn)行測(cè)試。

另外,微信小程序需要 https 的后臺(tái)接口,所以這里還需要配置 https 相關(guān)的證書(shū)信息,此處不做展開(kāi)。


02

小程序項(xiàng)目

小程序項(xiàng)目依舊采用 colorUi,整個(gè)項(xiàng)目就只有一個(gè)頁(yè)面:
頁(yè)面相關(guān)布局:
<scroll-view scroll-y class="scrollPage">
  <image src='/images/topbg.jpg' mode='widthFix' class='response'></image>

  <view class="cu-bar bg-white solid-bottom margin-top">
    <view class="action">
      <text class="cuIcon-title text-blue"></text>第一步:選擇圖片
    </view>
  </view>
  <view class="padding bg-white solid-bottom">
    <view class="flex">
      <view class="flex-sub bg-grey padding-sm margin-xs radius text-center" bindtap="chosePhoto">本地上傳圖片</view>
      <view class="flex-sub bg-grey padding-sm margin-xs radius text-center" bindtap="getUserAvatar">獲取當(dāng)前頭像</view>
    </view>
  </view>
  <view class="padding bg-white" hidden="{{!userChosePhoho}}">
    <view class="images">
      <image src="{{userChosePhoho}}" mode="widthFix" bindtap="previewImage" bindlongpress="editImage" data-image="{{userChosePhoho}}"></image>
    </view>
    <view class="text-right padding-top text-gray">* 點(diǎn)擊圖片可預(yù)覽,長(zhǎng)按圖片可編輯</view>
  </view>

  <view class="cu-bar bg-white solid-bottom margin-top">
    <view class="action">
      <text class="cuIcon-title text-blue"></text>第二步:選擇圖片處理方案
    </view>
  </view>
  <view class="bg-white">
    <scroll-view scroll-x class="bg-white nav">
      <view class="flex text-center">
        <view class="cu-item flex-sub {{style==currentStyle?'text-orange cur':''}}" wx:for="{{styleList}}"
          wx:for-index="style" bindtap="changeStyle" data-style="{{style}}">
          {{style}}
        </view>
      </view>
    </scroll-view>
  </view>
  <view class="padding-sm bg-white solid-bottom">
    <view class="cu-avatar round xl bg-{{item.color}} margin-xs" wx:for="{{styleList[currentStyle].detailList}}"
      wx:for-index="substyle" bindtap="changeStyle" data-substyle="{{substyle}}" bindlongpress="showModal" data-target="Image"
      <view class="cu-tag badge cuIcon-check bg-grey" hidden="{{currentSubStyle == substyle ? false : true}}"></view>
      <text class="avatar-text">{{substyle}}</text>
    </view>
    <view class="text-right padding-top text-gray">* 長(zhǎng)按風(fēng)格圓圈可以預(yù)覽模板效果</view>
  </view>

  <view class="padding-sm bg-white solid-bottom">
    <button class="cu-btn block bg-blue margin-tb-sm lg" bindtap="getNewPhoto" disabled="{{!userChosePhoho}}"
      type="">{{ userChosePhoho ? (getPhotoStatus ? 'AI將花費(fèi)較長(zhǎng)時(shí)間' : '生成圖片') : '請(qǐng)先選擇圖片' }}</button>
  </view>

  <view class="cu-bar bg-white solid-bottom margin-top" hidden="{{!resultPhoto}}">
    <view class="action">
      <text class="cuIcon-title text-blue"></text>生成結(jié)果
    </view>
  </view>
  <view class="padding-sm bg-white solid-bottom" hidden="{{!resultPhoto}}">
    <view wx:if="{{resultPhoto == 'error'}}">
      <view class="text-center padding-top">服務(wù)暫時(shí)不可用,請(qǐng)稍后重試</view>
      <view class="text-center padding-top">或聯(lián)系開(kāi)發(fā)者微信:<text class="text-blue" data-data="zhihuiyushaiqi" bindtap="copyData">zhihuiyushaiqi</text></view>
    </view>
    <view wx:else>
      <view class="images">
        <image src="{{resultPhoto}}" mode="aspectFit" bindtap="previewImage" bindlongpress="saveImage" data-image="{{resultPhoto}}"></image>
      </view>
      <view class="text-right padding-top text-gray">* 點(diǎn)擊圖片可預(yù)覽,長(zhǎng)按圖片可保存</view>
    </view>
  </view>

  <view class="padding bg-white margin-top margin-bottom">
    <view class="text-center">自豪的采用 Serverless Devs 搭建</view>
    <view class="text-center">Powered By Anycodes <text bindtap="showModal" class="text-cyan" data-target="Modal">{{"<"}}作者的話{{">"}}</text></view>
  </view>

  <view class="cu-modal {{modalName=='Modal'?'show':''}}">
  <view class="cu-dialog">
    <view class="cu-bar bg-white justify-end">
      <view class="content">作者的話</view>
      <view class="action" bindtap="hideModal">
        <text class="cuIcon-close text-red"></text>
      </view>
    </view>
    <view class="padding-xl text-left">
      大家好,我是劉宇,很感謝您可以關(guān)注和使用這個(gè)小程序,這個(gè)小程序是我用業(yè)余時(shí)間做的一個(gè)頭像生成小工具,基于“人工智障”技術(shù),反正現(xiàn)在怎么看怎么別扭,但是我會(huì)努力讓這小程序變得“智能”起來(lái)的。如果你有什么好的意見(jiàn)也歡迎聯(lián)系我<text class="text-blue" data-data="[email protected]" bindtap="copyData">郵箱</text>或者<text class="text-blue" data-data="zhihuiyushaiqi" bindtap="copyData">微信</text>,另外值得一提的是,本項(xiàng)目基于阿里云Serverless架構(gòu),通過(guò)Serverless Devs開(kāi)發(fā)者工具建設(shè)。
    </view>
  </view>
</view>

<view class="cu-modal {{modalName=='Image'?'show':''}}">
  <view class="cu-dialog">
    <view class="bg-img" style="background-image: url("{{previewStyle}}");height:200px;">
      <view class="cu-bar justify-end text-white">
        <view class="action" bindtap="hideModal">
          <text class="cuIcon-close "></text>
        </view>
      </view>
    </view>
    <view class="cu-bar bg-white">
      <view class="action margin-0 flex-sub  solid-left" bindtap="hideModal">關(guān)閉預(yù)覽</view>
    </view>
  </view>
</view>

</scroll-view>
頁(yè)面邏輯也是比較簡(jiǎn)單的:
// index.js
// 獲取應(yīng)用實(shí)例
const app = getApp()

Page({
  data: {
    styleList: {},
    currentStyle"動(dòng)漫風(fēng)",
    currentSubStyle"v1模型",
    userChosePhohoundefined,
    resultPhotoundefined,
    previewStyleundefined,
    getPhotoStatusfalse
  },
  // 事件處理函數(shù)
  bindViewTap() {
    wx.navigateTo({
      url'../logs/logs'
    })
  },
  onLoad() {
    const that = this
    wx.showLoading({
      title'加載中',
    })
    app.doRequest(`system/styles`, {}, option = {
      method"GET"
    }).then(function (result{
      wx.hideLoading()
      that.setData({
        styleList: result,
        currentStyleObject.keys(result)[0],
        currentSubStyleObject.keys(result[Object.keys(result)[0]].detailList)[0],
      })
    })
  },

  changeStyle(attr) {
    this.setData({
      "currentStyle": attr.currentTarget.dataset.style || this.data.currentStyle,
      "currentSubStyle": attr.currentTarget.dataset.substyle || Object.keys(this.data.styleList[attr.currentTarget.dataset.style].detailList)[0]
    })
  },

  chosePhoto() {
    const that = this
    wx.chooseImage({
      count1,
      sizeType: ['compressed'],
      sourceType: ['album''camera'],
      complete(res) {
        that.setData({
          userChosePhoho: res.tempFilePaths[0],
          resultPhotoundefined
        })
      }
    })

  },

  headimgHD(imageUrl) {
    imageUrl = imageUrl.split('/'); //把頭像的路徑切成數(shù)組
    //把大小數(shù)值為 46 || 64 || 96 || 132 的轉(zhuǎn)換為0
    if (imageUrl[imageUrl.length - 1] && (imageUrl[imageUrl.length - 1] == 46 || imageUrl[imageUrl.length - 1] == 64 || imageUrl[imageUrl.length - 1] == 96 || imageUrl[imageUrl.length - 1] == 132)) {
      imageUrl[imageUrl.length - 1] = 0;
    }
    imageUrl = imageUrl.join('/'); //重新拼接為字符串
    return imageUrl;
  },

  getUserAvatar() {
    const that = this
    wx.getUserProfile({
      desc"獲取您的頭像",
      success(res) {
        const newAvatar = that.headimgHD(res.userInfo.avatarUrl)
        wx.getImageInfo({
          src: newAvatar,
          success(res) {
            that.setData({
                    userChosePhoho: res.path,
                    resultPhotoundefined
                  })
          }
        })

      }
    })
  },

  previewImage(e) {
    wx.previewImage({
      urls: [e.currentTarget.dataset.image]
    })
  },

  editImage() {
    const that = this
    wx.editImage({
      srcthis.data.userChosePhoho,
      success(res) {
        that.setData({
          userChosePhoho: res.tempFilePath
        })
      }
    })
  },

  getNewPhoto() {
    const that = this
    wx.showLoading({
      title'圖片生成中',
    })
    this.setData({
      getPhotoStatustrue
    })
    app.doRequest(this.data.styleList[this.data.currentStyle].detailList[this.data.currentSubStyle].uri, {
      stylethis.data.styleList[this.data.currentStyle].detailList[this.data.currentSubStyle].name,
      image: wx.getFileSystemManager().readFileSync(this.data.userChosePhoho, "base64")
    }, option = {
      method"POST"
    }).then(function (result{
      wx.hideLoading()
      that.setData({
        resultPhoto: result.error ? "error" : result.photo,
        getPhotoStatusfalse
      })
    })
  },
  saveImage() {
    wx.saveImageToPhotosAlbum({
      filePaththis.data.resultPhoto,
      success(res) {
        wx.showToast({
          title"保存成功"
        })
      },
      fail(res) {
        wx.showToast({
          title"異常,稍后重試"
        })
      }
    })
  },
  onShareAppMessagefunction () {
    return {
      title"頭頭是道個(gè)性頭像",
    }
  },
  onShareTimeline() {
    return {
      title"頭頭是道個(gè)性頭像",
    }
  },
  showModal(e) {
    if(e.currentTarget.dataset.target=="Image"){
      const previewSubStyle = e.currentTarget.dataset.substyle
      const previewSubStyleUrl = this.data.styleList[this.data.currentStyle].detailList[previewSubStyle].preview
      if(previewSubStyleUrl){
        this.setData({
          previewStyle: previewSubStyleUrl
        })
      }else{
        wx.showToast({
          title"暫無(wú)模板預(yù)覽",
          icon"error"
        })
        return 
      }
    }
    this.setData({
      modalName: e.currentTarget.dataset.target
    })
  },
  hideModal(e) {
    this.setData({
      modalNamenull
    })
  },
  copyData(e) {
    wx.setClipboardData({
      data: e.currentTarget.dataset.data,
      success(res) {
        wx.showModal({
          title'復(fù)制完成',
          content`已將${e.currentTarget.dataset.data}復(fù)制到了剪切板`,
        })

      }
    })
  },
})


因?yàn)轫?xiàng)目會(huì)請(qǐng)求比較多次的后臺(tái)接口,所以,我將請(qǐng)求方法進(jìn)行額外的抽象:


// 統(tǒng)一請(qǐng)求接口
  doRequest: async function (uri, data, option{
    const that = this
    return new Promise((resolve, reject) => {
      wx.request({
        url: that.url + uri,
        data: data,
        header: {
          "Content-Type"'application/json',
        },
        method: option && option.method ? option.method : "POST",
        successfunction (res{
          resolve(res.data)
        },
        failfunction (res{
          reject(null)
        }
      })
    })
  }


成之后配置一下后臺(tái)接口,發(fā)布審核即可。


項(xiàng)目體驗(yàn)


點(diǎn)擊圖片可以進(jìn)行體驗(yàn)










RECRUITMENT

極速上手 Serverless



隨著 Serverless 熱度不斷升高,越來(lái)越多人期望在實(shí)際工作中能快速上手。為了讓更多 Serverless 初學(xué)者真正學(xué)會(huì) Serverless 理論知識(shí),在工作中根據(jù)需要靈活應(yīng)用 Serverless 技術(shù),阿里云 Serverless 團(tuán)隊(duì)推出技術(shù)圖譜,本課程包含機(jī)頻、動(dòng)手實(shí)驗(yàn)、電子書(shū)、直播、開(kāi)源項(xiàng)目多種形式內(nèi)容,讓各位開(kāi)發(fā)者即學(xué)即用,跑步入場(chǎng)享受 Serverless 技術(shù)紅利!點(diǎn)擊“閱讀原文”即刻學(xué)習(xí)。



有你想看的精彩





即學(xué)即會(huì):初識(shí) Serverless
如何用 Serverless 低成本打造個(gè)人專屬網(wǎng)盤
高德地圖 + Serverless 護(hù)航你的春節(jié)出行


瀏覽 51
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 内射91| av在线天堂| 人人肏人人摸| 日本三级黄色| 韩国三级HD久久精品| 国产精品成人免费| 91精品国产一区| 四川少妇BBB凸凸凸BBB安慰我| 国产性爱在线| 日韩在线综合| 99色色网| 亚洲一区二区三区视频| 中文字幕第9页| 免费一级AAAAA片在线播放| 亚洲AV久久无码| 亚洲欧美日韩性爱| 乱码中文字幕日韩欧美在线| 久久久麻豆| www.911国产| 国产精品二区高清在线苍井空| 国产精品污www在线观看| 日韩欧美成人片| 先锋AV资源网| 怡红院在线观看| 久久久999精品视频| 大香蕉婷婷| 无码一区二区三区免费| 四川少扫搡BBw搡BBBB| 91久久婷婷国产| 久久极品| 最新国产精品| 久久狼人| 69国产精品无码免费| 99在线观看免费| 91麻豆国产视频| 抠逼网站| 69成人导航| 一区二区三区四区五区六区高清无吗视频 | 无码视频在线观看免费| 婷久久| 91秦先生在线播放| 91精品人妻少妇无码影院| 手机AV在线播放| 18害羞勿进网站国产| 日韩无码A| 欧美操美女| 亚洲成人情趣大香蕉| 国产a一级a毛一级视频| 狠狠躁婷婷天天爽综合| 日韩图片区小说视频区日| 四川美女网久草| 先锋影音资源站| 国产欧美在线| 黄色成人视频在线观看| 欧美精产国品一二三| 色女人天堂| 99黄色视频| 国产精品永久免费| 国产XXXXX| 黄色影片在线观看| 97精品在线| 国产在线观看黄色| 黄片视频在线免费观看| 在线看片你懂的| 97自拍| 天天干天天舔| 成人在线免费网站| 亚洲专区在线| 国精产品一品二品国精| 国产又爽又黄在线看| 91www| 国产精品欧美精品| 91精品视频网站| 91人妻人人人人爽| 一曲二曲三曲在线观看中文字| 老骚逼| 97色色五月天| 丁香九月婷婷| 欧美黄色片在线观看| 精品69| AV一级片| 99r| 中文丰满亲子伦| 成人一区二区三区四区| 中文字幕无码在线视频| 奇米狠狠干| 性v天堂| 亚洲高清视频在线观看| 国产黄片视频| 成人视频在线观看18| 免费18蜜桃久久19| 国产一级a毛一级a毛片视频黑人| 色中文 | 五月天欧美性爱| 人人操大香蕉| av无码网站| 欧美午夜福利视频| 五月丁香五月婷婷| 亚洲色图偷拍| 五月婷婷六月丁香| 国产成人无码区免费视频| 五月丁香六月久久| 少妇熟女视频一区二区三区| 二区三区在线观看| 午夜久久福利| www,久久久| a片免费观看视频| 久久免费视频,久久免费视频 | 日韩无码AV一区二区三区| 影音先锋久久久| a毛片| 亚州成人视频| www.777av| 特级毛片片A片AAAAAA| 2025国产精品| 东京热综合网| 国产欧美一区二区三区视频| 欧美精品毛片| 久久综合伊人7777777| 三级片AV在线| 九色PORNY丨自拍蝌蚪| 中文字幕AV第一页| 黄色成人网址| 91农村站街老熟女露脸| www.亚洲精品| 日韩三级在线| 亚洲高清中文字幕| 中国乱伦视频| 久草三级片| 黄色视频大全在线观看| 特级西西人体444www高清| 精品一区二区三区免费| 欧美亚洲日韩一区二区三区| 国产一级a一级a免费视频| 人人干人人艹| 黄色在线网站| 欧美成人A级片| 青青操人人操| 高清无码小视频| 色777网站| 大地资源38页| 99精品丰满人妻无码| 免费精品99| 国产免费无码一区二区| 日韩人妻无码一区二区三区中文| 黄色电影一区二区三区| 一级a一级a爰片免费免免中国A片| 97超碰碰碰| 五月天色色网站| 亚洲AV成人无码精品直播在线| 尤物AV| 免费看a| 全部免费黄色视频| 日韩精品免费一区二区在线观看| 国产三级精品三级在线观看| 亚洲欧美在线免费观看| 18毛片| 日日碰狠狠添| 亚洲AV无码成人精品区天堂小说| 中国人妻HDbute熟睡| 亚洲无码在线精品| 日韩一级成人片| 久久999| 果冻传媒一区二区三区| 97中文字幕| 五月丁香花婷婷| 无码高清视频在线观看| 亚洲V在线| 黄色网页在线免费观看| 国产成人av在线播放| 99re视频| 国产三级偷拍| 九色PORNY丨自拍蝌蚪| 国产黄色免费电影| 中文在线观看视频| 91水蜜桃| 先锋久久资源| 波多野结衣国产区42部| 黄色视频在线网站| 欧美大香蕉在线| 天天干天天摸| 成人无码日本动漫电影| 懂色AV成人| 日韩AV中文| 久热精品在线观看| 亚洲美眉综合网| 亚洲99热| 国产乱伦毛片| 国产精品成人99一区无码| 免费A级毛片在线播放不收费| av逼网| av天天操| 人成免费在线视频| 午夜黄色影院| 色情一级A片成人片| 女女女女女女BBBBBB手| 91香蕉国产视频| 高清无码在线不卡| 天天日综合| 国产毛片欧美毛片高潮| 欧美伊人网在线观看| 伊人丁香| 国产喷水ThePorn| 日韩成人无码人妻| 黄色美女视频网站| 99热中文| 日韩人妻精品无码久久| 天天舔| 777偷窥盗摄00000| 亚洲无码AV在线观看| 99热这里有精品| 久久精品欧美| 先锋影音一区| 人人爽爽人人| 亚洲国产视频一区| 免费人成网站| 国产成人免费在线观看| 亚洲一区中文字幕| 亚洲国产精品自在自线| 国产欧美另类| 国产av地址| 中文在线字幕免费观看电视剧大全| 青青草手机在线视频| 亚日韩视频| 日本国产在线视频| 免费日本黄色| 五月天中文字幕| 天天爽爽爽爽爽成人片| 在线色综合| 安微妇搡BBBB搡BBBB| 日韩在线视频网站| 激情内射| 人妻少妇偷人精品久久| 加勒比DVD手机在线播放观看视频| 欧美性爱动态| 日韩综合在线观看| 无码一| 亚洲高清无码免费| 成人黄色在线观看视频| 午夜探花在线观看| 成人网站免费在线观看| 日韩人妻无码专区一区二区| 日本黄色片在线播放| 日韩无码内射| 自拍偷拍亚洲| 日韩精品一区二区三免费视频 | a欧美| 日韩欧美爱爱| 成人免费毛片视频| AV片免费看| 骚熟妇| 欧美激情一区二区三区| 成人无码免费| 黑人粗暴偷拍一区二区| 东方av在线观看| 国产学生妹在线播放| 丝袜无码| 日本成人黄色| 青青草原网站在线观看| 五月婷婷六月激情| 日产精品久久| 中国最大成人网站| 熟女人妻一区二区| A片视频在线观看| 欧美在线观看网站18| 中文字幕第11页| 奇米AV| 激情A| 国产成人精品一区二| 清清草视频| 大香蕉伊人网视频| 神马影院午夜福利| 啪啪啪网站| 黄色片久久| 91天天射| 香蕉视频免费| 天天看A片| 欧美伊人网| 成人欧美一区二区三区在线观看| 五月深爱| 欧美日韩A片欧美日| 日韩毛片在线看| 一本道高清无码视频| 久久久久久久久久久亚洲| 中文字幕精品人妻| 91成人做爰A片| 日韩无码一二三区| 午夜神马福利| 日韩电影免费在线观看| 日韩欧美一级视频| 亚洲午夜福利视频| 老司机午夜视频| 亚洲国产中文字幕| 人妻体体内射精一区二区| 亚洲高清无码视频在线| 狼人亚洲伊人| 俺去俺来也在线www色情网| 国产熟女乱伦视频| 中文字幕无码免费| 国产17c精品视频一二三区| 亚洲AAAAAA| 18禁无码永久免费网站大全| 欧美色小说| 亚洲欧洲精品视频| 91丨九色丨东北熟女| 婷婷在线影院| 免费大黄网站| 香蕉视频免费| 亚洲区欧美区| 色色色色色欧美网| 无码精品人妻| 午夜操一操| 五月激情六月婷婷| 无码专区一区二区三区| 人妻中文字幕av| 成人毛片| 亚洲99热| 91久久香蕉囯产熟女线看蜜桃| 国产乱伦片、| 波多野结衣久久中文字幕| 91精品综合久久久久久五月丁香| 大香蕉日| 91久久国产综合久久91| 欧美性猛交XXXXⅩXX| 中文字幕在线资源| 欧美MV日韩MV国产网站| 久热精品在线观看| 五月天啪啪视频| 亚洲人妻无码在线| www.黄色大片| 日韩一级大片| 国产在线观看mv免费全集电视剧大全| 欧美少妇视频| 操欧美女人| 欧美性性生交XXXXX无码| 久久亚洲日韩天天做日日做综合亚洲| 人人看人人色| 操逼视频,黄色大全| 欧美熟妇BBB搡BBB| 北条麻妃无码| 欧美成人精品网站| 成人视频网站18| 在线99热| 猫咪视频大全视频| 国产精品成人免费视频| 久久香蕉人| 亚洲天堂男人的天堂| 在线不卡免费Av| 国产亚洲中文| 四虎无码丰满人妻| 三上悠亚无码破解69XXX| 影音先锋中文字幕资源| 人人插人人爽| 国产日本在线视频| 日韩人妻斩| 69视频在线免费观看| 在线免费毛片| 人人干AV| 亚洲国产精品久久人人爱| 黄色片网站视频| 欧美黄片免费观看| 蜜桃人妻无码AV天堂二区| 激情视频网| 美女超碰| 手机AV在线| 大香蕉网伊人在线| 性感成人在线| 九九福利| 国产又黄又大又粗| 九九黄片| 日韩蜜桃视频| 成人无码区免费AV毛片| 大香蕉草久| 在线观看日韩| 成人激情免费视频| 人人操人人爱人人拍| www.日韩无码| 五月天婷婷色播| 影音先锋国产| 妞干网国产| 激情五月综合网| 特黄在线| 亚洲任你操超碰在线| 一本色综合亚洲精品| 午夜午夜福利理论片在线播放| 91人妻人人澡人人爽人人精| 国产免费黄色视频网站| 色色9999| 国产无码高清在线| 日韩三级视频| 四虎AV在线| 51成人免费| 五月婷婷六月天| 国产欧美另类| 黄色视频网站免费| 日韩美女免费视频| 51XX嘿嘿午夜| 日韩免费黄色电影| 手机看片1024你懂的| 男女av在线| 日韩A片在线| 国产精品久久久久久久免牛肉蒲 | 国产日逼片| 国产精品毛片久久久久久久| 欧美日韩中文字幕在线视频| 小H片在线观看| 久久精品一区二区三区蜜芽的特点| 久久国产精彩视频| 无码一区二区三区免费| 免费国产三级片| 中文字幕在线观看一区二区三区| 日韩一级大片| 亚洲色图欧美在线| 国产日韩欧美| 中文字幕乱码中文字幕电视剧| 午夜福利h| 一级免费黄色电影| 国产亚洲三级| 91成人综合| 国产毛片一区二区三区| 大香蕉综合网站| 成人影视亚洲| 亚洲综合天堂| 丁香五月天激情视频| 99视频在线免费观看| 东方AV在线免费观看| 中文字幕成人在线播放| 成人在线视频免费| 熟女人妻在线观看| 丁香花中文字幕| 亚洲黄色免费网站| 久久免费视频,久久免费视频 | 日韩视频播放在线综合| 黄色视频网站国产| 大肉大捧视频免费观看| 欧美一区| 91网站免费| 久久精品视频国产| 国产男女性爱视频播放| 国产成人无码在线| 老司机精品| 亚洲蜜桃av一区| 91久操| 亚洲第一中文字幕| 日韩一区二区三免费高清在线观看| 五月天社区| 亚洲无码视频在线免费观看| 色婷婷激情五月天| seseav| 少妇av| 丁香婷婷久久久综合精品国产| 久久久久久亚洲AV无码专区| 97精品一区二区三区A片| 日韩高清精品在线| www.干| 色五月AV| 午夜精品久久久久久久99热精东 | 高清中字无码| 性久久久久久久| 成人毛片18| 免费黄片无码| 免费一级a片| 亚洲欧美成人网站| 天堂中文8资源在线8| 国产无码免费| 亚洲成人精品视频| 麻豆传媒在线| A片在线免费播放| 91亚洲视频在线观看| 一本色道久久综合| 99热黄色| 澳门黄片| 丁香九月婷婷| 色播一区| 精品久久三级片| 大香蕉视频在线观看| 欧美三级毛片| 午夜福利视频3000| 亚洲精品无码在线播放| 六月色婷婷| 青草国产视频| 风间由美大荫蒂无码AV| 色狠狠网| 国产免费AV片| 天天日夜夜草| 黄色操B视频| 中文字幕有码在线播放| 毛片内射| 欧美一级黄| 亚洲人成人无码.www粉色| 天天撸免费视频| 亚洲日韩一区二区| 亚洲AV无码成人| 国产avwww| 亚洲A片免费看| 西西444WWW大胆无| 99超碰在线观看| 少妇搡BBBB搡BBB搡造水多/ | 欧美日韩亚洲中文字幕| 少妇人妻在线| 一级黄片学生妹| 在线观看高清无码视频| 神马影院午夜福利| 亚洲黄色一级电影| 91成人综合| 97爱| 黄色小视频免费观看| 精品一区国产| 特黄色A级片视频| 国产色秘乱码一区二区三区| 3D动漫啪啪精品一区二| 青青青草视频在线观看| 国产AV无码专区| 超碰日日夜夜| 免费一级无码婬片A片AAA毛片 | 精品天堂| 久久久人妻熟妇精品无码蜜桃| 蜜桃人妻无码AV天堂三区| 欧美亚洲综合在线观看| 99在线精品视频| 97激情| 成人网站三级片| 天天干免费视频| 中文字幕在线欧美| 日韩欧美国产| 另类图片亚洲色图| 色婷婷AV一区二区三区之e本道| 亚洲精品国产精品国自产| 国产一区二区免费在线观看| 国产香蕉视频| av无码网站| 免费在线观看a片| 久久综合久| 99色热视频| 日韩一区欧美| 黑人操逼| 波多野结衣AV在线播放| 尤物精品| 丰满人妻一区二区三区四区54| 超碰人妻人人操| 91麻豆精品国产91久久久久久久久 | 日本三级久久| 青青草无码成人AV片| 无码人妻丰满熟妇| 91导航| 天天干妹子| 三级视频国产| 亚洲成人AV一区二区| 精品人妻一区二区三区四区不卡在| 成人在线免费视频观看| 内射一区| 国产操逼电影| 日韩欧美中文字幕公布| 欧美一级高清片免费一级a| 1024国产在线| 久久91| 国产伦子伦一级A片免费看小说| 亚洲图片一区| 人人操人人操人人操人人| 日韩欧美黄色电影| 欧美日韩视频一区二区| 亚洲无码A片在线| 中文字幕一级A片免费看| 日本无码一区二区三区| 天天日天天干天天干| A片动漫| 成人在线三级片| 国产精品在线看| 久久天堂av| 欧美黄片AAA| 91内射| 黄色三级视频在线观看| 欧美一级片在线| 九九碰九九爱97超碰| 欧美自拍视频在线| 性久久久久久久久久| 日韩黄色电影网| 在线观看无码AV| 一本一道vs波多野结衣| 一级黄色A片| 91视频久久| 91美女网站| 成人毛片在线播放| 国产尤物视频| 亚洲成人二区| 中文字幕AV一区| 在线高清无码视频| 成人视频毛片| 大香蕉第一页| 人妻无码中文久久久久专区| 91精品人妻| 国产成人精品一区二区| 日韩精品成人无码| 欧美日韩日逼| a4yy午夜福利| 日韩av中文字幕在线| 亚洲日韩欧美成人| 欧美精品乱码99久久蜜桃| 99热精品免费| 色噜噜狠狠一区二区三区| av无码导航| 高潮喷水AⅤ| 91激情在线| 国产激情在线观看| 山东熟妇搡BBBB搡BBBB| 亚洲一级av| 国产精品成人AV片| 国产三级91| 精品一二区| 一级特黄大片色| 亚洲精品一级二级三级| 日韩精品一区二区三区中文在线| 五月天久久| 97精品欧美91久久久久久久| 日韩无码视屏| 五月丁香六月激情综合| 91色色色色| 精品无码免费视频| 无码国产精品一区二区性色AV| 未满十八18禁止免费无码网站 | 丁香五月一区二区| 天天爽爽爽爽爽成人片| 啪啪成人网| 肏少妇女情人大骚逼直播一区二区| 黑人操逼| 国产激情无码| 国产精品福利在线观看| 成人网在线视频| 日韩黄色毛片| 黄色小电影在线观看| 亚洲激情网| 中文一级片| 韩日在线| 东京热精品视频| 日韩精品一区二区三区使用方法| 五月丁香综合激情| 婷婷久久综合久色综| 噜噜色色噜噜| 久久99精品久久久久久| www.人人操| 久久国产劲爆∧v内射| 日韩av免费在线观看| 青娱乐无码| 国产Av一区二区三区| 午夜精品久久久久久久| 婷婷丁香五月激情| 91乱子伦国产乱子伦海的味道 | 九九热在线精品视频| 中文字幕AV网| 亚洲免费黄色片| 麻豆AV免费看| 91麻豆视频在线观看| 久操网在线| 俺也来www俺也色com| va婷婷在线免费观看| 国产在线高清| 国产动态图| 人人澡超碰碰| 一级黄色操逼视频| 九九视频免费观看| 特大妓女BBwBBWBBw| 无码窝在线观看| 国产熟妇毛多久久久久一区| 爆操熟女| 亚洲精品一区二区三| 特级毛片www| 久久草视频| 亚洲一级黄| 水蜜桃视频网站| 国产小视频在线观看| 天堂无码| 强波多野结衣黑人| 国内一级A片| 成人午夜视频精品一区| 亚洲欧洲自拍| 香蕉91| 欧美高清一级| 色国产在线视频| 欧美三级理论片| 人人妻人人玩人人澡人人爽| 亚洲日韩欧美在线观看| 亚洲美女一区| 激情五月天色| 亚洲一页| 欧美不卡| 亚洲系列| 肉片无遮挡一区二区三区免费观看视频 | 色婷婷电影| 成人一级A片| 乱伦无码| 永久免费看A人片无码精| 免费av一区二区| 国产地址| 中文一区在线观看| 成人网站AV| 亚洲操逼电影| 国产一片黑夜内射| а√最新版在线中文8| 韩日无码视频| AAA免费视频| 欧一美一婬一伦一区二区三区自慰 | 国产乱人伦无码视频| 中文字幕在线观看日本| 亚洲春色一区二区三区| 国产深夜福利| 欧美一级特黄A片免费看视频小说 东北嫖老熟女一区二区视频网站 国产丨熟女丨国产熟女视频 | 久久久精品国产视频| 在线不卡无码| 国产黄片在线视频| 欧美区亚洲区| 天天玩天天操| 国产一区二区三区视频在线观看| AV在线直播| 九九九免费视频| 久久电影五月天| 青娱乐亚洲精品视频| 欧美一级操逼视频| 中文字幕日本| 91AV免费在线观看| 成人首页| 欧美日韩一级视频| 激情五月天网站| 天堂A片电影网站在线观看| xxx久久| 中文字幕在线播放av| 色欲成人网| 国产v在线观看| 尤物精品| 黑人无码在线| 欧美在线播放| 欧美专区一区| 人妻免费在线视频| 少妇人妻av| 亚洲免费观看高清完整版| 国产情侣在线视频| 囯产精品久久久久久久久久| 黄色大片免费看| 亚洲精品国产精品乱玛不99| 国产人妻人伦精品1国产丝袜 | 色婷婷AV在线| 天天精品视频| 日本狠狠操| 五月激情六月丁香| 日本黄色A片| gogogo高清在线完整免费播放韩国 | 成人黄色电影在线| 蜜桃av无码一区二区三区| 偷拍视频网站| 亚洲三级无码| 99久久综合九九| 国产精品香蕉国产| 91人人人人| 手机成人在线视频| 无码免费婬AV片在线观看| 人妻无码久久精品人妻成人| 加勒比日韩无码| 骚骚肥肥一区二区三区| 91人妻无码精品一区二区三区| 日韩精品一区二区三区中文在线 | 尿在小sao货里面好不好| 午夜福利久久| 俺去也视频| 国产亚洲视频完整在线观看| 91大熟女91大腚女人| 91看片看婬黄大片Videos| 国产黄色视频在线免费看| 久久一级视频| 中文字幕精品无码| 可以看的三级网站| 三级无码在线播放| 超碰免费91| AV资源在线播放| 天天色视频| 亚洲人成777| 男人的天堂aa| 波多野结衣久久中文字幕| 白浆AV| 亚洲中字幕新| 黄色网址在线观看视频| 亚洲精品久久久久毛片A级绿茶| 天天操天天操天天| 国产精品操逼视频| 欧美日韩国产不卡视频| 99天天视频| 中文字幕在线观看二区| 国产深夜福利| 国产AV福利| 激情网站免费| 乱伦婷婷| 特逼视频| 91精品无码| 成人性在线| 九九九九九精品| 91人妻人人澡人人爽人人精 | 国产三级片AV| 国产精品av在线| 婷婷色网| 欧美午夜精品久久久久免费视 | 手机AV免费| 新BBWBBWBBWBBW| 在线免费看黄色视频| 成人福利| 91在线无码精品秘网站| 欧美大鸡巴在线观看| 黄片免费看网站| 特级特黄AAAAAAAA片| 天天日天天操天天| 国产精品视频色| 欧美日韩中文| 国产日韩精品无码去免费专区国产 | 欧美一级A片高清免费播放| 嫩BBB搡BBBB搡BBBB| 北条麻妃一区二区三区在线播放| 免费无码AV| 国产日韩欧美| 动漫操逼视频| 日韩中文字幕在线免费观看| 国产在线拍揄自揄拍无码福利 | 久久XX| 黄色网页在线观看| 欧美性爱内射| 一级欧美黑人大战白妞| 婷婷激情久久| 伊人成人视频在线观看| 日本成人一区二区三区| 国内自拍无码| 无码一道本| 婷婷A片| 欧美在线中文| 三级黄视频| 欧美性爱永久| 国产色色视频| 中文字幕在线日亚洲9| 国产精品福利在线观看| 天天干精品| 四虎AV在线| 成人黄色免费网站| 无码一级A片| 天天射夜夜操| 久久AV片| 日韩视频免费看| 久久午夜无码鲁丝| 亚洲欧美视频在线| 午夜精品久久久久久不卡8050 | 人人摸天天| 永久免费一区二区| 黄色福利视频| 成人网站一区二区| 97香蕉网| 500部大龄熟乱4K视频| 国产青草视频在线观看| 国产精品高潮呻吟久久| 插菊花综合网2| www.wuma| 日本做爱视频| 无码人妻一区二区三区| 一区二区精品视频| 波多野结衣无码在线视频| 无码一区二区免费| 日韩一区欧美| 人妻斩り43歳| 成人视频免费网站| 欧美自拍一区| 二区不卡| 亚洲视频在线看| 国产无码乱伦内射| 欧美a片在线| 婷婷色在线| 亚洲美女视频网| 在线黄色AV| 亚洲黄色AV| 日本无码成人片在线播放| 99成人视频| 猫咪视频大全视频| 色视频免费在线观看| 韩日精品视频| 中文字幕免| 亚洲成人在线网| 永久黄网站| 乱人伦欲国语对白| 51国产黑料吃瓜在线入口| 婷婷综合在线| 亲孑伦XXXⅹ熟女| 亚洲色一区二区| 免费看毛片中文字幕| 成人在线三级片| 91蝌蚪丨人妻丨丝袜| 精品无码一区二区三区四区五区| 国产h在线| 色五月激情| 久久久久久久9999| 亚洲有码在线播放| 成人AV在线一区二区| 国产精品乱子伦| 日韩无码影院| 久久动态图| 人人看人人草| 91狠狠爱| 国产A片网站| 精品视频在线免费观看|