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

驚呆!200行代碼就能實現的隱身術你見過么?

新聞 前端
最近,猿妹在GitHub上發現一個名為Real-Time-Person-Removal的神器,可以實時去除視頻中的人物。

 如果你想把一張照片的某個人物去除掉,通常用PS就可以輕松去除了,但是如果是一段視頻要你P掉一個人物,是不是就難倒你了呢?

最近,猿妹在GitHub上發現一個名為Real-Time-Person-Removal的神器,可以實時去除視頻中的人物,就像下圖這樣:

[[316043]]

有沒有一種不明覺厲的趕腳,實現這樣一種效果,其實只需要使用JavaScript在網絡瀏覽器中使用一段200行的TensorFlow.js代碼就可以了。

該項目的創建者是一名叫Jason Mayes的谷歌工程師使用TensorFlow.js庫和JavaScript 開發的,Mayes表示,這只是一個試驗性的項目,其中的算法還是存在一些問題,比如它會受到人物背景的影響,人物整體背景越簡單,呈現出來的最終畫面就會越真實,如果你仔細看就會發現,其實處理過的畫面存在很多偽像痕跡。

不過,接下去Mayes會進一步改進他的算法,提高處理后的畫面水平,甚至達到可以一次性從視頻中刪除多個人物的效果。

惊呆!200行代码就能实现的隐身术你见过么?

目前,Real-Time-Person-Removal在GitHub上標星2.6K,251個Fork(GitHub地址:https://github.com/jasonmayes/Real-Time-Person-Removal)

詳細的代碼也發上來供大家參考吧:

JS:

  1. /**  
  2.  * @license  
  3.  * Copyright 2018 Google LLC. All Rights Reserved.  
  4.  * Licensed under the Apache License, Version 2.0 (the "License");  
  5.  * you may not use this file except in compliance with the License.  
  6.  * You may obtain a copy of the License at  
  7.  *  
  8.  * http://www.apache.org/licenses/LICENSE-2.0  
  9.  *  
  10.  * Unless required by applicable law or agreed to in writing, software  
  11.  * distributed under the License is distributed on an "AS IS" BASIS,  
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  13.  * See the License for the specific language governing permissions and  
  14.  * limitations under the License.  
  15.  * =============================================================================  
  16.  */  
  17.   
  18. /********************************************************************  
  19.  * Real-Time-Person-Removal Created by Jason Mayes 2020.  
  20.  *  
  21.  * Get latest code on my Github:  
  22.  * https://github.com/jasonmayes/Real-Time-Person-Removal  
  23.  *  
  24.  * Got questions? Reach out to me on social:  
  25.  * Twitter: @jason_mayes  
  26.  * LinkedIn: https://www.linkedin.com/in/creativetech  
  27.  ********************************************************************/  
  28.   
  29. const video = document.getElementById('webcam');  
  30. const liveView = document.getElementById('liveView');  
  31. const demosSection = document.getElementById('demos');  
  32. const DEBUG = false;  
  33.   
  34.   
  35. // An object to configure parameters to set for the bodypix model.  
  36. // See github docs for explanations.  
  37. const bodyPixProperties = {  
  38.   architecture: 'MobileNetV1',  
  39.   outputStride: 16,  
  40.   multiplier: 0.75,  
  41.   quantBytes: 4  
  42. };  
  43.   
  44. // An object to configure parameters for detection. I have raised  
  45. // the segmentation threshold to 90% confidence to reduce the  
  46. // number of false positives.  
  47. const segmentationProperties = {  
  48.   flipHorizontal: false,  
  49.   internalResolution: 'high',  
  50.   segmentationThreshold: 0.9,  
  51.   scoreThreshold: 0.2  
  52. };  
  53.   
  54.   
  55. // Render returned segmentation data to a given canvas context.  
  56. function processSegmentation(canvas, segmentation) {  
  57.   var ctx = canvas.getContext('2d');  
  58.   console.log(segmentation)  
  59.   // Get data from our overlay canvas which is attempting to estimate background.  
  60.   var imageData = ctx.getImageData(00, canvas.width, canvas.height);  
  61.   var data = imageData.data;  
  62.   
  63.   // Get data from the live webcam view which has all data.  
  64.   var liveData = videoRenderCanvasCtx.getImageData(00, canvas.width, canvas.height);  
  65.   var dataL = liveData.data;  
  66.   
  67.   var minX = 100000;  
  68.   var minY = 100000;  
  69.   var maxX = 0;  
  70.   var maxY = 0;  
  71.   
  72.   var foundBody = false;  
  73.   
  74.   // Go through pixels and figure out bounding box of body pixels.  
  75.   for (let x = 0; x < canvas.width; x++) {  
  76.     for (let y = 0; y < canvas.height; y++) {  
  77.       let n = y * canvas.width + x;  
  78.       // Human pixel found. Update bounds.  
  79.       if (segmentation.data[n] !== 0) {  
  80.         if(x < minX) {  
  81.           minX = x;  
  82.         }  
  83.   
  84.         if(y < minY) {  
  85.           minY = y;  
  86.         }  
  87.   
  88.         if(x > maxX) {  
  89.           maxX = x;  
  90.         }  
  91.   
  92.         if(y > maxY) {  
  93.           maxY = y;  
  94.         }  
  95.         foundBody = true;  
  96.       }  
  97.     }   
  98.   }  
  99.   
  100.   // Calculate dimensions of bounding box.  
  101.   var width = maxX - minX;  
  102.   var height = maxY - minY;  
  103.   
  104.   // Define scale factor to use to allow for false negatives around this region.  
  105.   var scale = 1.3;  
  106.   
  107.   //  Define scaled dimensions.  
  108.   var newWidth = width * scale;  
  109.   var newHeight = height * scale;  
  110.   
  111.   // Caculate the offset to place new bounding box so scaled from center of current bounding box.  
  112.   var offsetX = (newWidth - width) / 2;  
  113.   var offsetY = (newHeight - height) / 2;  
  114.   
  115.   var newXMin = minX - offsetX;  
  116.   var newYMin = minY - offsetY;  
  117.   
  118.   
  119.   // Now loop through update backgound understanding with new data  
  120.   // if not inside a bounding box.  
  121.   for (let x = 0; x < canvas.width; x++) {  
  122.     for (let y = 0; y < canvas.height; y++) {  
  123.       // If outside bounding box and we found a body, update background.  
  124.       if (foundBody && (x < newXMin || x > newXMin + newWidth) || ( y < newYMin || y > newYMin + newHeight)) {  
  125.         // Convert xy co-ords to array offset.  
  126.         let n = y * canvas.width + x;  
  127.   
  128.         data[n * 4] = dataL[n * 4];  
  129.         data[n * 4 + 1] = dataL[n * 4 + 1];  
  130.         data[n * 4 + 2] = dataL[n * 4 + 2];  
  131.         data[n * 4 + 3] = 255;              
  132.   
  133.       } else if (!foundBody) {  
  134.         // No body found at all, update all pixels.  
  135.         let n = y * canvas.width + x;  
  136.         data[n * 4] = dataL[n * 4];  
  137.         data[n * 4 + 1] = dataL[n * 4 + 1];  
  138.         data[n * 4 + 2] = dataL[n * 4 + 2];  
  139.         data[n * 4 + 3] = 255;      
  140.       }  
  141.     }  
  142.   }  
  143.   
  144.   ctx.putImageData(imageData, 00);  
  145.   
  146.   if (DEBUG) {  
  147.     ctx.strokeStyle = "#00FF00"  
  148.     ctx.beginPath();  
  149.     ctx.rect(newXMin, newYMin, newWidth, newHeight);  
  150.     ctx.stroke();  
  151.   }  
  152. }  
  153.   
  154.   
  155.   
  156. // Let's load the model with our parameters defined above.  
  157. // Before we can use bodypix class we must wait for it to finish  
  158. // loading. Machine Learning models can be large and take a moment to  
  159. // get everything needed to run.  
  160. var modelHasLoaded = false;  
  161. var model = undefined;  
  162.   
  163. model = bodyPix.load(bodyPixProperties).then(function (loadedModel) {  
  164.   model = loadedModel;  
  165.   modelHasLoaded = true;  
  166.   // Show demo section now model is ready to use.  
  167.   demosSection.classList.remove('invisible');  
  168. });  
  169.   
  170.   
  171. /********************************************************************  
  172. // Continuously grab image from webcam stream and classify it.  
  173. ********************************************************************/  
  174.   
  175. var previousSegmentationComplete = true;  
  176.   
  177. // Check if webcam access is supported.  
  178. function hasGetUserMedia() {  
  179.   return !!(navigator.mediaDevices &&  
  180.     navigator.mediaDevices.getUserMedia);  
  181. }  
  182.   
  183.   
  184. // This function will repeatidly call itself when the browser is ready to process  
  185. // the next frame from webcam.  
  186. function predictWebcam() {  
  187.   if (previousSegmentationComplete) {  
  188.     // Copy the video frame from webcam to a tempory canvas in memory only (not in the DOM).  
  189.     videoRenderCanvasCtx.drawImage(video, 00);  
  190.     previousSegmentationComplete = false;  
  191.     // Now classify the canvas image we have available.  
  192.     model.segmentPerson(videoRenderCanvas, segmentationProperties).then(function(segmentation) {  
  193.       processSegmentation(webcamCanvas, segmentation);  
  194.       previousSegmentationComplete = true;  
  195.     });  
  196.   }  
  197.   
  198.   // Call this function again to keep predicting when the browser is ready.  
  199.   window.requestAnimationFrame(predictWebcam);  
  200. }  
  201.   
  202.   
  203. // Enable the live webcam view and start classification.  
  204. function enableCam(event) {  
  205.   if (!modelHasLoaded) {  
  206.     return;  
  207.   }  
  208.   
  209.   // Hide the button.  
  210.   event.target.classList.add('removed');    
  211.   
  212.   // getUsermedia parameters.  
  213.   const constraints = {  
  214.     video: true  
  215.   };  
  216.   
  217.   // Activate the webcam stream.  
  218.   navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {  
  219.     video.addEventListener('loadedmetadata', function() {  
  220.       // Update widths and heights once video is successfully played otherwise  
  221.       // it will have width and height of zero initially causing classification  
  222.       // to fail.  
  223.       webcamCanvas.width = video.videoWidth;  
  224.       webcamCanvas.height = video.videoHeight;  
  225.       videoRenderCanvas.width = video.videoWidth;  
  226.       videoRenderCanvas.height = video.videoHeight;  
  227.       bodyPixCanvas.width = video.videoWidth;  
  228.       bodyPixCanvas.height = video.videoHeight;  
  229.       let webcamCanvasCtx = webcamCanvas.getContext('2d');  
  230.       webcamCanvasCtx.drawImage(video, 00);  
  231.     });  
  232.   
  233.     video.srcObject = stream;  
  234.   
  235.     video.addEventListener('loadeddata', predictWebcam);  
  236.   });  
  237. }  
  238.   
  239.   
  240. // We will create a tempory canvas to render to store frames from   
  241. // the web cam stream for classification.  
  242. var videoRenderCanvas = document.createElement('canvas');  
  243. var videoRenderCanvasCtx = videoRenderCanvas.getContext('2d');  
  244.   
  245. // Lets create a canvas to render our findings to the DOM.  
  246. var webcamCanvas = document.createElement('canvas');  
  247. webcamCanvas.setAttribute('class''overlay');  
  248. liveView.appendChild(webcamCanvas);  
  249.   
  250. // Create a canvas to render ML findings from to manipulate.  
  251. var bodyPixCanvas = document.createElement('canvas');  
  252. bodyPixCanvas.setAttribute('class''overlay');  
  253. var bodyPixCanvasCtx = bodyPixCanvas.getContext('2d');  
  254. bodyPixCanvasCtx.fillStyle = '#FF0000';  
  255.   
  256. liveView.appendChild(bodyPixCanvas);  
  257.   
  258. // If webcam supported, add event listener to button for when user  
  259. // wants to activate it.  
  260. if (hasGetUserMedia()) {  
  261.   const enableWebcamButton = document.getElementById('webcamButton');  
  262.   enableWebcamButton.addEventListener('click', enableCam);  
  263. else {  
  264.   console.warn('getUserMedia() is not supported by your browser');  
  265. }  

CSS:

  1. /** 
  2.  * @license 
  3.  * Copyright 2018 Google LLC. All Rights Reserved. 
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  * ============================================================================= 
  16.  */ 
  17.  
  18. /****************************************************** 
  19.  * Stylesheet by Jason Mayes 2020. 
  20.  * 
  21.  * Get latest code on my Github: 
  22.  * https://github.com/jasonmayes/Real-Time-Person-Removal 
  23.  * Got questions? Reach out to me on social: 
  24.  * Twitter: @jason_mayes 
  25.  * LinkedIn: https://www.linkedin.com/in/creativetech 
  26.  *****************************************************/ 
  27.  
  28. body { 
  29.   font-family: helvetica, arial, sans-serif; 
  30.   margin: 2em; 
  31.   color: #3D3D3D; 
  32.  
  33. h1 { 
  34.   font-style: italic; 
  35.   color: #FF6F00; 
  36.  
  37. h2 { 
  38.   clear: both; 
  39.  
  40. em { 
  41.   font-weight: bold; 
  42.  
  43. video { 
  44.   clear: both; 
  45.   display: block; 
  46.  
  47. section { 
  48.   opacity: 1
  49.   transition: opacity 500ms ease-in-out; 
  50.  
  51. header, footer { 
  52.   clear: both; 
  53.  
  54. button { 
  55.   z-index: 1000
  56.   position: relative; 
  57.  
  58. .removed { 
  59.   display: none; 
  60.  
  61. .invisible { 
  62.   opacity: 0.2
  63.  
  64. .note { 
  65.   font-style: italic; 
  66.   font-size: 130%; 
  67.  
  68. .webcam { 
  69.   position: relative; 
  70.  
  71. .webcam, .classifyOnClick { 
  72.   position: relative; 
  73.   float: left; 
  74.   width: 48%; 
  75.   margin: 21%; 
  76.   cursor: pointer; 
  77.  
  78. .webcam p, .classifyOnClick p { 
  79.   position: absolute; 
  80.   padding: 5px; 
  81.   background-color: rgba(25511100.85); 
  82.   color: #FFF; 
  83.   border: 1px dashed rgba(2552552550.7); 
  84.   z-index: 2
  85.   font-size: 12px; 
  86.  
  87. .highlighter { 
  88.   background: rgba(025500.25); 
  89.   border: 1px dashed #fff; 
  90.   z-index: 1
  91.   position: absolute; 
  92.  
  93. .classifyOnClick { 
  94.   z-index: 0
  95.   position: relative; 
  96.  
  97. .classifyOnClick canvas, .webcam canvas.overlay { 
  98.   opacity: 1
  99.  
  100.   top: 0
  101.   left: 0
  102.   z-index: 2
  103.  
  104. #liveView { 
  105.   transform-origin: top left; 
  106.   transform: scale(1); 

HTML:

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3.   <head> 
  4.     <title>Disappearing People Project</title> 
  5.     <meta charset="utf-8"
  6.     <meta http-equiv="X-UA-Compatible" content="IE=edge"
  7.     <meta name="viewport" content="width=device-width, initial-scale=1"
  8.     <meta name="author" content="Jason Mayes"
  9.  
  10.     <!-- Import the webpage's stylesheet --> 
  11.     <link rel="stylesheet" href="/style.css"
  12.  
  13.     <!-- Import TensorFlow.js library --> 
  14.     <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js" type="text/javascript"></script> 
  15.   </head>   
  16.   <body> 
  17.     <h1>Disappearing People Project</h1> 
  18.  
  19.     <header class="note">  
  20.       <h2>Removing people from complex backgrounds in real time using TensorFlow.js</h2> 
  21.     </header> 
  22.  
  23.     <h2>How to use</h2> 
  24.     <p>Please wait for the model to load before trying the demos below at which point they will become visible when ready to use.</p> 
  25.     <p>Here is a video of what you can expect to achieve using my custom algorithm. The top is the actual footage, the bottom video is with the real time removal of people working in JavaScript!</p> 
  26.     <iframe width="540" height="812" src="https://www.youtube.com/embed/0LqEuc32uTc?controls=0&autoplay=1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 
  27.  
  28.     <section id="demos" class="invisible"
  29.  
  30.       <h2>Demo: Webcam live removal</h2> 
  31.       <p>Try this out using your webcam. Stand a few feet away from your webcam and start walking around... Watch as you slowly disappear in the bottom preview.</p> 
  32.  
  33.       <div id="liveView" class="webcam"
  34.         <button id="webcamButton">Enable Webcam</button> 
  35.         <video id="webcam" autoplay></video> 
  36.       </div> 
  37.     </section> 
  38.  
  39.  
  40.     <!-- Include the Glitch button to show what the webpage is about and 
  41.          to make it easier for folks to view source and remix --> 
  42.     <div class="glitchButton" style="position:fixed;top:20px;right:20px;"></div> 
  43.     <script src="https://button.glitch.me/button.js"></script> 
  44.  
  45.     <!-- Load the bodypix model to recognize body parts in images --> 
  46.     <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/body-pix@2.0"></script> 
  47.  
  48.     <!-- Import the page's JavaScript to do some stuff --> 
  49.     <script src="/script.js" defer></script> 
  50.   </body> 
  51. </html> 

 

 

 

 

 

 

責任編輯:張燕妮 來源: 開源最前線
相關推薦

2025-08-29 10:05:00

GarbleGo代碼

2010-08-24 11:54:46

2025-08-12 08:25:46

2018-02-01 21:34:38

戴爾

2021-03-12 11:50:08

項目組件 API

2010-04-08 14:16:21

Linux

2022-06-01 11:14:42

Java代碼技巧

2020-04-02 15:39:51

代碼編譯器前端

2018-10-15 09:20:08

代碼軟件工程師

2017-12-11 15:04:58

404錯誤HTTP代碼

2022-02-08 22:18:10

Chrome插件服務器

2021-06-21 09:37:05

代碼開源可視化

2024-04-30 08:05:15

Rust代碼計算

2023-05-04 00:06:40

2020-09-18 07:05:34

Java編程語言

2015-08-10 11:09:09

Python代碼Python

2020-11-24 09:46:50

算法開源視頻

2018-01-05 14:48:03

前端JavaScript富文本編輯器

2018-07-04 13:00:58

雷軍代碼程序員

2023-06-27 08:28:00

點贊
收藏

51CTO技術棧公眾號

国产精品成人一区二区三区夜夜夜| 日韩精品成人一区二区三区 | 国产中文字幕乱人伦在线观看| 亚洲AV无码一区二区三区性| 国产欧美91| 中文字幕av一区| 免费黄色在线播放| 成人性教育av免费网址| 亚洲日本韩国一区| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 欧美视频在线播放一区| 中文日本在线观看| 国产999精品久久久久久| 日本高清视频精品| www青青草原| 国内精品久久久久久久久电影网 | 日韩免费av一区二区| 欧美在线视频第一页| 国产99久久| 欧美r级电影在线观看| 日韩在线第三页| 色女人在线视频| 国产欧美日韩麻豆91| 成人欧美一区二区三区视频 | 日韩精品在线看片z| 日本熟妇人妻xxxxx| 激情av在线| 亚洲视频在线一区观看| 日韩理论片在线观看| 日本xxxxxwwwww| 国产一区二区女| 国产精品女视频| 亚洲午夜18毛片在线看| 韩国在线一区| 超碰日本道色综合久久综合| 69xxx免费| 九色精品91| 日韩风俗一区 二区| 亚洲国产欧美日韩在线| 免费成人毛片| 欧美在线高清视频| 久热免费在线观看| 性xxxxfreexxxxx欧美丶| 亚洲最色的网站| 中文字幕精品在线播放| 在线免费观看的av网站| 国产亚洲精品超碰| 欧美人xxxxx| 亚欧在线观看视频| 成人免费黄色在线| 国产高清一区二区三区| 亚洲大尺度视频| 国产99久久久国产精品潘金| 91视频免费在线观看| 91在线视频国产| 六月丁香综合在线视频| 国产欧美日韩高清| 在线免费看av片| 久久av资源站| 亚洲已满18点击进入在线看片| 91在线观看喷潮| 国产伦精品一区二区三区免费 | 色偷偷在线观看| 成人av网站大全| 精品无人区一区二区三区| 日本黄色三级视频| 91色综合久久久久婷婷| 免费毛片一区二区三区久久久| 日韩在线免费看| 久久久久综合网| 午夜午夜精品一区二区三区文| 98在线视频| 亚洲素人一区二区| 成人性生活视频免费看| 国产在线美女| 欧美亚洲日本一区| 天堂av8在线| 一区二区三区欧洲区| 亚洲精品久久久久久久久久久久久| 风间由美一二三区av片| 国产成人三级| 久久九九国产精品怡红院| 欧美日韩精品一区二区三区视频播放| 欧美日韩亚洲一区| 欧美中文字幕视频在线观看| 羞羞色院91蜜桃| 国产精品一区二区三区99| 国产精品制服诱惑| 免费成人av电影| 综合婷婷亚洲小说| 亚洲美免无码中文字幕在线| 日韩av超清在线观看| 91精品婷婷国产综合久久性色| 麻豆短视频在线观看| 国产免费久久| 欧美国产精品日韩| 欧美brazzers| 高潮精品一区videoshd| 日韩欧美亚洲日产国产| 污污片在线免费视频| 一本色道久久综合亚洲精品按摩| 婷婷激情5月天| 综合亚洲色图| 久久99国产综合精品女同| 日韩 国产 欧美| 国产99久久久国产精品| 五码日韩精品一区二区三区视频| 免费影视亚洲| 欧美色综合网站| 亚洲一区二区三区四区av| 日本一二区不卡| 97国产真实伦对白精彩视频8| 中文亚洲av片在线观看| 不卡av电影在线播放| 亚洲精品一区二区三区四区五区| sm在线播放| 7777女厕盗摄久久久| 欧美特级黄色录像| 亚洲精华国产欧美| 国产精品激情自拍| 性猛交xxxx| 亚洲高清免费视频| aaaaaaaa毛片| 99久久亚洲精品蜜臀| 日本a级片电影一区二区| www.综合色| 1024成人网色www| 最近中文字幕一区二区| 一道本一区二区三区| 欧美精品久久久久久久免费观看| 国产精品久久久久久无人区 | 国产在线精品国自产拍免费| 日韩av一级大片| 毛片电影在线| 亚洲国产91色在线| 国产亚洲欧美精品久久久久久| 久久99精品国产.久久久久| 日本午夜一区二区三区| 小h片在线观看| 亚洲免费视频观看| 国产精品21p| 久久这里只精品最新地址| 拔插拔插海外华人免费| www.丝袜精品| 久久久久久久国产| 欧美 日韩 中文字幕| 一区二区日韩电影| 精品国产aⅴ一区二区三区东京热| 亚洲人metart人体| 亚洲综合日韩在线| 天堂av资源在线观看| 欧美mv日韩mv国产网站| 日本三级欧美三级| 成人av在线影院| 国产精品999视频| 色天下一区二区三区| 97成人在线视频| 免费成人av电影| 欧美日免费三级在线| 一二三四国产精品| 激情久久五月天| 国产女教师bbwbbwbbw| 99精品国产高清一区二区麻豆| 久久久久久亚洲精品不卡| 日本高清视频在线| 色欲综合视频天天天| 久久日免费视频| 国产一区二区三区在线观看免费视频 | 国产精品视频一区二区三区四 | 国内精品久久久久久久| 香蕉视频911| 欧美专区亚洲专区| 国产美女久久久久久| 国产高清精品在线| 日韩免费一级视频| 欧美精选视频在线观看| 91久久精品国产| 看黄在线观看| 曰本色欧美视频在线| wwwav网站| 色婷婷av一区二区三区软件| av在线播放中文字幕| 国产高清久久久| 日韩在线一级片| 久久免费大视频| 国产激情美女久久久久久吹潮| 欧美男人天堂| 日韩在线观看免费全| 亚洲av色香蕉一区二区三区| 欧美日韩午夜剧场| 久久成人小视频| 不卡一二三区首页| 中文字幕66页| 国产一区二区高清| 中国一级黄色录像| 精品中文字幕一区二区三区av| 91精品久久久久久| 天堂中文在线播放| 九九热r在线视频精品| 久草视频视频在线播放| 日韩视频在线永久播放| 亚洲天堂男人av| 亚洲一区二区黄色| 娇小11一12╳yⅹ╳毛片| 成人性视频网站| 黄大色黄女片18第一次| 在线观看不卡| 五月天综合婷婷| 国产成人3p视频免费观看| 国产另类第一区| 亚洲成人毛片| 国产精品国产三级国产专播精品人| 视频在线这里都是精品| 色狠狠久久aa北条麻妃| 色久视频在线播放| 精品国产一区久久| 怡春院在线视频| 色嗨嗨av一区二区三区| 日韩少妇裸体做爰视频| 亚洲免费在线看| 免费一级suv好看的国产网站| 久久美女高清视频| 国产视频久久久久久| 国产精品综合视频| 亚洲免费黄色网| 蜜桃视频在线观看一区二区| 免费av网址在线| 亚洲永久网站| 男人日女人逼逼| 亚洲激情社区| bt天堂新版中文在线地址| 午夜影院欧美| 超碰成人在线免费观看| 日韩久久精品| 先锋影音一区二区三区| 精品日韩一区| 日韩欧美99| 精品一区二区三区在线| 日韩高清三级| 精品日韩免费| 亚洲精品9999| 91久久久精品国产| 中文字幕在线观看一区二区三区| 成人激情免费视频| 日韩欧美精品一区二区| 成人羞羞在线观看网站| 亚洲国产欧美日韩| 日韩欧美高清| 国产又爽又黄ai换脸| 天天射成人网| 老司机午夜免费福利视频| 亚洲五月综合| 300部国产真实乱| 一区在线观看| 又粗又黑又大的吊av| 欧美一区=区| 手机看片福利日韩| 久久精品国产秦先生| 在线观看av免费观看| 国产91在线|亚洲| 成人在线视频免费播放| 91美女蜜桃在线| 久久午夜福利电影| 国产精品免费免费| 无码人妻精品一区二区三区夜夜嗨| 亚洲精品成人精品456| 九九视频免费在线观看| 午夜精品久久久久久不卡8050| 天天操天天摸天天干| 在线观看区一区二| 国产偷拍一区二区| 亚洲精品www久久久| 国内av一区二区三区| 日韩亚洲第一页| 福利小视频在线| 欧美最猛性xxxxx(亚洲精品)| 欧美日一区二区三区| 亚洲影影院av| 影视先锋久久| 久久国产精品免费观看| 99视频+国产日韩欧美| 日韩福利视频在线| 国产一区三区三区| 99re久久精品国产| 国产精品女同互慰在线看| 欧美成人精品一区二区免费看片 | 一级片视频播放| 亚洲国产一区自拍| 午夜激情视频在线| 久久久久久久久久国产精品| 国产一区二区主播在线| 91超碰rencao97精品| 亚洲制服欧美另类| 一二三四中文字幕| 久久中文精品| av电影中文字幕| 国产色一区二区| 国产一级在线免费观看| 欧美在线啊v一区| 无码国产伦一区二区三区视频| 在线观看日韩欧美| av资源中文在线| 91青草视频久久| 久久综合欧美| 国产黄色片免费在线观看| 免费人成精品欧美精品| 一起草在线视频| 一区二区三区四区高清精品免费观看| 天天爽夜夜爽人人爽| 精品女同一区二区| 欧美a免费在线| 日本精品久久中文字幕佐佐木 | 欧美日韩亚洲在线| 国产精品www994| 手机免费av片| 国产亚洲一本大道中文在线| 国产一级在线视频| 91精品国产91久久综合桃花| 国产高清在线看| 777国产偷窥盗摄精品视频| 欧美成人精品一级| 在线日韩av永久免费观看| 日韩国产欧美在线播放| 日本免费福利视频| 亚洲福利一区二区| 精品欧美一区二区精品少妇| 日韩一级裸体免费视频| 日韩影片中文字幕| 久久久久久久久久码影片| 激情欧美国产欧美| www.欧美com| 亚洲精品免费在线播放| 夜夜躁狠狠躁日日躁av| 伊人男人综合视频网| 2022成人影院| 久久99九九| 国产视频一区欧美| 亚州av综合色区无码一区| 亚洲成av人片在线观看无码| 精品国产无码AV| 欧美成人在线网站| 欧美片网站免费| 国产内射老熟女aaaa| 国产成人三级在线观看| 五月天婷婷色综合| 日韩丝袜美女视频| 四虎亚洲成人| αv一区二区三区| 怡红院精品视频在线观看极品| 人妻激情偷乱视频一区二区三区| 亚洲美女在线国产| 国产黄色片免费| 久久久亚洲福利精品午夜| 久久国产精品免费精品3p| 老太脱裤子让老头玩xxxxx| 成人av资源在线| 91精品国产综合久久久蜜臀九色| 亚洲欧美资源在线| 最新日韩一区| 五月天色婷婷综合| 国产高清一区日本| 日韩免费一级片| 亚洲欧美日韩第一区| 成人黄页网站视频| 国产高清免费在线| 成人视屏免费看| 在线观看日本视频| 一区二区三区回区在观看免费视频| 国产成人免费| 精品久久久无码人妻字幂| 成人av免费在线观看| 欧美国产一级片| 久青草国产97香蕉在线视频| 91精品啪在线观看国产爱臀| 精品国产免费av| 亚洲国产精品高清| 国产xxxxxx| 5252色成人免费视频| 欧美一区2区| 在线成人免费av| 欧美日韩在线视频观看| 思思99re6国产在线播放| dy888夜精品国产专区| 国产一区二区三区的电影| av片在线免费看| 精品成人佐山爱一区二区| 人狥杂交一区欧美二区| 亚州欧美一区三区三区在线| 国产成人精品免费一区二区| 国产一级片毛片| 久久天天躁狠狠躁夜夜躁2014| 久久男人av| 午夜剧场高清版免费观看| 午夜精品久久久久久| 五月香视频在线观看| 国产精品一区二区三区免费| 日本va欧美va欧美va精品| 国产性猛交普通话对白| 国产亚洲精品久久久久久777| 伊人久久大香线蕉av超碰|