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

太囂張了!他竟用Python繞過了“驗證碼”

開發 后端 開發工具
很多網站登錄都需要輸入驗證碼,如果要實現自動登錄就不可避免的要識別驗證碼。本文以一個真實網站的驗證碼為例,實現了基于 KNN 的驗證碼識別。

 [[250250]]

 

 

準備工作

 

 


這里我們使用 OpenCV 做圖像處理,所以需要安裝下面兩個庫:

  1. pip3 install opencv-python  
  2. pip3 install numpy  

 

識別原理

 

 

我們采取一種有監督式學習的方法來識別驗證碼,包含以下幾個步驟:

  • 圖片處理:對圖片進行降噪、二值化處理。

  • 切割圖片:將圖片切割成單個字符并保存。

  • 人工標注:對切割的字符圖片進行人工標注,作為訓練集。

  • 訓練數據:用 KNN 算法訓練數據。

  • 檢測結果:用上一步的訓練結果識別新的驗證碼。

 

下面我們來逐一介紹每一步的過程,并給出具體的代碼實現。

 

 

圖片處理

 


先來看一下我們要識別的驗證碼是長什么樣的:

上圖可以看到,字符做了一些扭曲變換。仔細觀察,還可以發現圖片中間的部分添加了一些顆粒化的噪聲。

 

我們先讀入圖片,并將圖片轉成灰度圖,代碼如下:

  1. import cv2 
  2.  
  3. im = cv2.imread(filepath) 
  4. im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 

經過上面的處理,我們的彩色圖片變成了下面這樣:

將圖片做二值化處理,代碼如下:

  1. ret, im_inv = cv2.threshold(im_gray,127,255,cv2.THRESH_BINARY_INV) 

127 是我們設定的閾值,像素值大于 127 被置成了 0,小于 127 的被置成了 255。處理后的圖片變成了這樣:

接下來,我們應用高斯模糊對圖片進行降噪。高斯模糊的本質是用高斯核和圖像做卷積,代碼如下:

  1. kernel = 1/16*np.array([[1,2,1], [2,4,2], [1,2,1]]) 
  2. im_blur = cv2.filter2D(im_inv,-1,kernel) 

降噪后的圖片如下:

上圖可以看到一些顆粒化的噪聲被平滑掉了。降噪后,我們對圖片再做一輪二值化處理:

  1. ret, im_res = cv2.threshold(im_blur,127,255,cv2.THRESH_BINARY) 

現在圖片變成了這樣:

好了,接下來,我們要開始切割圖片了。

 

 

切割圖片

 


這一步是所有步驟里最復雜的一步。我們的目標是把最開始的圖片切割成單個字符,并把每個字符保存成如下的灰度圖:

首先我們用 OpenCV 的 findContours 來提取輪廓:

  1. im2, contours, hierarchy = cv2.findContours(im_res, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

我們把提取的輪廓用矩形框起來,畫出來是這樣的:

可以看到,每個字符都被檢測出來了。但這只是理想情況,很多時候,相鄰字符有粘連的會被識別成同一個字符,比如像下面的情況:

要處理這種情況,我們就要對上面的圖片做進一步的分割。字符粘連會有下面幾種情況,我們逐一來看下該怎么處理。

 

①4 個字符被識別成 3 個字符

這種情況,對粘連的字符輪廓,從中間進行分割,代碼如下:

  1. result = [] 
  2. for contour in contours: 
  3.     x, y, w, h = cv2.boundingRect(contour) 
  4.     if w == w_max: # w_max是所有contonur的寬度中最寬的值 
  5.         box_left = np.int0([[x,y], [x+w/2,y], [x+w/2,y+h], [x,y+h]]) 
  6.         box_right = np.int0([[x+w/2,y], [x+w,y], [x+w,y+h], [x+w/2,y+h]]) 
  7.         result.append(box_left) 
  8.         result.append(box_right) 
  9.     else
  10.         box = np.int0([[x,y], [x+w,y], [x+w,y+h], [x,y+h]]) 
  11.         result.append(box) 

分割后,圖片變成了這樣:

②4 個字符被識別成 2 個字符

 

4 個字符被識別成 2 個字符有下面兩種情況:

對第一種情況,對于左右兩個輪廓,從中間分割即可。對第二種情況,將包含了 3 個字符的輪廓在水平方向上三等分。

 

具體代碼如下:

  1. result = [] 
  2. for contour in contours: 
  3.     x, y, w, h = cv2.boundingRect(contour) 
  4.     if w == w_max and w_max >= w_min * 2: 
  5.         # 如果兩個輪廓一個是另一個的寬度的2倍以上,我們認為這個輪廓就是包含3個字符的輪廓 
  6.         box_left = np.int0([[x,y], [x+w/3,y], [x+w/3,y+h], [x,y+h]]) 
  7.         box_mid = np.int0([[x+w/3,y], [x+w*2/3,y], [x+w*2/3,y+h], [x+w/3,y+h]]) 
  8.         box_right = np.int0([[x+w*2/3,y], [x+w,y], [x+w,y+h], [x+w*2/3,y+h]]) 
  9.         result.append(box_left) 
  10.         result.append(box_mid) 
  11.         result.append(box_right) 
  12.     elif w_max < w_min * 2: 
  13.         # 如果兩個輪廓,較寬的寬度小于較窄的2倍,我們認為這是兩個包含2個字符的輪廓 
  14.         box_left = np.int0([[x,y], [x+w/2,y], [x+w/2,y+h], [x,y+h]]) 
  15.         box_right = np.int0([[x+w/2,y], [x+w,y], [x+w,y+h], [x+w/2,y+h]]) 
  16.         result.append(box_left) 
  17.         result.append(box_right) 
  18.     else
  19.         box = np.int0([[x,y], [x+w,y], [x+w,y+h], [x,y+h]]) 
  20.         result.append(box) 

分割后的圖片如下:

③4 個字符被識別成 1 個字符

這種情況對輪廓在水平方向上做四等分即可,代碼如下:

  1. result = [] 
  2. contour = contours[0] 
  3. x, y, w, h = cv2.boundingRect(contour) 
  4. box0 = np.int0([[x,y], [x+w/4,y], [x+w/4,y+h], [x,y+h]]) 
  5. box1 = np.int0([[x+w/4,y], [x+w*2/4,y], [x+w*2/4,y+h], [x+w/4,y+h]]) 
  6. box2 = np.int0([[x+w*2/4,y], [x+w*3/4,y], [x+w*3/4,y+h], [x+w*2/4,y+h]]) 
  7. box3 = np.int0([[x+w*3/4,y], [x+w,y], [x+w,y+h], [x+w*3/4,y+h]]) 
  8. result.extend([box0, box1, box2, box3]) 

分割后的圖片如下:

對圖片分割完成后,我們將分割后的單個字符的圖片存成不同的圖片文件,以便下一步做人工標注。

 

存取字符圖片的代碼如下:

  1. for box in result: 
  2.     cv2.drawContours(im, [box], 0, (0,0,255),2) 
  3.     roi = im_res[box[0][1]:box[3][1], box[0][0]:box[1][0]] 
  4.     roistd = cv2.resize(roi, (30, 30)) # 將字符圖片統一調整為30x30的圖片大小 
  5.     timestamp = int(time.time() * 1e6) # 為防止文件重名,使用時間戳命名文件名 
  6.     filename = "{}.jpg".format(timestamp
  7.     filepath = os.path.join("char", filename) 
  8.     cv2.imwrite(filepath, roistd) 

字符圖片保存在名為 char 的目錄下面,這個目錄里的文件大致是長這樣的(文件名用時間戳命名,確保不會重名):

接下來,我們開始標注數據。

 

 

人工標注

 


這一步是所有步驟里最耗費體力的一步了。為節省時間,我們在程序里依次打開 char 目錄中的每張圖片,鍵盤輸入字符名,程序讀取鍵盤輸入并將字符名保存在文件名里。

 

代碼如下:

  1. files = os.listdir("char"
  2. for filename in files: 
  3.     filename_ts = filename.split(".")[0] 
  4.     patt = "label/{}_*".format(filename_ts) 
  5.     saved_num = len(glob.glob(patt)) 
  6.     if saved_num == 1: 
  7.         print("{} done".format(patt)) 
  8.         continue 
  9.     filepath = os.path.join("char", filename) 
  10.     im = cv2.imread(filepath) 
  11.     cv2.imshow("image", im) 
  12.     key = cv2.waitKey(0) 
  13.     if key == 27: 
  14.         sys.exit() 
  15.     if key == 13: 
  16.         continue 
  17.     char = chr(key
  18.     filename_ts = filename.split(".")[0] 
  19.     outfile = "{}_{}.jpg".format(filename_ts, char
  20.     outpath = os.path.join("label", outfile) 
  21.     cv2.imwrite(outpath, im) 

這里一共標注了大概 800 張字符圖片,標注的結果存在名為 label 的目錄下,目錄下的文件是這樣的(文件名由原文件名+標注名組成):

接下來,我們開始訓練數據。

 

 

訓練數據

 


首先,我們從 label 目錄中加載已標注的數據:

  1. filenames = os.listdir("label"
  2. samples = np.empty((0, 900)) 
  3. labels = [] 
  4. for filename in filenames: 
  5.     filepath = os.path.join("label", filename) 
  6.     label = filename.split(".")[0].split("_")[-1] 
  7.     labels.append(label) 
  8.     im = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE) 
  9.     sample = im.reshape((1, 900)).astype(np.float32) 
  10.     samples = np.append(samples, sample, 0) 
  11. samples = samples.astype(np.float32) 
  12. unique_labels = list(set(labels)) 
  13. unique_ids = list(range(len(unique_labels))) 
  14. label_id_map = dict(zip(unique_labels, unique_ids)) 
  15. id_label_map = dict(zip(unique_ids, unique_labels)) 
  16. label_ids = list(map(lambda x: label_id_map[x], labels)) 
  17. label_ids = np.array(label_ids).reshape((-1, 1)).astype(np.float32) 

接下來,訓練我們的模型:

  1. model = cv2.ml.KNearest_create() 
  2. model.train(samples, cv2.ml.ROW_SAMPLE, label_ids) 

訓練完,我們用這個模型來識別一下新的驗證碼。

 

 

檢測結果

 


下面是我們要識別的驗證碼:

對于每一個要識別的驗證碼,我們都需要對圖片做降噪、二值化、分割的處理(代碼和上面的一樣,這里不再重復)。

 

假設處理后的圖片存在變量 im_res 中,分割后的字符的輪廓信息存在變量 boxes 中,識別驗證碼的代碼如下:

  1. for box in boxes: 
  2.     roi = im_res[box[0][1]:box[3][1], box[0][0]:box[1][0]] 
  3.     roistd = cv2.resize(roi, (30, 30)) 
  4.     sample = roistd.reshape((1, 900)).astype(np.float32) 
  5.     ret, results, neighbours, distances = model.findNearest(sample, k = 3) 
  6.     label_id = int(results[0,0]) 
  7.     label = id_label_map[label_id] 
  8.     print(label) 

運行上面的代碼,可以看到程序輸出:

圖片中的驗證碼被成功地識別出來。我們測試了下識別的準確率,取 100 張驗證碼圖片(存在 test 目錄下)進行識別,識別的準確率約為 82%。

 

看到有人說用神經網絡識別驗證碼,準確率可以達到 90% 以上,下次有機會可以嘗試一下。

 

完整代碼已上傳 GitHub,所有訓練數據、測試數據、已標注圖片都已上傳百度網盤,后臺回復“驗證碼”可獲取地址。

 

責任編輯:武曉燕 來源: Python與數據分析
相關推薦

2022-05-11 07:41:31

Python驗證碼

2017-05-16 14:18:08

2017-05-18 09:36:11

大數據爬蟲驗證碼

2013-06-19 10:19:59

2020-11-16 07:28:53

驗證碼

2009-02-09 14:17:36

2009-08-11 14:05:28

JSP驗證碼

2022-02-11 07:10:15

驗證碼

2015-09-21 15:31:05

php實現驗證碼

2015-03-23 17:58:04

驗證碼倒計時并行

2021-01-19 10:29:34

短信驗證碼密碼

2017-12-21 07:38:19

2021-08-02 12:29:15

Python爬蟲網站

2024-01-29 08:32:10

Python驗證碼識別

2015-03-17 09:28:04

2011-11-02 12:43:33

2011-11-02 16:46:41

2019-06-18 07:12:25

驗證碼漏洞加密

2016-11-14 15:40:01

Android
點贊
收藏

51CTO技術棧公眾號

国产欧美啪啪| 金瓶狂野欧美性猛交xxxx| 99热这里是精品| 巨人精品**| 欧美综合视频在线观看| 在线精品亚洲一区二区| 亚洲国产www| 麻豆9191精品国产| 欧美成人久久久| 精品国产无码在线观看| 性欧美video另类hd尤物| 亚洲aaa精品| 亚洲视频在线二区| 少妇又色又爽又黄的视频| 蜜桃视频第一区免费观看| 国内精品免费午夜毛片| www.xx日本| 亚洲调教一区| 精品欧美一区二区在线观看| 黄色av免费在线播放| 欧美人体视频xxxxx| 欧美激情在线免费观看| www.成人av.com| 亚洲一级片免费看| 在线一区视频| 欧美xxxx做受欧美| youjizz亚洲女人| 日韩精选在线| 欧美电影免费提供在线观看| 在线免费视频一区| 成人av观看| 亚洲成av人片www| 一区二区三区四区免费观看| 成人在线免费公开观看视频| 99久久婷婷国产综合精品电影| 亚洲iv一区二区三区| 丰满人妻一区二区三区四区| 亚洲影音先锋| 97免费中文视频在线观看| 高h视频免费观看| 欧美jizz| 日韩在线观看网站| 男人舔女人下部高潮全视频 | 91精品久久久久久久蜜月| 国产丝袜高跟一区| 少妇精品无码一区二区三区| 中文字幕一区二区三区日韩精品| 欧美欧美欧美欧美首页| 在线免费观看视频黄| 亚洲不卡系列| 日本韩国精品在线| 久久精品午夜福利| 欧美第一视频| 日本道在线观看一区二区| 国产成人亚洲精品无码h在线| 国产伦久视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 99热这里只有精品免费| 色综合999| 亚洲制服丝袜一区| 久久这里只有精品23| 黄色在线看片| 黄色一区二区在线| 黄www在线观看| 欧美aa视频| 欧美色视频在线| 伊人网在线综合| 精品一区二区三区中文字幕| 日韩欧美一区电影| 国产精品成人99一区无码| 日本在线中文字幕一区| 亚洲欧美日韩高清| 性猛交娇小69hd| 国产精品久久久久9999赢消| 萌白酱国产一区二区| 国产系列精品av| 噜噜噜躁狠狠躁狠狠精品视频| 国产成人精品在线视频| 中文字幕+乱码+中文乱码www| 免费观看30秒视频久久| 99www免费人成精品| 日韩一区二区三区在线观看视频| 久久亚洲精华国产精华液| 日韩欧美一区二区在线观看| 免费在线你懂的| 亚洲午夜免费电影| 国产免费毛卡片| 天堂综合在线播放| 欧美xxxx在线观看| av电影网站在线观看| 婷婷综合五月| 97精品久久久| 一二三区中文字幕| 丁香激情综合国产| 青青草原成人| 色图在线观看| 色哟哟国产精品免费观看| 91国内在线播放| 女人抽搐喷水高潮国产精品| 中文字幕日韩在线播放| 国产在线一二区| 喷白浆一区二区| 国产精品免费一区二区三区| 天天综合视频在线观看| 亚洲国产一区二区在线播放| 日本xxxx黄色| 精品五月天堂| 欧美精品在线免费| 啪啪小视频网站| a亚洲天堂av| 一区二区三区不卡在线| 免费看男女www网站入口在线| 欧美日韩精品一区二区三区四区| www.男人天堂| 欧美ab在线视频| 国产精品久久一区| 五月天久久久久久| 亚洲人成人一区二区在线观看| 国产av无码专区亚洲精品| 蜜桃在线一区| www亚洲精品| 欧美性猛交xxxx乱大交hd| 成人成人成人在线视频| 91九色国产ts另类人妖| 丁香婷婷久久| 亚洲午夜久久久影院| 日韩精品一卡二卡| 国产凹凸在线观看一区二区| 精品久久免费观看| 丰满少妇一区| 日韩在线免费av| 中文字幕在线日本| 久久这里只有精品6| 免费在线观看视频a| 亚洲国产中文在线| 欧美成人激情视频免费观看| 一级淫片免费看| 国产嫩草影院久久久久| 欧美三级午夜理伦三级| 色爱综合av| 97精品在线视频| 日本免费一区视频| 亚洲电影一级黄| 人妻体内射精一区二区三区| 欧美三级特黄| 国产传媒一区二区三区| 18在线观看的| 精品国精品自拍自在线| 久久亚洲成人av| 成人夜色视频网站在线观看| 久久久久久www| 国产精品17p| 97超级碰碰碰久久久| 天堂av中文在线资源库| 欧美性jizz18性欧美| 精品黑人一区二区三区观看时间| 国产欧美日韩一级| 欧美一区二区三区四区五区六区| 在线观看欧美日韩电影| 精品亚洲国产成av人片传媒| 好吊操这里只有精品| 91日韩精品一区| 男女无套免费视频网站动漫| 久久在线电影| 97在线电影| 激情黄产视频在线免费观看| 亚洲男人天堂2024| 欧美另类高清videos的特点| 国产精品久久久久久久第一福利| 色哟哟免费视频| 亚洲精品黄色| 日本黄网免费一区二区精品| 国产精品成人国产| 日韩中文在线中文网三级| 国产口爆吞精一区二区| 亚洲一区二区三区三| 三级男人添奶爽爽爽视频| 久久精品系列| 中文字幕一区二区三区四区五区| 免费观看性欧美大片无片| 91av在线看| 幼a在线观看| 欧美videos大乳护士334| 日本中文在线播放| 中文文精品字幕一区二区| 精品999在线| 国产精品大片| 日韩高清专区| 国产精品高清一区二区| 91av在线精品| 国产写真视频在线观看| 亚洲精品成人免费| 亚洲在线视频播放| 亚洲成av人片| 国产日产精品一区二区三区的介绍| 成人黄色在线网站| 日本肉体xxxx裸体xxx免费| 国产综合久久| 亚洲欧美电影在线观看| 亚洲一区二区三区四区电影| 国产成人高潮免费观看精品| 亚洲小说区图片区都市| 亚洲欧美日韩精品| 亚洲女人18毛片水真多| 欧美影院一区二区| 日韩污视频在线观看| 亚洲欧美一区二区三区国产精品| 瑟瑟视频在线观看| 成人综合在线观看| www.久久av.com| 男女精品网站| aa视频在线播放| 国产精品久久久久久麻豆一区软件 | 大荫蒂性生交片| 久久国产精品成人免费观看的软件| 国产一区二区免费在线观看| 国产日韩欧美中文在线| 国产精品露脸av在线| 三级在线观看视频| 久久久久久久久91| 国产不卡在线| 日韩在线视频观看正片免费网站| 精品av中文字幕在线毛片| 亚洲国产欧美久久| 亚洲精选一区二区三区| 成人高清av| 欧美亚洲另类制服自拍| 黄视频在线免费看| 欧美精品在线视频观看| 欧美日韩欧美| 日韩在线国产精品| 91网页在线观看| 亚洲最新av网址| 麻豆影视在线| 亚洲免费成人av电影| 五月婷婷久久久| 亚洲国产成人久久| 全部免费毛片在线播放一个| 精品久久久久久久久久久久包黑料 | 永久免费无码av网站在线观看| 亚洲国产精品欧美一二99| 国产小视频在线看| 一区二区三区不卡在线观看 | 日本在线观看视频| 中文字幕久久久av一区| av在线资源站| 日韩少妇与小伙激情| 麻豆tv在线| 大量国产精品视频| 亚洲性图自拍| 国内偷自视频区视频综合| 中文在线免费| 欧美精品video| 多野结衣av一区| 日本不卡视频在线播放| 激情亚洲影院在线观看| 国产精品老女人精品视频| 欧美系列精品| 99视频在线| 天堂在线精品| 亚洲黄色一区二区三区| 久久久久久久久久久妇女| 亚洲天堂第一区| av成人黄色| 爱情岛论坛成人| 国产在线精品一区在线观看麻豆| 亚洲av无码久久精品色欲| 成人av在线资源| 国产真人做爰视频免费| 中文字幕在线观看一区二区| 一区二区在线观看免费视频| 亚洲mv在线观看| 亚洲第一区av| 欧美一级精品在线| 天天摸天天干天天操| 一本一本久久a久久精品牛牛影视| 色综合久久久久综合一本到桃花网| 久久国产精品免费视频| 欧美裸体视频| 成人av在线亚洲| 国产精品久久久久久久久久久久久久久久久| 蓝色福利精品导航| 亚洲国产午夜精品| av不卡一区二区三区| 鲁丝一区二区三区| 依依成人综合视频| 一级黄色大片视频| 91精品国产免费久久综合| 五月婷婷六月丁香| 久久精品国产一区| 日韩av一卡| 亚洲伊人久久大香线蕉av| 午夜精品影视国产一区在线麻豆| 亚州欧美一区三区三区在线| 欧美午夜在线视频| www.超碰com| 成人免费视频播放| 任我爽在线视频| 精品久久久久久久久久| 国产精品日韩无码| 亚洲偷熟乱区亚洲香蕉av| 国产第一页在线视频| 国产精品美女www爽爽爽视频| 国产精品一线| 日本女人高潮视频| 日韩福利电影在线观看| 国产人妻黑人一区二区三区| 亚洲欧美自拍偷拍色图| 中文字幕一区在线播放| 亚洲成人激情在线观看| 人人干在线视频| 国产成人精品综合久久久| 白白在线精品| 最近中文字幕免费mv| 日韩精品亚洲一区| 99re久久精品国产| 亚洲综合丝袜美腿| 国产口爆吞精一区二区| 在线免费观看羞羞视频一区二区| caoporn视频在线观看| 亚洲最大的网站| 婷婷综合亚洲| 一本色道久久亚洲综合精品蜜桃| 久久亚洲精品国产精品紫薇| 久久久久久久久久久久久久av| 日韩欧美不卡在线观看视频| 精精国产xxxx视频在线| 国产精品热视频| 欧美日韩在线观看视频小说| 国产成人久久婷婷精品流白浆| av一区二区三区| 国产一级大片在线观看| 日韩欧美黄色影院| 主播国产精品| 亚洲一区二区三区四区视频 | 91九色丨porny丨国产jk| 国产盗摄一区二区三区| www深夜成人a√在线| 欧美精品一二三| 五月婷婷在线观看| 国产日韩专区在线| 97久久视频| 亚洲精品在线网址| 亚洲视频在线观看三级| 国产精品国产av| 另类美女黄大片| 欧美9999| 黄色一级片在线看| 日本天堂在线| 久久精品视频在线播放| 国产精品成人3p一区二区三区| 国产成人精品免费看在线播放| 韩国av一区二区三区| 欧美三级日本三级| 欧美xxx久久| 亚洲性色av| 色噜噜狠狠色综合网| 久久国产精品72免费观看| 国产老头老太做爰视频| 欧美一区二区美女| 丁香花在线影院| 久久久久久久久久久一区| 久久久久久网| 网站永久看片免费| 日韩欧美国产综合| 天堂在线中文网官网| 日韩精品第一页| 国产在线一区观看| 精品97人妻无码中文永久在线| 亚洲经典中文字幕| 欧美日韩电影免费看| 亚洲国产精品www| 国产一区二区三区四区在线观看| 久久免费视频播放| 亚洲精品永久免费| 亚洲一区导航| 国产日韩欧美精品在线观看| 久久久久久久电影| 国产露脸91国语对白| 97精品国产97久久久久久免费 | 亚洲欧美日韩国产精品| 日韩午夜电影免费看| 日本手机在线视频| 日本一区二区三区四区在线视频| 99久久久久久久| 57pao精品| 亚洲澳门在线| 91视频免费观看网站| 日韩一级黄色大片| 东京一区二区| 欧美xxxx吸乳| 2020国产成人综合网| 99久久精品国产一区色| 国产91精品在线播放| 欧美色123| 我想看黄色大片| 亚洲国产精品福利| 欧美aaa级| 免费无码国产v片在线观看| 亚洲三级免费观看|