999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向物聯網應用的彩碼識別技術研究*

2018-03-13 01:18:36張恒麗李林森李建華周國民
通信技術 2018年2期
關鍵詞:排序方法

張恒麗,李林森,李建華,周國民

0 引 言

如今,無論是公共自行車、食堂三餐還是溝通聯系,都離不開移動互聯網。其中,二維碼已經融入到人們的吃穿住行,給人們帶來了諸多便利。“掃碼”不只是一種工具,更成為一種生活方式。本文討論一種基于彩色光學識別的、極簡的、先進的物聯網技術——彩碼。顧名思義,彩碼不同于二維碼,是由彩色色塊組成的矩形碼。

彩碼是在傳統二維碼基礎上加上紅黃藍等色彩矩陣構成的彩色三維矩陣碼,是全球第三代條碼技術的代表。對比當前常見的二維碼技術,彩碼具有安全性強、識別率高、生產成本低、信息容量大、抗畸變性強等特點。一般的商品以及報紙、雜志都可以附有彩碼,簡單、便捷。

在國外,彩碼的應用已經比較普遍[1]。2015年,意大利米蘭世博會,日本館便采用了彩碼技術;在東京書店、名古屋的圖書館,都可以看見彩碼的應用實例。在韓國,彩碼的使用已經普及到百姓生活的方方面面,戶外屏幕、廣告牌、雜志、商品、電影海報隨處可見各式彩碼。可見,它比以往的識別方式具有更大的優越性和更廣泛的應用空間。

但是,在國內,彩碼的發展尚處于起步階段[2]。目前,國內學術界對彩碼的研究主要涉及彩碼的設計、讀取和安全性等。陳錦昌等結合計算機科學與藝術設計兩個領域,對彩碼進行再設計[3];盛健等提出了彩碼的信息讀入和讀取的基本思路[4];孫向華等為保證彩碼的版權保護,提出了基于奇異值分解的零水印算法[5]。但是,這些研究尚處于理論階段,并未得到實踐的驗證。

本文基于對三色彩碼的色塊定位和提取,完成了對彩碼的解碼,成功驗證了ID的輸出。同時,對識別過程中可能遇到的問題進行分析和解決,如色塊的偏移、彩碼的雜點等。根據所查閱的文獻,還未有學者研究類似算法。

本文通過兩種方案來識別彩碼。方案一采用輪廓提取與中心點排序算法,在PC中通過Opencv2.4.10和Visual Studio 2012實現;方案二是在方案一的算法基礎上,增加聚類算法和抗干擾算法,通過Android Studio進行安卓手機的APP開發。

本文的結構如下:第1部分為輪廓提取與中心點排序算法及其實現;第2部分為改進的聚類算法和抗干擾算法及其實現;第3部分為結論。

1 輪廓提取與中心點排序算法及其實現

彩碼標簽的結構為,選擇多種可見光顏色,分別繪制矩形色塊,通過不同顏色的矩形色塊的組合標識標簽的識別號,即ID號。其中,矩形色塊相互之間用填充色黑色進行分隔。

假設彩色矩形碼標簽上設置有ROW×COL的矩形色塊陣列,分別著色為R、B、Y,即對應紅色、藍色、黃色。其中:定義紅色為0,藍色為1,黃色為2;ROW=3、COL=8分別為矩形色塊陣列的行標和列標[6]。

本代碼實現的功能是識別計算機中存入的一張彩碼圖片。本文利用軟件Opencv2.4.10和Visual Studio 2012實現識別彩色矩形碼的基本算法,并輸出彩碼的ID編號。

1.1 畫出色塊的輪廓

首先,在電腦中導入一張彩色矩形碼標簽的圖片,如圖1所示。程序讀入并顯示圖片,圖片名稱為origin。

圖1 彩色矩形碼標簽的圖片

色塊提取過程中,為了后續能夠更方便地找出色塊中心點并排序,因此需要檢測出色塊的邊緣輪廓。具體方法如下。

取origin中紅色色塊的結果,并顯示為result;設置提取紅色色塊的方法為getRedImage;傳入參數是1個圖像Mat;所有像素點的行數和列數就是圖像的高和寬;BGR表示每個像素點有3個顏色通道——紅綠藍;對圖像的行和列進行遍歷,取Mat中每個像素點對應的坐標。

所有顏色都是由BGR 3個通道來表示的。通過在線顏色選擇器進行實驗,發現:

①當滿足(r-b>70)&&(g-b>50)時,認為色塊是黃色;

②當滿足(b-r>75)&&(b>g)時,認為色塊是藍色;

③當滿足(r-g>60)&&(r-b>65)的時候,認為色塊是紅色。

同時,把對應的紅色色塊的row和col置為白色,其他不滿足紅色的色塊置為黑色,從而得到result。圖2為紅色色塊置白(其余色塊置黑)的圖片。以此類推,可以同樣得到藍色色塊或黃色色塊置為白色的result圖片。

圖2 紅色色塊置白(其余色塊置黑)的圖片

畫出白色區域的輪廓。以黃色色塊為例,通過findContours勾勒黃色色塊的輪廓,并存儲輪廓上的所有點。通過drawContours繪制輪廓,就能在contours窗口上顯示黃色色塊的輪廓[7],如圖3所示。

圖3 黃色色塊的輪廓

1.2 計算色塊中心點

計算每個contour的中心點。因為這是一個有序的序列,即從左往右、從上往下排序編碼的,所以必須得有順序。比如,黃色對應的編碼為2,為了區分所有黃色色塊的位置,就要根據中心點來判斷。同一行中,左邊色塊中心點的x必定小于右邊色塊中心點的x,且y處于同一行。當y值處于比較接近的值時,說明它們處在同一行。所以,首先區分它們是否處于同一行,然后區分處于哪一列。

以紅色色塊為例。計算每個色塊的中心點,并畫出中心點。其中,centerMoments是所有中心點的坐標。如果傳入的是藍色色塊,那么中心點就是藍色的中心點;如果傳入的是黃色色塊,那么中心點就是黃色的中心點。最后的結果是所有紅黃藍色塊的中心點集合[8],如圖4所示。

圖4 所有紅黃藍色塊的中心點集合

1.3 中心點排序

現在把這些中心點組合起來進行排序。先進行y值排序。y值只有3個值,且每一行的y值是相等的。首先分別取得紅黃藍中心點y值的最大值和最小值,得出所有點的最大值和最小值。其中,最小值是第一行,最大值是最后一行,兩個相加除以2就是第二行的坐標,從而可以把每一行區分開來,進而把紅色色塊的中心點分別分配到對應的行(row_01,row_02,row_03)。同樣地,分配藍色和黃色色塊的中心點。具體步驟如下:

定義maxVerticalValue=0;

minVerticalValue=10000;

遍歷所有紅色點集

當maxVerticalValue小于紅色點集y值,則將y值賦于maxVerticalValue;

同樣地,當minVerticalValue大于紅色點集y值,則將y值賦于minVerticalValue。

遍歷完成后得到第一行的y坐標,即為minVerticalValue;

第三行的y坐標為maxVerticalValue;

第二行的x坐標為(maxVerticalValue+minVertic alValue)/2;

定義row_01、row_02、row_03為第一行、第二行、第三行的點集。

遍歷紅色點集,將點集分別push到row_01、row_02、row_03。

此時,line01表示第一行所有點的集合,line02和line03同理。此時,x值是亂序的,因此要對每一行的8個x進行排序。x值小,說明靠左端;x值大,說明靠右端。以第一行為例,進行x的升序排序:遍歷第一行的點,對第一行的點x坐標進行升序排序。

sort(第一行起始橫坐標,第一行末尾橫坐標);

當知道每個點的坐標順序后,需要找出這些坐標對應的顏色。首先,定義sortedRow_01為第一行排序后的點。然后,遍歷第一行的點。當第一行的點x坐標與排序后的x坐標值相等時,將此點push到sortedRow_01中,完成第一行點從左往右的排序[9]。

1.4 輸出彩碼ID

將某個中心點坐標放入紅黃藍集合中進行搜索。當這個坐標與其中一點相等時,認為色塊與顏色相互對應。由此,計算出第一行的顏色。第二行與第三行類似。最后,程序計算出整個彩色矩形碼的ID,如圖5所示。

圖5 彩色矩形碼的ID

2 改進的聚類算法和抗干擾算法及其實現

此方案中,采用與方案一同樣的彩碼結構。本節代碼在安卓手機上進行APP開發,實現識別彩碼并輸出相應編碼的功能。

2.1 通過計算機執行Android程序的過程

在Android手機上運行。

(1)手機設置

①將安卓手機用USB連線連接到電腦上;

②開啟安卓手機上的USB調試選項。

(2)從Android Studio運行程序

②出現Choose Device窗口,選擇連接電腦的安卓手機,點擊OK。

這樣,Android Studio會把應用程序安裝到手機設備,并啟動程序進行運行。

2.2 Android開發相關概念

在Android開發中有著重要的4大組件——activity顯示界面,service服務,Broadcast Receiver廣播和Content Provider數據通信。其中,Activity組件負責與用戶交互。具體地,在單獨的屏幕上顯示一些控件,并監聽處理用戶的事件,從而做出相應響應。

Activity有4種基本狀態:Running、Paused、Stopped和Killed,即運行、暫停、停止和刪除狀態[10]。

Running:當啟動一個Activity時,它被激活。

Paused:啟動一個透明的或新的非全屏的Activity時,之前的Activity雖然仍然可見,但不可與用戶交互,即失去了焦點,此時的狀態稱之為Paused。

Stopped:當新的Activity完全覆蓋了之前的Activity,導致之前的窗口被隱藏,不可見的時候,之前的Activity進入Stopped狀態,即停止狀態。

Killed:當Activity處于Paused或Stopped狀態時,系統可將此Activity從內存中刪除。此時,該Activity就被Killed了。若要再次顯示該Activity,必須從頭開始。

當一個Activity實例被創建、刪除或啟動其他Activity時,它就在這四種狀態中進行轉換。

Android通過Activity棧來管理Activity,而前臺的Activity處于棧頂。此時分兩種情況來看。第一種情況,當前臺Activity被刪除時,棧中第二層的Activity將上浮到棧頂,從而被激活。第二種情況,當有一個新的Activity入棧時,原來的Activity會被壓入到棧的第二層。因此,Activity在不同狀態間的轉換與它在棧中的位置變化密切相關。

Activity典型的生命周期,如圖6所示(在有用戶參與的情況下,Activity的生命周期過程)。

圖6 Activity典型的生命周期

如圖6所示,Activity經過了從創建、運行、停止到刪除的生命周期過程。下面將逐一介紹它們的調用時機[11]。

onCreate:這是Activity生命周期的第一個調用方法,是在創建Activity時回調。可以根據需要重寫該方法,以此做一些初始化操作。比如,通過setContentView()函數填充屏幕的用戶界面;通過findViewById()返回xml中定義的視圖或組件的ID等。

onStart:此方法被回調時,說明Activity正在啟動,但還沒有在前臺顯示,因此無法與用戶進行交互。此時,Activity已處于可見狀態,只是無法看見。

onResume:當調用此方法時,Activity已在前臺可見,可以與用戶進行交互。此時,Activity處于前面所說的Running狀態。由此可以看出,onResume與onStart方法有一個相同點,即兩者都表示Activity可見。不同在于onStart回調時,Activity在后臺,無法與用戶交互;而onResume回調時,Activity已顯示在前臺,能夠與用戶交互。從流程圖中看到,Activity執行onPause()方法后,也有可能通過調用onResume()方法重新回到前臺。同樣地,也可以在onResume方法中進行一些初始化操作,如初始化在onPause中釋放資源的控件,同時主動觸發Activity在進入onResume時發生的所有初始化。

onPause:此方法被回調時,表示Activity正在停止,此時Activity進入Paused狀態,表示當前Activity失去焦點。比如,來電話時,系統自動調用onPause()方法。從圖1可以看到兩種情況。一種情況是上述onResume中所說的,在onPause方法執行后,由于用戶操作,使得當前Activity退居后臺后又迅速回到當前Activity。因此,Activity會調用onResume方法。另一種情況更普遍,即在執行完onPause后,Activity會緊接著回調onStop,具體見下面描述。同樣,在onPause中能夠執行一些操作,如存儲數據、停止動畫或回收資源等,但這些操作不能太耗費時間。因為只有調用完onPause()方法后,新的Activity的onResume方法才會被調用。所以,如果操作耗時,將會影響到新的Activity的顯示。

onStop:通常情況下,onPause方法執行完成后便會立即執行onStop方法,表示Activity即將停止或者完全被覆蓋。此時,Activity進入Stopped狀態,Activity不可見,僅在后臺運行。當然,onStop方法可以釋放不再需要的資源,但不能太耗時。

onRestart:當Activity從不可見狀態變為可見狀態時,該方法被調用,說明Activity重新啟動。例如,當用戶暫停一個Activity而打開一個新的Activity時,系統執行onPause和onStop,之后用戶如果又回到之前被暫時停止的Activity頁面,onRestart就會被回調。

onDestroy:這是生命周期中最后一個執行的方法,表示Activity正在被銷毀。執行此方法后,系統銷毀了這個Activity占據的內存空間。如果要再次進入這個Activity,那么需要重新創建,回調onCreate()方法。

2.3 實現彩碼識別

在編寫識別彩碼的代碼過程中,有3種基本標簽:文字TextView、圖片ImageView和按鈕Button。TextView設置的是屏幕上的Result字樣。setOnClickListener是設置當點擊按鈕時進行監聽,當按下按鈕時把結果改掉,啟動計算,并把結果放到TextView中。

這里設計了一個函數,稱為findContoursAndDraw。由于圖像會有很大的噪聲干擾,因此將彩碼的3種顏色色塊進行圖像灰度化,通過cvtColor函數實現原圖→grayscale的轉換。圖7為彩碼灰度圖。

圖7 彩碼灰度圖

然后,將灰度圖轉換為binary二值圖[12],如圖8所示。

圖8 彩碼二值圖

下面將描述圖像的構成。每張圖像的像素由R/G/B 3種顏色組成,每個分量值分別為0~255,組合共有256×256×256種顏色變化范圍。如果一個圖像像素的RGB為43、43、43,說明此時圖像是黑色的。如果圖像寬1 920,高1 080,那么這幅圖像就有1 920×1 080×3的數據。

圖像灰度化是將彩色圖像中的彩色信息剔除,只留下了亮度信息。因此,把RGB 3個分量轉成一個分量:3 channel→1 channel。如果將上述RGB圖片(43,43,43)轉換成grayscale灰度圖,那么就有1 920×1 080的數據。因為對于灰度圖來說,每個像素上的點就一個值,為0~255中的一個數。值越小越黑,值越大越白。所以,一般先將彩色圖像轉化為灰度圖,以降低后續的圖像計算量。然而,灰度圖像仍然反映了彩碼圖像的整體以及局部色塊的色度和亮度等級的分布和特征。

此時,再進行圖像二值化。Binary的意思是非此即彼,非負即正。將圖像上的像素點的灰度值設置為0或255,即將整個圖像呈現出明顯的只有黑和白的視覺效果。當把灰度圖轉換成二值圖時,首先獲取每個pixel,之后將判斷grayscale的value是否大于某個值,假設為120。若這個值大于120,說明圖像偏白,因此設為255;如果小于120,就設為黑色0。這樣做是因為將圖片轉換成黑白后,能夠更加清晰地辨識每個色塊的邊緣輪廓。如果有雜點,相比彩色圖片更易抗干擾。

對于彩碼雜點圖(如圖9所示),要找出正確色塊的連通域。因此,設計了彩碼圖像抗干擾算法。

圖9 彩碼雜點圖

算法思想:通過進行色塊輪廓的遍歷,找出彩碼的有效色塊。尋找連通域時,會把雜點也計算進去,因此設置一個rule用來過濾一些不規則的色塊。具體步驟:(1)判斷這個contours的面積大小是否符合;(2)假如連通域面積與正常色塊相比太小或者太大,那么認為這不是正確色塊;(3)如果contours的面積與正常色塊面積差不多,那么要根據它的形狀進行判斷;(4)由于標準色塊的寬高比為1∶1,若contours的輪廓寬高比并不滿足1∶1,那么認為此色塊為雜點。

算法基本思路如下:

輸入 area, sizeRate

定義 DEBUG=false

THRES_SIZE_MIN=100*100

THRES_SIZE_MAX=1000*1000

THRES_SIZE_RATE_MIN=0.618

THRES_SIZE_RATE_MAX=1.618

IF DEBUG或

(area>THRES_SIZE_MIN

且 area<THRES_SIZE_MAX

且 sizaRate>THRES_SIZE_RATE_MIN

且 sizaRate<THRES_SIZE_RATE_MAX)

為真

畫出輪廓

下面將正確色塊用綠色的邊框勾勒出來,其三原色 RGB為(50,255,80),并針對 24個contour找到它的中心。(rect.x,rect.y)表示每個色塊的左上角點的坐標。rect.x往右加上寬的一半,是色塊中心點的橫坐標;rect.y往下加上高的一半,是色塊中心點的縱坐標。同樣地,中心點為綠色(50,255,80),半徑是10。這里需注意,圖像具有一個特點,即x從左往右逐漸變大,y值從上往下逐漸變大。如圖10所示,為圖像中的坐標建立。

圖10 圖像中的坐標建立

編碼過程中,calArray是最關鍵的函數。實現步驟:(1)上傳原圖,創建一個color代碼,寬和高為3行8列的數組;(2)findContours把矩形框全找出來;(3)find initial contours做一個初始化,如果邊框個數不是3行8列,說明這個彩碼有問題,那么屏幕顯示”the target number is not standard!(3*8)”;(4)如果檢測到的是正確的彩碼,那么根據色塊邊緣計算中心點;(5)通過函數getSortedContourCenters()得到每一個Contour的中心點。

然而,雖然知道了每個中心點的坐標,但是這些點是無序排列的。圖11為中心點無序坐標。因此,需要知曉8個點分別對應的行數(第一、二、三行)以及從左往右的序列,而這需要采用聚類算法。

聚類算法如下。首先,需要區分出每一行的點。因為每一個色塊的排列位置有可能上下左右小范圍波動,所以在設計算法時也要考慮到這一點。例如,假設第一行有3個點分別為(100,120)(120,121)(140,119),第二行有3個點(100,160)(121,158)(139,162)……可以看出,盡管中心點橫坐標和縱坐標的排列上是有一定誤差的,但仍然可以進行聚類——如y坐標,只會把相近數據歸為一行,而相差40上下的數據歸為兩行。

圖11 中心點無序坐標

排序算法[13]:由于中心點是亂序的,所以要進行排序算法。假設x、 y上下左右波動容忍值THRES_ROW_DIS=20,遍歷所有中心點進行從小到大y值排序和x排序。

輸入中心點坐標 o1,o2

if o2.y-o1.y>=THRES_ROW_DIS

return

o1.y,o2.y相對位置

else return

o1.x,02.x相對位置

排序完畢后,找出每個中心點對應的色塊顏色,即getColorOfPoint()函數,并返回相應的編碼(紅色0,藍色1,黃色2)。

圖12是雜點彩碼計算輸出結果。

圖12 雜點彩碼計算輸出結果

3 結 語

本文提出了一種新型的掃碼標簽——彩碼,通過中心點排序、色塊偏移矯正和雜點去除等多個算法,實現了對彩碼信息的讀取。可見,彩碼在未來商品世界中的廣泛應用即將成為可能,如圖書的識別、產品的身份認證、生產銷售的狀態等。然而,在彩碼的研究設計中還有諸多問題要解決,如識別的安全性能、識別的速度等,是下一步的研究重點。

[1] 許冬琦.彩碼識別技術:所見即所得改變商業世界[J].通信世界,2012(13):25.XU Dong-qi.Color Code Recognition:What You See Is The Change in The Business World[J].Communications World,2012(13):25.

[2] 付金瑩,戴治城.一種創新型五色彩碼的設計與實現[J].中國新通信,2015(23):99-100.FU Jin-ying,DAI Zhi-cheng.Design and Implementation of an Innovative Color Code[J].New Communications,2015(23):99-100.

[3] 陳錦昌,王超然.彩碼再設計中降低色彩飽和度的研究[J].圖學學報,2017,38(03):346-351.CHEN Jin-chang,WANG Chao-ran.The Research on Reduction of Saturation in Redesign of Color Code[J].Journal of Graphics,2017,38(03):346-351.

[4] 盛健,王晶晶,張毅群等.基于新型彩碼的信息生成、讀取和加密系統設計[J].科技創新與應用,2015(25):66.SHENG Jian,WANG Jing-jing,ZHANG Yi-qun,et al.Design of Information Generation,Reading and Encryption System Based on New Color Code[J].Technology Innovation and Application,2015(25):66.

[5] 孫向華,趙雅英,馬小虎等.基于奇異值分解的三維彩碼零水印算法[J].電腦知識與技術,2011,7(01):199-201.SUN Xiang-hua,ZHAO Ya-ying,MA Xiao-hu,et al.A Zero-Watermark Algorithm Based on SVD for Color Code Image[J].Computer Knowledge and Technology,2011,7(01):199-201.

[6] 李林森,王世祺,唐俊華等.基于彩色矩形碼的圖書管理方法及彩色矩形碼標簽:中國,201611240151.X[P].2017-01-04.LI Lin-sen,WANG Shi-qi,TANG Jun-hua,et al.Book Management Method Based on Color Rectangle Code and Color Rectangle Code Lable:China,201611240151.X[P].2017-01-04.

[7] Gary Rost Bradski.學習opencv[M].北京:清華大學出版社,2009.Gary Rost Bradski.Learning Opencv[M].Beijin:Tsinghua University Press,2009.

[8] Robert Laganiere.OpenCV2計算機視覺編程手冊[M].北京:科學出版社,2013.Robert Laganiere.OpenCV2 Computer Visual Programming Manual[M].Beijin:China Science Publishing & Media Ltd,2013.

[9] 譚浩強.C++程序設計[M].北京:清華大學出版社,2015.TAN Hao-qiang.C++ Program Design[M].Beijin:Tsinghua University Press,2015.

[10] 任玉剛.Android開發藝術探索[M].北京:電子工業出版社,2015.REN Yu-gang.Exploration of The Art of Development of Android[M].Beijin:Publishing House of Electronics Industry,2015.

[11] 何紅輝.Android開發進階:從小工到專家[M].北京:人民郵電出版社,2016.HE Hong-hui.Android Advanced Development:From The Laborer to The Experts[M].Beijin:Posts & Telecom Press,2016.

[12] Bruce Eckel.Java編程思想[M].第4版.北京:機械工業出版社,2007.Bruce Eckel.Thinking in Java[M].Fourth Edition.Beijin:China Machine Press,2007.

[13] Damonare.十大經典排序算法[DB/OL].(2016-09-19)[2017-10-20].http://web.jobbole.com/87968/.Damonare.Ten Classical Sorting Algorithms[DB/OL].(2016-09-19)[2017-10-20].http://web.jobbole.com/87968/.

猜你喜歡
排序方法
排排序
排序不等式
恐怖排序
學習方法
節日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 91久久青青草原精品国产| 欧美激情第一欧美在线| 中文字幕亚洲电影| 综合色88| 亚洲免费毛片| 国产乱视频网站| 男女精品视频| 精品国产电影久久九九| 国产免费观看av大片的网站| 国产剧情国内精品原创| 成人午夜视频在线| 在线国产91| 国产精品一区二区国产主播| 亚洲妓女综合网995久久| 新SSS无码手机在线观看| 青青国产在线| 92午夜福利影院一区二区三区| 九九九国产| 毛片a级毛片免费观看免下载| 色香蕉网站| 色综合久久无码网| 亚洲成人精品在线| 四虎影视国产精品| 日韩色图在线观看| 久久久久人妻一区精品| 国产午夜无码片在线观看网站 | 国产a在视频线精品视频下载| 在线中文字幕日韩| 国产精品女主播| 亚洲天堂免费在线视频| 99久久精品无码专区免费| 国产在线观看91精品亚瑟| 亚洲国产成人久久精品软件| 亚洲国产高清精品线久久| 欧美国产日韩在线观看| 日本黄色不卡视频| 亚洲欧美一区二区三区麻豆| 国产拍揄自揄精品视频网站| 91破解版在线亚洲| 99久久人妻精品免费二区| 国产h视频免费观看| 在线观看亚洲精品福利片| 久久精品aⅴ无码中文字幕| 在线精品欧美日韩| 亚洲中文字幕无码mv| 99精品影院| 亚洲国产欧美目韩成人综合| 国产不卡在线看| 国产成人精品第一区二区| 天堂va亚洲va欧美va国产| 国产精品成人免费综合| a级高清毛片| 国产日韩欧美视频| 亚洲bt欧美bt精品| 国产欧美日韩va另类在线播放| 爱色欧美亚洲综合图区| 伊人激情久久综合中文字幕| 激情爆乳一区二区| 欧美国产日本高清不卡| 国产一区二区精品高清在线观看| 国产精女同一区二区三区久| 91精品视频在线播放| 91欧美在线| 亚洲va视频| 免费jjzz在在线播放国产| 尤物视频一区| 国产精品美乳| 国产精品妖精视频| 亚洲免费黄色网| 亚洲精品不卡午夜精品| 国产毛片久久国产| 日韩亚洲高清一区二区| 天堂岛国av无码免费无禁网站| 欧美成人在线免费| 青青草a国产免费观看| 又黄又湿又爽的视频| 久久亚洲精少妇毛片午夜无码| 亚洲中文在线看视频一区| 伊人久久久久久久久久| 青草午夜精品视频在线观看| 欧美中文字幕第一页线路一 | 久久这里只有精品23|