99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

OpenCV模板匹配實(shí)戰(zhàn):信用卡卡號(hào)識(shí)別全流程詳解

OpenCV模板匹配實(shí)戰(zhàn):信用卡卡號(hào)識(shí)別全流程詳解 在我接觸OpenCV的頭半年里做得最多的項(xiàng)目就是各種“數(shù)字識(shí)別”儀表盤讀數(shù)、快遞單號(hào)、批量文件編號(hào)、貨架標(biāo)簽最后才輪到信用卡卡號(hào)。實(shí)話實(shí)說用模板匹配Template Matching這套路去識(shí)別信用卡卡號(hào)可以說是OpenCV入門階段最適合練手的實(shí)戰(zhàn)項(xiàng)目之一——它不光能讓你把圖像預(yù)處理、輪廓查找、匹配算法這些零散知識(shí)點(diǎn)串成一條完整的流水線而且工程落地時(shí)遇到的各種奇葩問題足夠你攢下半年的踩坑經(jīng)驗(yàn)。這個(gè)項(xiàng)目解決的并不是什么高深的學(xué)術(shù)問題它的核心邏輯非常簡(jiǎn)單準(zhǔn)備一套0到9的數(shù)字模板圖然后從信用卡照片里圈出卡號(hào)區(qū)域的每個(gè)數(shù)字逐一和模板做“長(zhǎng)得像不像”的比對(duì)像誰(shuí)就認(rèn)成誰(shuí)。這里用到的模板匹配cv2.matchTemplate是OpenCV里一個(gè)很基礎(chǔ)但極其好用的工具它對(duì)光線、角度變化不敏感的場(chǎng)景非常省事不需要訓(xùn)練數(shù)據(jù)集也不需要GPU只要模板做得干凈識(shí)別率能做到很高。這篇文章適合兩類人一類是剛?cè)腴TOpenCV、想找個(gè)完整項(xiàng)目練手的新手另一類是想把模板匹配用在實(shí)際業(yè)務(wù)場(chǎng)景比如識(shí)別會(huì)員卡號(hào)、訂單號(hào)、證件編號(hào)但不確定怎么落地的開發(fā)者。我會(huì)把整個(gè)流程從環(huán)境搭建、圖片處理、輪廓定位到模板匹配和最終識(shí)別結(jié)果一條線講清楚包括參數(shù)怎么調(diào)、遇到報(bào)錯(cuò)怎么處理、輪廓排序有哪些深坑全部按我的實(shí)際經(jīng)驗(yàn)來寫。你可以直接照著抄改改路徑就能跑。1. 項(xiàng)目整體設(shè)計(jì)與思路拆解1.1 為什么選模板匹配而不直接上深度學(xué)習(xí)很多人一聽到“OCR識(shí)別”就覺得得用深度學(xué)習(xí)什么CRNN、CRAFT、PaddleOCR輪番上陣。但實(shí)際在做工程選型時(shí)我最常說的一句話是如果一把螺絲刀能解決的問題別先扛著電鉆上場(chǎng)。信用卡卡號(hào)識(shí)別這個(gè)場(chǎng)景有一個(gè)非常特殊的前提字體是高度統(tǒng)一的。銀行卡號(hào)大多是凸印或印刷字體每家銀行雖然有不同的設(shè)計(jì)但卡號(hào)數(shù)字的字體形態(tài)相對(duì)固定。更重要的是模板匹配在OpenCV里有現(xiàn)成的函數(shù)cv2.matchTemplate不需要標(biāo)注數(shù)據(jù)、不需要訓(xùn)練幾十行代碼就能把識(shí)別結(jié)果跑出來。相比之下深度學(xué)習(xí)方案要準(zhǔn)備訓(xùn)練集、搭建模型、調(diào)參整個(gè)工程鏈路重了不止一個(gè)量級(jí)。模板匹配的局限也很明顯它對(duì)旋轉(zhuǎn)、尺度變化、光照變化比較敏感。但信用卡照片的拍攝環(huán)境通??煽刂灰陬A(yù)處理階段把圖像擺正、統(tǒng)一尺寸模板匹配完全能勝任。所以我個(gè)人的選型原則是先評(píng)估任務(wù)約束如果字體固定、背景可控模板匹配永遠(yuǎn)是最快的方案。反過來如果場(chǎng)景里字體花哨、角度多變那就別硬撐老老實(shí)實(shí)上深度學(xué)習(xí)。1.2 完整識(shí)別流程從圖片到一串?dāng)?shù)字整個(gè)識(shí)別的流程可以拆成五個(gè)環(huán)節(jié)每個(gè)環(huán)節(jié)缺一不可模板圖處理準(zhǔn)備一張包含0到9十個(gè)數(shù)字的模板圖切割成10個(gè)小圖每個(gè)數(shù)字存成獨(dú)立文件或記錄下坐標(biāo)。信用卡圖像預(yù)處理讀入信用卡照片轉(zhuǎn)灰度、降噪、檢測(cè)邊緣找到圖像里的卡片區(qū)域。卡號(hào)區(qū)域定位在卡片區(qū)域內(nèi)根據(jù)輪廓的幾何特征長(zhǎng)寬比、面積把卡號(hào)區(qū)域的四組數(shù)字框出來。數(shù)字分割把每一組數(shù)字再裁剪成單個(gè)數(shù)字的小圖統(tǒng)一縮放到與模板一致的尺寸這一步很關(guān)鍵。匹配識(shí)別對(duì)每個(gè)單數(shù)字小圖和10個(gè)模板逐一做匹配取匹配分?jǐn)?shù)最高的模板作為識(shí)別結(jié)果最后拼接成完整的卡號(hào)字符串。這個(gè)流程看起來平淡無(wú)奇但每個(gè)環(huán)節(jié)里都有不少細(xì)節(jié)。比如第二步如果照片里卡片是傾斜的你可能要先做透視變換把卡片“擺正”否則第四步的縮放和匹配會(huì)亂套。再比如第五步匹配算法有TM_CCOEFF_NORMED、TM_CCORR_NORMED、TM_SQDIFF_NORMED三種常見模式選哪個(gè)、閾值設(shè)多少都是有講究的。2. 環(huán)境搭建與圖像預(yù)處理基礎(chǔ)2.1 Python與OpenCV環(huán)境安裝實(shí)操在開始寫代碼之前先把環(huán)境搞定。很多新手卡在第一步就崩潰了pip install opencv-python裝完一import cv2就報(bào)錯(cuò)ModulenotfoundError或者DLL加載失敗。這里說下我實(shí)測(cè)下來的安裝方案。我建議直接用Python 3.8到3.11之間的版本太新的Python版本比如3.13剛發(fā)布時(shí)容易出現(xiàn)opencv-python輪子還沒跟上導(dǎo)致裝不上的問題。安裝命令很簡(jiǎn)單pip install opencv-python pip install numpy如果需要用到cv2.imshow這種圖形界面顯示功能在Windows上沒問題但如果你用的是無(wú)桌面環(huán)境的Linux服務(wù)器要額外裝opencv-python-headless而不是opencv-python否則會(huì)報(bào)找不到顯示設(shè)備的錯(cuò)。如果你用Anaconda也可以這條路conda install -c conda-forge opencv裝完之后驗(yàn)證一下python -c import cv2; print(cv2.__version__)能正常輸出版本號(hào)說明OpenCV裝好了。另外強(qiáng)烈建議用虛擬環(huán)境不管是conda創(chuàng)建還是python -m venv都比你把所有包堆在全局環(huán)境里省心得多。2.2 PyCharm/VSCode中跑OpenCV項(xiàng)目的配置要點(diǎn)編輯器這塊我日常主力是PyCharm但VSCode我也經(jīng)常用。兩個(gè)環(huán)境都不復(fù)雜但有三個(gè)通病需要提前避開。第一個(gè)通病是解釋器選錯(cuò)。PyCharm里打開項(xiàng)目后右下角或Settings里一定要確認(rèn)Project Interpreter選的是你裝好OpenCV的那個(gè)虛擬環(huán)境而不是系統(tǒng)默認(rèn)的Python。選錯(cuò)的結(jié)果就是你在終端里import cv2沒問題但PyCharm里一運(yùn)行就紅色波浪線加ModuleNotFoundError。VSCode里則要留意左下角的Python解釋器狀態(tài)點(diǎn)擊后手動(dòng)選擇虛擬環(huán)境路徑。第二個(gè)通病是中文字體亂碼。OpenCV的cv2.putText默認(rèn)不支持中文往圖上寫漢字會(huì)顯示成????。這個(gè)項(xiàng)目里識(shí)別的都是數(shù)字所以沒這個(gè)問題但你以后做別的項(xiàng)目要提前知道。第三個(gè)通病是圖像路徑別帶中文。cv2.imread在Windows上對(duì)中文路徑支持不好經(jīng)常讀不進(jìn)圖片返回None半天查不出原因。項(xiàng)目路徑、圖片路徑、模板路徑全部用英文命名。3. 核心實(shí)現(xiàn)信用卡卡號(hào)識(shí)別完整代碼拆解3.1 第一步提取數(shù)字模板模板匹配的前提是有一套規(guī)范的數(shù)字模板。網(wǎng)上能找到不少信用卡模板圖通常是一張包含0到9十個(gè)數(shù)字的長(zhǎng)條圖。拿到后要做的事是把每個(gè)數(shù)字單獨(dú)切出來。這里有個(gè)技巧不要手動(dòng)一個(gè)個(gè)數(shù)字截圖用輪廓查找自動(dòng)切開。模板圖一般是黑色背景上的白色數(shù)字或者反過來處理起來很直接。import cv2 import numpy as np # 讀入模板圖轉(zhuǎn)灰度再轉(zhuǎn)二值圖像 template_img cv2.imread(template/credit_card_template.png) template_gray cv2.cvtColor(template_img, cv2.COLOR_BGR2GRAY) # 注意這里用二值化把數(shù)字變成白色前景背景為黑色 ret, template_bin cv2.threshold(template_gray, 127, 255, cv2.THRESH_BINARY_INV) # 查找數(shù)字輪廓 cnts, hierarchy cv2.findContours(template_bin.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 可視化看一下提取出的輪廓 cv2.drawContours(template_img, cnts, -1, (0, 0, 255), 2) cv2.imshow(Template Contours, template_img) cv2.waitKey(0)輪廓檢測(cè)里有個(gè)大坑OpenCV的findContours返回值的寫法在版本間有變化。早期的OpenCV 3.x返回三個(gè)值image, contours, hierarchy從OpenCV 4.x開始只返回兩個(gè)值。如果你用的是4.x代碼寫成_, cnts, hierarchy cv2.findContours(...)會(huì)直接報(bào)錯(cuò)。統(tǒng)一用下面這種寫法最保險(xiǎn)cnts, hierarchy cv2.findContours(template_bin.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)3.2. 模板輪廓排序與切割拿到輪廓之后輪廓的排列順序是不固定的需要按x坐標(biāo)從左到右排序否則模板數(shù)字的順序就亂了。排序之后每個(gè)輪廓的最小外接矩形就是數(shù)字的邊界框。# 輪廓排序從左到右 cnts sorted(cnts, keylambda c: cv2.boundingRect(c)[0]) digits {} # 用字典存模板數(shù)字 for i, c in enumerate(cnts): (x, y, w, h) cv2.boundingRect(c) # 過濾掉明顯的噪聲輪廓 if w 10 or h 10: continue roi template_bin[y:yh, x:xw] roi cv2.resize(roi, (57, 88)) # 統(tǒng)一尺寸后面匹配用 digits[i] roi cv2.rectangle(template_img, (x, y), (xw, yh), (0, 255, 0), 2)這里幾個(gè)參數(shù)值得說明。尺寸(57,88)是我測(cè)過的一組比較穩(wěn)的模板尺寸其實(shí)無(wú)所謂精確值但必須保證后續(xù)待識(shí)別的數(shù)字小圖都縮放到完全一樣的尺寸。resize的時(shí)候特別注意模板數(shù)字和待識(shí)別數(shù)字的粗細(xì)、筆畫寬度要接近否則匹配率會(huì)掉很多。3.3 信用卡圖像預(yù)處理灰度、邊緣檢測(cè)與卡片區(qū)域提取處理完模板接下來處理信用卡照片。理想情況是一張放在純色背景上的卡片但現(xiàn)實(shí)往往是有桌面紋路、光影過渡、甚至手指遮擋。預(yù)處理的目的就是盡可能把這些問題干掉。# 讀入信用卡圖片 card_img cv2.imread(images/credit_card_sample.png) card_gray cv2.cvtColor(card_img, cv2.COLOR_BGR2GRAY) # 降噪高斯模糊 card_gray cv2.GaussianBlur(card_gray, (5, 5), 0) # 邊緣檢測(cè) edged cv2.Canny(card_gray, 75, 200) # 查找輪廓 cnts_card, _ cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnts_card sorted(cnts_card, keycv2.contourArea, reverseTrue)[:5]為什么先Canny再findContours因?yàn)橹苯訉?duì)灰度圖找輪廓會(huì)找到一堆紋理噪聲而Canny算子會(huì)把圖像的邊緣“骨架”提取出來再找輪廓時(shí)就能框出卡片區(qū)域。Canny的兩個(gè)閾值參數(shù)75和200是我在大多數(shù)銀行卡照片上測(cè)試后的經(jīng)驗(yàn)值值設(shè)得太低會(huì)框出太多無(wú)關(guān)邊緣設(shè)得太高卡片邊緣可能斷裂。找到輪廓之后遍歷每個(gè)輪廓用cv2.approxPolyDP做多邊形逼近找出有四個(gè)頂點(diǎn)的輪廓——因?yàn)樾庞每ㄊ蔷匦?。for c in cnts_card: peri cv2.arcLength(c, True) approx cv2.approxPolyDP(c, 0.02 * peri, True) if len(approx) 4: card_contour approx break拿到卡片輪廓后如果照片里卡片是歪的用cv2.getPerspectiveTransform做透視變換把卡片拉正。這個(gè)過程俗稱“擺正圖片”做完之后卡號(hào)區(qū)域會(huì)是水平的后續(xù)切割數(shù)字會(huì)輕松很多。透視變換的代碼之前專門寫過一篇這里直接給最小可用版def order_points(pts): # 按照左上、右上、右下、左下排列四個(gè)點(diǎn) rect np.zeros((4, 2), dtypefloat32) s pts.sum(axis1) rect[0] pts[np.argmin(s)] rect[2] pts[np.argmax(s)] diff np.diff(pts, axis1) rect[1] pts[np.argmin(diff)] rect[3] pts[np.argmax(diff)] return rect rect order_points(card_contour.reshape(4, 2)) (tl, tr, br, bl) rect widthA np.linalg.norm(br - bl) widthB np.linalg.norm(tr - tl) maxWidth max(int(widthA), int(widthB)) heightA np.linalg.norm(tr - br) heightB np.linalg.norm(tl - bl) maxHeight max(int(heightA), int(heightB)) dst np.array([[0, 0], [maxWidth - 1, 0], [maxWidth - 1, maxHeight - 1], [0, maxHeight - 1]], dtypefloat32) M cv2.getPerspectiveTransform(rect, dst) warped cv2.warpPerspective(card_gray, M, (maxWidth, maxHeight))3.4 卡號(hào)輪廓定位形態(tài)學(xué)處理與分組卡片擺正后接下來要找到卡號(hào)區(qū)域。這里用兩種方式結(jié)合先做大津二值化再用形態(tài)學(xué)操作把相鄰數(shù)字連成一組最后按輪廓篩選??ㄌ?hào)區(qū)域在大部分信用卡上是“深色背景淺色文字”或“銀白色凸字”光照不同表現(xiàn)差很多。所以我建議先做一步cv2.threshold(card_gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)讓OpenCV自動(dòng)算閾值。然后用一個(gè)較大尺寸的內(nèi)核做閉運(yùn)算把同一組的4個(gè)數(shù)字連通成一個(gè)或者兩個(gè)大輪廓。_, thresh cv2.threshold(warped, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) # 閉運(yùn)算先膨脹后腐蝕把相鄰數(shù)字連成組 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (10, 5)) closed cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) cnts_group, _ cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)這里的內(nèi)核尺寸(10,5)很關(guān)鍵。信用卡卡號(hào)通常是4個(gè)數(shù)字一組數(shù)字之間間距較小而組與組之間間距較大。把橫向內(nèi)核寬度設(shè)為10剛好能把一組數(shù)字粘在一起但不會(huì)把兩組粘起來。這個(gè)值需要根據(jù)你實(shí)際圖片的卡號(hào)間隔微調(diào)遇到間隔特別大的卡號(hào)調(diào)成(20,5)或者用兩輪閉運(yùn)算。3.5 對(duì)每組卡號(hào)做數(shù)字切分拿到分組輪廓后按x坐標(biāo)排序?qū)γ總€(gè)組做同樣的事情二值化、找輪廓、按x排序、切分、逐個(gè)縮放。# 存儲(chǔ)最終識(shí)別結(jié)果 card_number for group in sorted(cnts_group, keylambda c: cv2.boundingRect(c)[0]): (gx, gy, gw, gh) cv2.boundingRect(group) group_roi thresh[gy:gygh, gx:gxgw] # 對(duì)組內(nèi)數(shù)字查找輪廓 digit_cnts, _ cv2.findContours(group_roi.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) digit_cnts sorted(digit_cnts, keylambda c: cv2.boundingRect(c)[0]) for dc in digit_cnts: (dx, dy, dw, dh) cv2.boundingRect(dc) # 過濾噪點(diǎn)輪廓 if dw 5 or dh 5: continue digit_roi group_roi[dy:dydh, dx:dxdw] digit_roi cv2.resize(digit_roi, (57, 88)) # 與所有模板做匹配 scores [] for digit, template_roi in digits.items(): result cv2.matchTemplate(digit_roi, template_roi, cv2.TM_CCOEFF_NORMED) _, max_val, _, _ cv2.minMaxLoc(result) scores.append(max_val) # 取匹配度最高的數(shù)字 best_digit np.argmax(scores) conf scores[best_digit] card_number str(best_digit) print(識(shí)別結(jié)果, card_number)這段代碼是整個(gè)項(xiàng)目的核心里面有幾個(gè)點(diǎn)要重點(diǎn)講。第一個(gè)是cv2.matchTemplate的返回值。它返回的是一張“相似度圖”每個(gè)位置的值代表模板在圖像該位置匹配的程度。用cv2.minMaxLoc可以拿到最大最小值及其位置。因?yàn)閿?shù)字小圖已經(jīng)和模板resize成一樣大小所以這張相似度圖實(shí)際上就一個(gè)點(diǎn)或者幾十個(gè)像素取最大值就是匹配度。這種方法雖然簡(jiǎn)單但在固定字體場(chǎng)景下效果出奇地穩(wěn)。第二個(gè)是匹配方法的選擇。我用的是cv2.TM_CCOEFF_NORMED也就是歸一化相關(guān)系數(shù)取值范圍是-1到1越接近1越相似。它對(duì)光照變化有一定的抵抗能力是模板匹配里最推薦的方法。TM_SQDIFF_NORMED是歸一化平方差值是越小越相似如果你用這個(gè)方法取分邏輯要反過來找最小值。TM_CCORR_NORMED是歸一化互相關(guān)對(duì)亮度變化很敏感實(shí)際工程里我很少用。第三個(gè)是對(duì)匹配結(jié)果的置信度判斷。實(shí)戰(zhàn)中不能只看最高分還要看這個(gè)最高分夠不夠高。比如最高分只有0.4說明這個(gè)數(shù)字和任何模板都不像大概率是分割出問題了。實(shí)際使用中我一般設(shè)置一個(gè)閾值0.6低于這個(gè)分?jǐn)?shù)就把結(jié)果標(biāo)成?提醒人工復(fù)查。3.6 完整代碼整合把項(xiàng)目跑起來為了保證你能直接復(fù)現(xiàn)我把完整流程整理成了函數(shù)式代碼你把模板圖和信用卡圖換成自己手頭的圖片即可運(yùn)行。import cv2 import numpy as np def load_template(template_path): 加載模板圖切分出0-9數(shù)字返回字典{數(shù)字: 模板ROI} template_img cv2.imread(template_path) template_gray cv2.cvtColor(template_img, cv2.COLOR_BGR2GRAY) _, template_bin cv2.threshold(template_gray, 127, 255, cv2.THRESH_BINARY_INV) cnts, _ cv2.findContours(template_bin.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts sorted(cnts, keylambda c: cv2.boundingRect(c)[0]) digits {} for i, c in enumerate(cnts): (x, y, w, h) cv2.boundingRect(c) if w 10 or h 10: continue roi template_bin[y:yh, x:xw] roi cv2.resize(roi, (57, 88)) digits[i] roi return digits def recognize_card_number(card_path, digits): 識(shí)別信用卡卡號(hào)返回識(shí)別出的數(shù)字字符串 card_img cv2.imread(card_path) card_gray cv2.cvtColor(card_img, cv2.COLOR_BGR2GRAY) card_gray cv2.GaussianBlur(card_gray, (5, 5), 0) edged cv2.Canny(card_gray, 75, 200) cnts_card, _ cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnts_card sorted(cnts_card, keycv2.contourArea, reverseTrue)[:5] card_contour None for c in cnts_card: peri cv2.arcLength(c, True) approx cv2.approxPolyDP(c, 0.02 * peri, True) if len(approx) 4: card_contour approx break if card_contour is None: print(未找到卡片輪廓) return # 透視變換擺正 rect order_points(card_contour.reshape(4, 2)) (tl, tr, br, bl) rect widthA np.linalg.norm(br - bl) widthB np.linalg.norm(tr - tl) maxWidth max(int(widthA), int(widthB)) heightA np.linalg.norm(tr - br) heightB np.linalg.norm(tl - bl) maxHeight max(int(heightA), int(heightB)) dst np.array([[0, 0], [maxWidth - 1, 0], [maxWidth - 1, maxHeight - 1], [0, maxHeight - 1]], dtypefloat32) M cv2.getPerspectiveTransform(rect, dst) warped cv2.warpPerspective(card_gray, M, (maxWidth, maxHeight)) # 二值化 閉運(yùn)算 _, thresh cv2.threshold(warped, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) kernel cv2.getStructuringElement(cv2.MORPH_RECT, (10, 5)) closed cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) cnts_group, _ cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 篩選可能是卡號(hào)組的輪廓 group_boxes [] for c in cnts_group: (x, y, w, h) cv2.boundingRect(c) if w 40 and 15 h 40: group_boxes.append((x, y, w, h)) group_boxes.sort(keylambda b: b[0]) card_number for (gx, gy, gw, gh) in group_boxes: group_roi thresh[gy:gygh, gx:gxgw] digit_cnts, _ cv2.findContours(group_roi.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) digit_cnts sorted(digit_cnts, keylambda c: cv2.boundingRect(c)[0]) for dc in digit_cnts: (dx, dy, dw, dh) cv2.boundingRect(dc) if dw 5 or dh 5: continue digit_roi group_roi[dy:dydh, dx:dxdw] digit_roi cv2.resize(digit_roi, (57, 88)) scores [] for digit, template_roi in digits.items(): result cv2.matchTemplate(digit_roi, template_roi, cv2.TM_CCOEFF_NORMED) _, max_val, _, _ cv2.minMaxLoc(result) scores.append(max_val) best_digit np.argmax(scores) card_number str(best_digit) return card_number if __name__ __main__: digits_template load_template(template/credit_card_template.png) result recognize_card_number(images/card1.png, digits_template) print(識(shí)別結(jié)果, result)4. 常見問題與排查技巧實(shí)錄4.1 模板匹配不準(zhǔn)問題多半出在預(yù)處理很多人在這個(gè)項(xiàng)目里遇到的第一大坑是匹配老是認(rèn)錯(cuò)數(shù)字比如把3認(rèn)成8、把0認(rèn)成6。這時(shí)候別急著調(diào)匹配算法的參數(shù)先檢查兩個(gè)地方。第一檢查二值化方向。如果你的模板是白底黑字而信用卡卡號(hào)在二值化后是黑底白字或者反過來那匹配率直接崩盤。這種問題用cv2.bitwise_not把圖像顏色反轉(zhuǎn)一下就能解決。我習(xí)慣統(tǒng)一使用“黑底白字”也就是數(shù)字對(duì)應(yīng)灰度值255背景為0。第二檢查resize后的比例。模板里的數(shù)字和待識(shí)別數(shù)字的寬高比要接近否則縮放到同一尺寸后數(shù)字會(huì)被拉伸變形。比如模板數(shù)字偏“瘦長(zhǎng)”而你切出來的數(shù)字偏“矮胖”直接resize到一樣大就會(huì)變形。解決辦法是在切分模板的時(shí)候就歸一化寬高比把模板轉(zhuǎn)正后再統(tǒng)一寬高。4.2 輪廓排序不對(duì)導(dǎo)致卡號(hào)錯(cuò)亂這是排序穩(wěn)定性問題。sorted(cnts, keylambda c: cv2.boundingRect(c)[0])這個(gè)寫法是按x坐標(biāo)排序正常情況下沒問題但如果卡片沒完全擺正組內(nèi)四個(gè)數(shù)字的x坐標(biāo)可能不在同一水平線上導(dǎo)致某些數(shù)字的boundingRect起點(diǎn)比前面數(shù)字更靠左。我的經(jīng)驗(yàn)是先用x坐標(biāo)排序再檢查每組數(shù)字?jǐn)?shù)量。如果發(fā)現(xiàn)某一組數(shù)字?jǐn)?shù)量不是4或預(yù)期值多半是排序或者分割出了問題。此時(shí)可以把每個(gè)數(shù)字的輪廓畫出來保存成調(diào)試圖一眼就能看出問題在哪。別忘了信用卡卡號(hào)一般是4組每組4個(gè)數(shù)字也就是總共16個(gè)數(shù)字。如果你的結(jié)果不是16個(gè)肯定在分組或切分環(huán)節(jié)出了錯(cuò)。4.3 光線反光導(dǎo)致識(shí)別失敗的處理信用卡表面通常有塑料反光拍出來的照片在卡號(hào)區(qū)域容易有大片白色反光。反光在灰度圖里表現(xiàn)是局部亮度過高邊緣會(huì)淡掉甚至消失。處理方法有兩個(gè)第一種在預(yù)處理時(shí)試用自適應(yīng)閾值cv2.adaptiveThreshold替代全局閾值。自適應(yīng)閾值會(huì)根據(jù)每個(gè)像素鄰域的亮度動(dòng)態(tài)計(jì)算閾值對(duì)光照不均的圖特別有效代價(jià)是會(huì)多一些噪聲需要配合中值濾波去噪。第二種在采集端就控制好環(huán)境。如果是做批量識(shí)別的設(shè)備盡量用均勻的光源避免點(diǎn)光源直射卡片。這是我做過幾個(gè)落地項(xiàng)目后最深的體會(huì)很多識(shí)別問題不是因?yàn)樗惴ㄈ醵且驗(yàn)閳D像質(zhì)量太差。把光源調(diào)好識(shí)別率能直接提升20個(gè)百分點(diǎn)。4.4 OpenCV版本差異與常見報(bào)錯(cuò)匯總這里把我在這個(gè)項(xiàng)目里踩過的環(huán)境問題整理成一個(gè)速查表。報(bào)錯(cuò)信息原因分析解決方案ModuleNotFoundError: No module named cv2OpenCV未安裝或解釋器選錯(cuò)在正確的虛擬環(huán)境執(zhí)行pip install opencv-pythonerror: (-215:Assertion failed) !ssize.empty() in function resizecv2.imread沒讀到圖片后面resize到空?qǐng)D檢查圖片路徑、路徑是否含中文findContours() takes 2 positional arguments but 3 were given用了OpenCV 3.x的老式三返回值寫法改為cnts, _ cv2.findContours(...)unable to open X serverLinux無(wú)圖形界面下用了imshow安裝opencv-python-headless或改用import cv2 HEADLESS模式TypeError: object of type NoneType has no len()上一步處理的圖全是None定位到是imread讀不到圖還是threshold結(jié)果為空4.5 提高識(shí)別率的小技巧項(xiàng)目穩(wěn)定跑通之后可以再往上提升識(shí)別精度我這里有幾個(gè)經(jīng)過實(shí)測(cè)的小改動(dòng)。第一個(gè)是用多重匹配把TM_CCOEFF_NORMED和TM_SQDIFF_NORMED的結(jié)果綜合起來判斷。如果兩個(gè)方法給出的結(jié)果不一致說明這個(gè)數(shù)字本身就模糊需要更高置信度才可信。第二個(gè)是對(duì)最終識(shí)別結(jié)果做校驗(yàn)信用卡卡號(hào)有Luhn算法校驗(yàn)位16位卡號(hào)的最后一位是校驗(yàn)位可以根據(jù)前15位算出來。這個(gè)校驗(yàn)?zāi)軘r住絕大多數(shù)誤識(shí)別。第三個(gè)是模板不夠用就做數(shù)據(jù)增強(qiáng)對(duì)模板做不同尺度的縮放、加一點(diǎn)高斯噪聲、小角度旋轉(zhuǎn)能提高匹配的魯棒性。5. 項(xiàng)目應(yīng)用場(chǎng)景擴(kuò)展與后續(xù)優(yōu)化方向這個(gè)項(xiàng)目的價(jià)值遠(yuǎn)遠(yuǎn)不止于識(shí)別信用卡卡號(hào)。只要把模板圖換一下同樣的流程可以識(shí)別身份證號(hào)碼、條碼下方的數(shù)字、快遞單上的單號(hào)、實(shí)驗(yàn)室試管的編號(hào)、零件上的序列號(hào)。我之前就用這套代碼識(shí)別過上千張產(chǎn)品標(biāo)簽上的序列號(hào)準(zhǔn)確率能到98%以上處理一張圖不到300毫秒完全夠用。后續(xù)優(yōu)化方向有三個(gè)一是接一個(gè)自動(dòng)透視校正模塊讓卡片角度隨意也能識(shí)別二是把模板替換成自己的數(shù)據(jù)用聚類生成模板適配更多字體三是把圖像處理流程封裝成Docker鏡像或API服務(wù)接到生產(chǎn)環(huán)境里做批量識(shí)別。如果你想做實(shí)時(shí)識(shí)別還可以加上一個(gè)簡(jiǎn)單的視頻幀處理循環(huán)每幀調(diào)用一次識(shí)別函數(shù)就是一套卡號(hào)識(shí)別系統(tǒng)。最后分享一個(gè)我在實(shí)際使用中的體會(huì)模板匹配這種“古老”的技術(shù)在今天依然有它的生態(tài)位。深度學(xué)習(xí)在復(fù)雜場(chǎng)景里確實(shí)更強(qiáng)但模板匹配的優(yōu)勢(shì)是簡(jiǎn)單、干凈、可解釋、不依賴算力。當(dāng)你理解了這套邏輯再看深度學(xué)習(xí)方案里的空間變換網(wǎng)絡(luò)、注意力機(jī)制會(huì)發(fā)現(xiàn)它們本質(zhì)上也是在解決模板匹配的“不變性問題”。從模板匹配入門你會(huì)對(duì)圖像處理底層邏輯有個(gè)很扎實(shí)的理解這對(duì)后面學(xué)任何進(jìn)階方向都特別有幫助。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
三日本无码| 99视频啪啪| 婷婷五月大| 九九色综合| 九九这里只有精品在线视频| 中文字幕乱码亚洲精品一区| 26uuu亚洲欧美日本| 狠狠干最新地址| 五月丁香色婷婷综合| 婷婷综合中文字幕| 丁香五月婷婷啪啪| 少妇性按摩无码中文A片| 综合激情五月四射婷婷| 2025神马午夜福利| 午夜成人综合| 亚洲天天免费| 亚洲乱啪| 久久天天| 五月天,激情四射,婷婷频道| 欧美性猛交99久久久99| 久久五月婷| 日韩狠狠色婷婷| 办公室少妇激情呻吟A片在线观看| 婷婷 激情 五月| 国产成人AV不卡| 婷婷五月天欧美图片在线播放电驴| 国产女人十八水真多1| 激情丁香五月| 加勒比色色| 午夜成人天堂久久无码日韩久久| 丁香五月婷婷亚洲色图| 91日综合欧美| 丁香六月综合激情| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 97黑人精品区| 99精品国产在热久久| 99热的无码| 亚洲超级碰| 99性视频| 婷婷五月激情天| 五月99久久| 香蕉婷婷色五月| AV人人操| 爱射综合| 久久久人人操A V| 超碰二区| 五月婷婷 欧美| 亚洲综合网激情五月天| 99热99| 日韩成人无码人妻| 中文字幕色色| 开心六月丁香五月婷婷| 天天日日夜夜| 亚洲五月天,激情视频| 最近中文字幕2019视频1| 逼里香不卡| 久99视频在线观看| 五月丁香六月婷婷激情四射| 国产精品天天狠天天看| 99婷婷国产最新视频| 激情影院内射| 黑人无码一区| 91丨九色丨熟女| 综合在线网| 久草视频大香蕉99| 亚洲熟妇AV乱码在线观看| 激情开心五月天婷婷基地丁香社区| 欧美日本国产欧美日本韩国99| 最近中文字幕大全免费版在线| 五月激情综| 日日噜狠狠色综| 五月天婷婷激情网| 久久婷婷青青| 韩国真做片在线观看| 日本狠狠色| 色五月 激情婷婷 综合五月天| 999久久久国产精品| 激情五月丁香五月| 这里只有精品视频在线| 国产在线黄色| 久久九九精彩| 激情五月丁香五月色| 五月婷婷狠狠干| 最新热中文字幕| caop视频| 中文字幕成人| 久久XX| 五月婷婷 激情五月| 国产亚洲精品人人| 色婷婷综合视频| 情色五月天 网站| 丁香五月影院| 在线综合网| 婷婷五月天人妻| 国产无遮挡又黄又爽免费网站| 日韩高清成人| 亚洲五月天另类小说图片| 久色中文| 白天AV月月| 97欧美在线| 玖玖婷婷色五月| 特级片神马电影| 婷婷五月天av小说| 无遮羞AV| 超级碰碰碰97免费| 五月婷婷婷丁香播| 激情五月婷婷网| 欧美色六月婷婷| 婷婷九月激情| 91婷婷在线| 丁香五月天婷婷大香蕉| 综合久久综合五月天婷婷| 三男玩一女三A片| 丁香桃色网| 成人在线视频一区| 能看的AV网站| 五月丁香六月婷婷玖玖| 99热视精品| 五月情四婷婷| wwwxxx五月婷婷小说| 日韩 欧美 国产 一区 二区| caopeng超碰| 九九精品视频免费在线| 激情综合青草| 中文字幕丁香五月| 久久婷婷五月丁香| 播五月丁香六月| 六月丁香婷婷天堂| 五月婷综合网| 噜噜精品| 激情99| 亭亭玉月丁香| 香蕉综合在线| 九月丁香婷婷| 欧美午夜乱妇午夜福利| 20253AV| 婷婷五月激情欧美大胆视频| 久久九九亚洲| 中文字幕在线不卡| 婷婷丁香午夜综合影视| 婷婷激情五月综合丁| 99色1| 成人网站免费sxj| 99色视频| 91婷婷五月丁香碰| 色玖玖综合网| 一丁香五月天月AV| 大香蕉婷婷| 综合久久综合久久| 五月婷婷激情综合| 超碰99热精品在线| 色婷婷先锋| 9精品在线| 大香蕉五月天婷婷丁香91| 蜜桃婷婷狠狠久久| 操操操www.com| 激情涩涩网| 久热这里精品免费| 99热国产免费| 六月激情婷婷| 久99久视频精品| 天啪天啪天啪天啪| 色噜噜综合网| 日本色色视频| 综合婷婷| 这里只有精品96| 国产精品A片在线| 日韩成人综合| 色婷婷丁香网| 色狠狠色噜噜AV天堂五区消防| 五月天.com| 五月婷婷色影院| 五月婷婷啪啪| 97精品综合久久内射| 91婷婷搞| 99视频在线观看欧| 26UUU欧美激情一区二区| 九九九热精品| 婷婷天堂伊人| 91久久久久久| 丁香久久| 五月婷婷激情综合| 色玖玖综合| 色六月天天激情综合网| 九九热在线观看视频| 欧美激情综合| 久热在线观看视频9| 久久蜜臀婷婷| 4399在线观看免费高清毛片| 天天久久66xxx| 五六月丁香激情视频| 色五月丁香婷婷在线观看| 女婷久久| 九九色婷婷Av| 99丁香五月婷| 91丨九色丨熟女| 99re这里| 亚洲V国产V欧美V久久久久久| 亚洲啪| 亚洲中文字幕AV| 伊人超碰| 天天干 夜夜爽| 久久99大| 国产Va视频| 狠狠搞狠狠操| 国产成人综合电影| 狠狠狠婷婷五月综合| 激情欧美五月丁香| 热热色色五月天婷婷| 色碰碰| 狠狠狠五月婷婷六月丁香| 91碰在线| 婷婷久久18| 成人婷婷五月天| 久热免费视频| av人人操| 精品色色网| 婷婷综合激情| 97操操| 五月婷av| 玖玖色综合网| 日韩美一级毛卡片| 国产精品色一哟哟| 专区无日本视频高清8| www.99热国产| 六月撸婷婷| 操逼五月婷婷| 99碰网站| 日韩美一级毛卡片| 五月色婷婷AV| 国产欧美熟妇另类久久久| 99久久新视频| 天天综合在线网| 欧美丰满熟妇BBB久久久| 久9精品视频| 直接看的AV网站| 日日夜夜干| 婷婷五月丁香综合| 亚洲99综合| 综合 蜜月 婷婷| 五月婷婷 六月丁香| 欧美在线视频99| 婷婷欧美激情| 六月丁香网| 久久33视频| 99亚洲欧洲| 久久99网站| 九九99免费视频| 激情五月天小说网| 中文字幕成| 日韩三级高清无码| 国产精品色婷婷久久久精品| 天天操综合网| 久久婷网| 人妻综合网| 五月婷婷色啪| 五月婷婷天堂| 天堂A∨在线| 久婷婷婷| 久久99久久99久久99人受| 婷婷五月电影| 色五月天丁香| 丁香五月成人| 婷婷在线操| 亚洲五月天激情| 亚洲色色色色色色色色色| 91丨九色丨国产打屁股| 欧美婷婷六月丁香综合色| 人人澡玖玖一| 婷婷丁香人妻天久久| 丁香综合网| 欧洲亚洲免费视频9| 爆乳熟妇一区二区三区爆乳照片| 亚洲精品亚洲人成人网| 天天操夜夜操| 五月天激情网页| 爱穴久久| 99热97| 婷婷五月精品中文| 97干97色| 免費亭亭成人| 色五月噜噜| 天天插天天插天天插天天插| 一本久道综合99| 日韩成人无码人妻| 99热国产这里只有| 日本网站久久| 丁香五月91| 色婷婷色99国产综合精品| 丁香五月天啪啪| 5月婷婷综合| 蜜桃人妻无码AV天堂三区| 亚洲 在线 性爱| 久久久宗合视频88| 色七七九九| 91狠狠色| 超碰免费人| 五月天激情网开心网| 人操人| 欧美Va婷色| 色色免费网站| 国产伦亲子伦亲子视频观看| 俺去也综合| 五月婷婷啪啪啪| 婷婷俺去也| 深爱丁香激情| 1024操逼视频| 中文成人在线| 99re这里只有| 台湾综合丁香五月蜜桃| 久热在线观看视频9| 丁香久久五月婷综合| 丁香婷婷六月激情文学| 香蕉视频性爱BB做爱| 99精品色| 思思99精品视频在线观看| 激情 久久 婷婷| 99久视频| 色五月丁香激情| 激情文学 综合 九月| 99免费热在线精品| 丁香五月激情婷婷婷婷在线观看| 日本久久99| 五月天婷a在线| 五月婷婷综合网| 丁香亭亭久久| 色天堂操| 思思久久99热只有频精品66| 天天在线XXX| 操笔无码| 五月天伊人综合| 思思热在线| 五月天精品视频| 色五月天.con| 日韩无码系列| AA片在线观看视频在线播放| 丁香五月首页| 99色亚洲| 再綫Av免费視品| 九九99免费理论| 丁香五月婷婷激情123| 99视频在线观看网址| 婷婷激情五月| 亚洲视频操| 婷婷五月天激情视频| 久久精品63| 精品二区| 99久re热视频精品98| 五月天婷婷在线AN| 色综合性视频| 99在线精品视频观看免费下载| Av中文在线| www.婷婷五月天| 久久精品这里只有精品免费首页| 六月婷婷七月丁香| 亚洲色婷婷色| 日本91在线| 大香蕉伊然在亚洲90| 五月丁香影院| 五月丁香综合啪啪| 操九色| 五月情涩综合婷婷| 狠狠色丁香婷婷基地| 内射综合网| 丁香花综合永久入口| 91啪啪视频| 五月丁香色综合| 伊人久久丁香婷婷六月五月综合| 久鲁鲁色网| 538在线精品| 激情综合网五月| 91小黄书网址在线观看| www.夜夜夜| 婷婷永久在线| 五月丁香六月激情综合| 婷婷丁香社区| 天天日天天干天天爽| 国产精品人人妻人人爽| 激情五月天免费视频| site:xiongshengzz.com| 91久久电影| 亚洲国产成人AV在线 | 人人爱国产| 思思热在线观看| 激情婷婷五月天日本系列| 亚洲色婷婷99一9|| 色色婷五月天| 亚洲综合色丁香五月天| 丁香成人综合| 色五月婷婷在线视频| 色噜噜狠狠色综合AV兰草影视| 久久伦乱| 五月天婷婷香蕉狠狠超碰综合| 91九色无码内射| 婷婷激情五月天桃花网| 碰久久精品w| aaaa久久| 9999综合99综合人| 日本色色网站| 9色在线视频| 亚洲久久日| 久xxxx| 天堂色色色| 六月婷婷网| 中文字幕五月久久婷婷| 日本3级片一区2区| 婷婷五月天久久| 久久女人天堂| 思思久久网| 538午夜激情| 九月色婷婷| 激情宗合哪里能看| 日日干日日s| 色五月婷婷激情五月| 天色综合网站| 99热久久日本| 91精产一区三区免费观看| 九九人人看| 成人网站av免费网站推荐| 超级碰碰碰碰视频| 大香蕉五月天婷婷| 91色逼| 一起操 91N.com| 成人啪啪色婷婷久| 深爱激情中文五月天av| 婷婷5月开心6月| 久久九九99亚洲国产久精综合| 久久丁香五月婷婷| 啪啪婷婷五月天激情| 欧美日韩成人在线网站| AV中文在线| 开心婷婷五月激情网小说| 天天日狠狠| 丁香五月综合在线播放| 五月婷婷在线观看黄| 99热主页日本| 天天做天天爱| 亚洲a片免费观看| 九月色婷婷综合| 丁香色色色| 婷婷丁香色五月天久久88| 亚洲 在线 性爱 | 激情98色婷婷五| 狠狠色狠狠色综合日日91| 婷婷五月天AV在线| 天天爽—爽| 99综合免费视频| 超碰国产AV| 99久久精品国产色欲| 思思热在线免费视频| 五月婷婷天天| 五月激情小说| Av在线资源| 大香蕉天堂| 狠狠狠狠免费| 六月丁香网| 久久激情五月婷婷| 色婷婷人人| 7超碰自拍| 激情综合五月.....| 色婷婷AV久久久久久久| 五月丁香影视| 日本少妇AA一级特黄大片| 五月丁香激情综合| 天天日夜夜帕| 久久激情综合| 婷婷五月a| 亚洲国产婷婷色五月| 丁香五月天激情四射网| 5月色婷婷| 婷婷五月天激情影片| 色情五月丁香婷婷网| 精品无码99| 九热视频| 久久99免费视频| 99热这里是精品| 狠狠干伊人| 婷婷伊人网| 666555。COm毛片| 性色婷婷| 激情五月丁香六月| 国产乱子轮XXX农村| 888久久久| 最新午夜理论片| 激情五月丁香婷婷| 91精品激情9| 欧美婷婷丁香五月社区| 五月天六月婷| 大战熟女丰满人妻AV| 激情五月天的婷婷| 思思精品热在线| 五月婷婷色播| 久久色天堂| 五月丁香六月婷婷视频| 丰满老熟妇BBBBB搡BBB| a网站免费观看| 天天日天天草| 久久视9精| 亚洲精品va| 伊人婷婷五月天| www.91av.com| 精品国产va久久久久久久| 综合激情在线视频| 97精品综合久久内射| 森林影视大全,最好看的2019年视频| 五月婷婷69| 5五月综合网亚洲| 秋霞少妇AV网站| 丁香婷婷精品视频| 婷婷久久大香蕉| 国产44页| 日韩色五月| 中日韩美欧成人一区二区精品在线| 色婷视频| www色五月| 視频福利乱色| 玖玖资源站中文| 91 欧美| 人妻操逼视频。| 五月天激情无码高清| 久热大香蕉| AV在线免费播放| 久久精品人妻| 婷婷色色欧美| 久久五月天综合| 99久久天堂婷婷| 99这里只有精品在线| 97色碰| 综合97五月| 五月天啪啪视频| 五月丁香婷草| 日本不卡中文字幕| 天天射美女| 欧日韩成人| A级毛片高清免费不卡播放谢谢谢谢| 亚艹艹| 久久精品熟女亚洲AV麻豆| 色亚洲色宗合| www五月婷婷88导航| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 精品久久这里热66| 手机旧版看人妻1025| 丁香五月天激情综合| 男人視頻站| 停婷丁五月在线| 丁香五婷| 國語久久婷| 久久激情五月婷婷| 99操| 99久热这里有精品| 综合色五月亭亭| wwwC0maV五月花| 香港九九六区八区99| 天天综合网亚洲网站| 久草视频大香蕉99| 99燥99日| 五月天桃色深爱网| 婷婷伊人75| www.五月天婷婷| 国产综合婷婷| 丁香婷婷久久 | 亚洲婷婷五月天| www.色婷婷。com| 亚洲中文字幕av| 超碰二区| 热99这里只是精品| 久99999热视频在线观看免费| 国产热精品| 20253AV| 能看的av网站| 99碰超| 精品人妻伦一二三区久久| 综合激情综合啪啪| 一级性感毛片| 另类图片天天影视在线观看| 99re久热只有精品6在线直播| 9色91视频| 欧美激情综合色丁香婷婷五月天 | 精品9久| 99免费在线视频| 午夜一区| 香蕉网婷婷| 99热8| 丁香六月综合激情| 五月婷婷久久大片| 伊九九三级区| 91九色 婷婷| 九九av| 六月丁香射婷婷欧美色图片| 91碰操| 91九色国产在线| 久一这里有精品国产| 色八戒操婷婷| 色吧五月婷婷| 99热这里只有免费| www.久久久久| 激情色五月天| 亚洲av免费在线| 亚洲欧洲自拍图片专区五月天| 日本在线观看aaa 99| 国产成人av在线| 色婷狠狠| 五月婷婷开心网| 欧美婷婷色五月| 51成人| 色五月亚洲| 天天肏在线观看| 激情婷婷丁香色情五月天| 久热久操久热久草国产91| 婷婷色婷婷| 九九热视频精品| 成人五月天婷婷| 韩日AV片| 久久婷婷五月天激情| 国产成人99久久亚洲综合精品| 天天橾日日橾夜夜橾17| 综合色五月| 第九色区AV在线| 亚洲欧美婷婷五月色综合| 思思热再线视频| 激情六月婷婷| 996黄色片| 99免费在线视频| 色欲一区二区三区精品A片| 中文字幕丰满乱孑伦无码专区| 99视频啪啪| 曰曰久久| 色婷婷五月天视频在线| 久久在这里有精品| 久久网日本| 九月色婷婷综合亚洲| 色欲天天综合网| www.色九月| 色碰干| 久99久视频精品| 国产精品美女| 婷婷五月天激情综合| 99爱免费视频| 丁香婷婷激情五月| 操操啪| 1234操逼网| 久久大大香| 91久热| 天天久久狠狠色综合| 日本社区五月天激情| 99热国产这里只有| 色播五月丁香| 在线另类视频| 97干婷婷| 亚洲成人AV在线| 超碰人人在线观看| 丁香婷婷五月份| 依人大香蕉| 欧美婷婷五月丁香| 91色色色| 亚欧州精品视频| 婷婷五月天色播| 色五开心五月五月深深爱| 97色五月天| 丁香综合伊人| 天天日天天狠狠操| 久久激情视频99| 欧美三日本三级少妇三99| 激情五月婷婷丁香综合网| 国产真实乱了老女人视频| 26UUU欧美| 五月婷在线观看| 激情久久丁香| 婷丁香五月天| 五月天激情婷婷| 色婷婷丁香五月天在线观看| 激情六月一二| 婷婷深爱五月丁香网| 国产精品久久久60086| 精品一二三区视频立| site:hcxsz888.com| 97啪啪| 激情综合色网| 99在线热| 天搞天天天天天| 成人丁香五月| 99er热精品视频| www.99热这里精品| 丁香六月激情综合网| 九九99在线| 色婷婷女优有码五月亭| 日韩高清久久| 91互操| 日韩av在线电影| 欧美日韩123| 九色婷婷| 丁香5月激情网| 激情五月婷黄版| 九九热免费观看视频| 美女五月天婷婷| xx色综合| 俺去也在线官网| 久狠日av| 人妻内射视频| 五月婷婷丁香综合| 狠狠色丁香| 综合久久婷婷| 国产黄色在线观看| 丰满少妇猛烈A片免费看观看| 琪琪色五月婷婷老师| 99欧美精品99日本精品| 久久九九婷婷| 久久婷.com| 婷婷丁香六月五月天| 26uuu美女三级视频| 天天干天天干天天干天天干天天| 五月婷婷五月天亚洲无码| 亭亭五月色男人| 狠狠综合网| 亚洲操b| 777精品久无码人妻蜜桃| www.夜夜操| 婷婷五月色天| 激情合网婷婷| 婷婷va| 中文字幕AV网址| 天天综合在线网| 国产精品18久久久| 狠狠色婷婷色| www99精品| 79亚洲精品少妇| 激情五月狠狠| 五月婷婷久久大香蕉| 国产这里只有精品| 性爱网五月婷婷| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 99九九在线| 婷婷开心青青草| 色五XX| 99re热在线视频| 99热久久这里只有精品| www.爱婷婷.com| 色婷丁香| 秋霞簧片| 91无码高清| 激情www| 大大香蕉综合在线| 91操熟女| 伊人五月丁香| 色婷婷电影| 第九色区AV在线| 婷婷久久性爱| 99视频在线观看欧| 91青娱乐青青草| 少妇人妻丰满做爰XXX| 五月丁香六月婷婷的女人| 丁香五月天在线视频| 国产,欧美,日韩,性爱| 九九99免费视频| 色伊人91在线视频| 99热播放| 丁香六月亚洲综合| 久久丁香五月天| 色婷小说| 79精品在线视频| 婷婷亚洲五月| 激情婷婷丁香五月| 亚洲美女高潮久久久久久69| 99日韩网站| 婷婷丁香色五月| 在线播放成人| 69堂午夜视频最新地址| 五月丁香六月婷婷色日| 五月天三级| 99愛国产| 激情五月天在线视频| 五月天激情日色在线| 99热精品在线播放观看| 久久综合影院| 亚洲黄网在线| 色五月婷婷 成人| 九九热婷婷| 欧美情色一区| 激情宗合哪里能看| 可以免费观看的AV| 影音先锋男士资源网一区| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 成人va视频| 天天碰夜夜操| 久久五月天综合视频网站| 五月丁香六月婷| 麻豆忘忧草午夜| 99热欧| 啪啪91| 91婷婷五月丁香碰| 激情五月婷婷丁香综合网| 五月激情啪啪| 五月天丁香六月综合| 天天爱天天做天天| 色婷婷色丁香色欲av| oumeisesewang| 五月婷婷深深爱| 伊人网色婷婷五月天| 亚洲久久视频| 色优久久| 97干欧美| 开心五月天激情网| 色色九区| 色色色.COM| 激情综合网激情五月丁香五月俺也去| 五月丁香五月丁香| 天天天天操| 影音先锋一区| 五月丁香婷婷色色色| 97精品综合久久内射| 日本激情综合| 丁香六月天婷婷开心综合| 成人综合伍月天| 伊久大香蕉| 精品国产va久| 五月香婷婷| 99热这里在线精品| 99热97| 成人丁香五月| 久久香蕉网| 九月影院義母在线播放| 五月丁香亭亭操逼| 亚洲碰碰碰| 91成人看片| 日本三级色| 玖玖热视频| 碰99在线| 激情五月丁香六月婷婷| 91人人爱| 五月花婷婷丁香| 婷婷五月丁香青青草在线| 精品99爱免费视频在线观看| 国内一级片| 色婷激情网| WW婷婷五月天com| 99精品在| 九九久久色| 婷婷五月天香蕉| 日本三级色| 六月丁香婷婷综合在线| 精品99视频| 日本激情91| 亚洲成人在线播放| 五月婷婷丁香六月| 综合久色五月| 久色精品| 噜噜久| 我想看国产大学生口爆吞精的视频| 欧美成人色婷婷| 9婷婷内射| 丁香婷婷色色| 五月天日日操夜夜操| 六月婷婷综合| 99综合99| 天堂va久久久噜噜噜久久Va| 久热亚洲| 色五月婷婷中文字幕| 欧美婷婷| 亚洲麻豆乱码国产2028| www99xxxx五月丁| 婷婷五月综合啪| 五月激情视频| 99国产精品久久久久久久久久久| 一本伊人色婷| 91久久九色| 亚洲AV免费在线| 玖玖婷婷五月天| 国产成人精品一区二三区熟女在线| 五月天激情av| www.射伊蕉婷婷| 九九99精品| 99这里只有精品在线观看| 亚洲成Av人片乱码色第1集| 99热在线观看精品| eeuus五月婷| 久久五月婷天天干| 成人在线日韩欧美| 99色区| 一本到不卡高清DVD| 五月丁香婷婷免费视频| 五月丁香六月色婷| 激情网 久久| 黄网在线观看免费| 99综合婷婷五月| av人人操| 日日撸夜夜操| 婷婷激情六月天视频| 大香蕉久久草| 久久久天堂国产精品女人| 色色AV色色色东莞| www.久久久久| av网站免费在线| 亚洲精品视频在线播放| 激情的五月| 婷婷刺激综合| 久99热| 夜夜爱网站| 一起草AV| 9久热在线精品| 国产成人网址| 久久婷婷五月天综合| 丁香六月激情四射| 激情六月天| 婷婷久久午夜网| 激情五月瑟瑟| 天天插综合网| 丁香色五月天| 国产免费一区二区在线A片视频| 91九色熟女| 综合狠狠五月婷婷| 色情五月天丁香社区| 中文字幕无码人妻少妇免费视频| 久久视频在线| 超碰免费观看| av在线资源| 五月婷婷av| 深爱五月中文字幕| 大香蕉久久草| 婷婷五月天丁香综合网| 综合久| 五月婷婷婷丁香播| 亚洲99手机免费看视频| 成人版视频在线观看| 啪啪日热| 久久婷婷五月| 色婷婷综合影院| 婷婷爱五月天人人爱| 丁香五月天AV在线| 五月天停停日日| 久久久av久av久片一区二区| 九九热精品| 丰满熟女人妻一区二区三| 婷婷五月免费观看| 九九色色网| 亚洲激情五月| 在线综合亚洲欧美65| 色色色色色色网| 激情图片婷婷| 色99热| 天天摸夜夜爽天天做| 九月色婷婷综合| 天天色图| 深爱激情婷| 色五月婷婷激情五月| 亚洲AV免费国产电影| 青青久久五月| 国产精品激情AV久久久青桔| 啪啪啪综合网| 日本九九视频| 一本久道综合色婷婷五月| 丁香五月婷婷六月婷| 91久久网站| 成人午夜视频精品一区| www色婷婷| 狠狠爱婷婷| 99精品在线观看视频| 无码区婷婷五月花开| www。五月天。com| 丁香五月1页| www.91婷婷| 999精品久久久久久久| 极品人妻VIDEOSSS人妻| 久操热线| 色色五月婷| 婷婷伊人中文字幕| 婷婷久久久久| 五月婷婷激情| 天天色天天操天天射| 婷婷丁香五月亚洲综合网在线视频观看| 日本狠狠爽| 99精品国产热久久91色欲| 六月婷婷综合激情| 五月丁香色婷婷色| 国产精品岛国片在线观看免费| 色婷婷四虎| 久久久精品婷婷五月天| 婷婷丁香九色| 做爰丰满少妇1313| 久色| 九九色逼| 日韩成人网址| 拍真实国产伦偷精品| 人人看人人草人人摸| 日韩av干| 99re这里只有精品首页| caopeng97日韩| 日逼免费视频| 第一区久久网站| 深爱五月最新网址| 激情小说婷婷五月| 五月丁香六月婷婷视频| 国产无套精品一区二区| 久热这里只有精品视频免费观看| 婷婷丁香五月综合网上 | 狠狠久久婷五月| 日本精品99| 九月婷婷久久| 激情丁香五月| 激情五月天婷婷| AAA级久久久精品| 九九爱精品网站| Www.se.久久| 91日韩美女被插视频| 婷婷久久精品| 色啪网| 色五月aV| 婷婷五月天激情视频| 天天做天天摸| 五月丁香六月婷婷姐| 亚欧州精品视频| 激情五月婷婷网| 99热自拍| 免费碰碰视频久| 禁片二区| 热99精品视频五月| 97色色色色| 五月天激情网图片 - 百度| 99热精国产这里只有精品| 亚洲五月天婷婷在线| 色五月激情网| 激情五月婷婷网| 亚洲综合另类| 婷婷五月五月丁香| 思思99热| 亚洲情欲久久| 六月婷婷香蕉| 精品视频这里只有精品| 丁香婷婷久久老熟女综合网| 久久久精品色色色| 91人人操人人爱| 开心五月婷婷激情| 久热免费视频| 婷婷五月天性爱视频| 97久人人| 亚洲性图一区二区三区| 狠狠狠夜夜夜| 日本视频99| 午夜丁香婷婷| 91人人网| 亚洲V国产V欧美V久久久久久| 1024在线视频| 老美AA片| 久久在线视频免费观看| 啪啪五月婷婷| 午夜色婷婷| 天天综合亚洲综合网天天αⅴ| 区区欧美你爱| 亚洲成人AV在线播放| 91碰碰碰| 在线99精品| 丁香六月婷婷五月天| 深爱五月最新网址| 婷婷久久五月| 国产性av| 五月婷婷狠狠干| 色五月婷婷久久大| 国产免费一区二区三区三州老师F1F1.CC | 五月婷婷综合激情小说| 丁香六月激情四射| 26uuu91| 九九婷婷综合| 久久se 综合网 | www婷婷| 亚洲第一影院高清无码网站| 涩综合在线 | 欧美色色色| 亚洲视频无| 五月人人丁香婷婷五月人人丁香| 99热精品在线免费观看| 99热99在线| 六月婷婷啪啪| 日日干干天天干| 91 九色 熟女| 操逼综合激情网| 一区二区中文字幕| 99狠狠| 五月天丁香婷婷网| 亚洲色情久久| 五月婷婷六月丁香在线视频免费在线观看| 深爱激情五月天| 熟女啪啪视频| www.夜夜.com| 婷婷五月天久久| 97操碰在线视频| 久久婷婷丁香六月天| 综合激情五月天| 成人在线观看一区| 热久久精品视频网站| 国产亚洲在线| 精品九九婷婷| 婷婷激情五月综合丁香社| 超碰在线国产| 日韩精品一品二区三区的使用体验| 丁香五月婷婷天| 在线播放成人网站| 色欲影香| 99精品小视频| 婷婷的五月天另类视频| 五月天狠狠网站| 97干视频在线| 色婷综合| 99色色最新视频| 在线不卡视频| 亚洲五月婷婷| 天天弄天天操| 亚洲影院婷婷色| 99re这里只有精品首页| 婷婷五月婷婷| 自拍偷窥99热| 欧美英丁香开心快乐六月天网| 91啪啪视频| 欧美激情综合| 欧洲亚洲精品| 9久9久9久女女女九九九一九| 亚洲综合色丁香五月天| 91九色精品熟女内射| 色婷婷五月天成人网| 婷婷性爱五月天| 少妇2做爰HD韩国电影| 快乐婷婷五月天| 日日天天干| 日韩av在线电影| 婷婷五月天激情电影| 丁香久月| 人人舔天天| www五月婷婷88导航| www·五月天| 欧美三日本三级少妇三99| 中文字幕成| 日日夜夜干| 丁香五月 性爱| 丁香五月在线观看完整版| 久久精品无码一区| 亚洲中文无码成人| 丁香六月婷婷综合| 99热欧| 国产毛片欧美毛片久久久| 婷婷6月综合网| 综合色图区| 色爱99| 99性爱| 色婷丨日丨天丨综合久久| 免费看欧美成人A片无码| 99'无码| 97高清国语自产拍| 开心激情久久久久久久| 97色婷婷| 五月丁香六月婷婷在线播放| 偷拍九九热| www,五月天激情| 婷婷五月综合免费在线| 久久久这里有精品| 操97在线观看| 婷婷色五月色| 91 九色 入口| 99自拍视频网站| 99操中文视频| 激情六月天| 五月婷婷香蕉| 无码成人播放器| 成年人看Va免费视频| 九九超日本| 超碰人人操| 色~性~乱~伦~噜| 99九九精品| 99热在线里有精品| 97成人丁香| 99日本精品视频热| 99视频只有精品| 精品综合久久久久久五月天| 日本狠狠干| 婷婷深爱五月丁香网| 伊人青涩网| 婷婷久月| 超碰9| a在线观看| 色婷婷色五月丁香| 久久婷婷五月综合色和| 激情 婷婷| 五月色婷婷中文字幕| 色吧99| 亚洲综合激情五月久久| 五月丁香婷婷综合视频| 能直接看的av网站| 无码G高清天| 九九久久9 9在线观看| 激情小说婷婷| 欧美天天草人人草| WWW.国产| 99热九九热| 成人 在线 日韩| 国产毛片精品一区二区色欲黄A片| 99爱视频在线免费观看| 日韩五月婷婷| 久久99热这里只有精品| 成人五月天在线视频在线观看| 婷婷丁香六月天激情四射网| 婷婷少妇激情| 五月天婷婷黄色视频| 五月天丁香啪啪网| 五月丁香婷草| 欧美久久五月婷婷| 日韩久久日| 99热这里是精品| 青草热视频这里只有精品| 综合玖玖偷拍| 99色网站| 中文字幕婷婷五月天在线观看| 天堂久久精品| 欧美精品中文字幕亚洲专区| 五月丁香六月色| 色欲婷婷夜夜| 亚州色综合| 五月天com| 思思re99视频在线观看| 欧美日韩成人在线| 五月婷婷色色爱| 婷婷五月天奸女| 久久婷婷五月天激情唯美| 亚洲乱码日产精品BD| 开心五月天激情网| 免费99情趣网视频| 99热97美女| 五月色丁香| 这里只有精品在线观看视频| 26uuu视频欧美| 182无码| 日本五月婷| 天堂草在线看www| 五月丁香日本片| 伊人激情网| 超碰成人免费| 五月婷婷在线观看黄| 99热这里只有精品亚洲| 超碰国产在线观看| 99热网精品| 91精品久久久久久77777| www.五月激情红色| 国产67194| 91综合视频在线| 国产小精品| 中文资源在线a| 99热这里只有精品最新| 日韩三级片一区二区| 夜夜爱影院| av一级棒av| 六月婷婷中文字幕| 五月婷婷综合在线| 色必久悠悠影院| 99色干| 免费操超碰| 人人摸人人操人人爱| 高清不卡一区| 综合网天天| 丁香婷婷六月激情综合| 伍月婷婷免费视频| 色五月婷婷五月天激情综合| ..真实国产乱子伦毛片 | 深爱开心激情网| 久久久这里都是精品| 超碰av天堂| 丁香花社区av| 国产成人一区二区三区在线观看| 六月丁香久久| 欧洲一区二区| 五月丁香六月激情综合欧美|