亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Python如何識別銀行卡卡號?

Python如何識別銀行卡卡號?

熱門標(biāo)簽:騰訊地圖標(biāo)注沒法顯示 聊城語音外呼系統(tǒng) 商家地圖標(biāo)注海報(bào) 海外網(wǎng)吧地圖標(biāo)注注冊 地圖標(biāo)注自己和別人標(biāo)注區(qū)別 孝感營銷電話機(jī)器人效果怎么樣 打電話機(jī)器人營銷 ai電銷機(jī)器人的優(yōu)勢 南陽打電話機(jī)器人

一、現(xiàn)有資源梳理

目前有一張卡號模板圖片

N張測試銀行卡圖片,其一如下

操作環(huán)境 win10-64位
代碼語言 Python 3.6

二、實(shí)現(xiàn)方案規(guī)劃

對模板操作,將十個(gè)模板和對應(yīng)的數(shù)字一一對應(yīng)起來

圖片中通過查找輪廓,然后繪制輪廓外界矩形的方式,將每一和數(shù)字分割出來,并和對應(yīng)的數(shù)字相對應(yīng)。以字典的形式保存
每一個(gè)模板都是這樣的形式存儲。

array([[ 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255],
	 [ 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [ 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0], 
	 [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
	 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
	 [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
	 [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255]], dtype=uint8)

對測試圖片操作,取得我們需要的,每個(gè)數(shù)字的像素 .

整個(gè)照片的干擾信息很多,很難直接就定位到卡號位置,需要經(jīng)過一系列的變換。
定位到卡號位置后,如何將每個(gè)卡號給提取出來,進(jìn)行模板匹配,識別其數(shù)字。

1.輸入的圖片為RGB格式,需要轉(zhuǎn)換成GRAY格式,然后再將灰度形式的圖片進(jìn)行二值化處理。

2.對于二值化處理之后的圖片進(jìn)行Sobel濾波,將數(shù)字模糊,連接起來。

3.經(jīng)過Sobel之后可能數(shù)字沒有連接在一起,所以執(zhí)行閉操作將相鄰的數(shù)字連接起來,因?yàn)閿?shù)字是橫向的,所以閉操作的核設(shè)置為[1,1,1,1,1,1,1,1,1]

4.通過查找輪廓和輪廓外接矩形的方式定位到連續(xù)數(shù)字區(qū)域。

5.通過連續(xù)數(shù)字區(qū)域分割出每一個(gè)數(shù)字,然后將每個(gè)數(shù)字和模板進(jìn)行匹配,匹配結(jié)果最高的就是最有可能的數(shù)字。

三、代碼實(shí)現(xiàn)

工具包導(dǎo)入

from imutils import contours
import numpy as np
import argparse
import cv2
import myutils

路徑和繪圖函數(shù)及信用卡類型設(shè)定

# 模板圖片
template = 'images/ocr_a_reference.png'
# 測試圖片
image = 'images/credit_card_03.png'
# 指定信用卡類型
FIRST_NUMBER = {
	"3": "American Express",
	"4": "Visa",
	"5": "MasterCard",
	"6": "Discover Card"
}
# 繪圖展示
def cv_show(name,img):
	cv2.imshow(name, img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()

模板處理

img = cv2.imread(template)
cv_show('img', img)
# 灰度圖
ref = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv_show('ref', ref)
# 二值圖像
ref = cv2.threshold(ref, 10, 255, cv2.THRESH_BINARY_INV)[1]
cv_show('ref', ref)

# 計(jì)算輪廓
#cv2.findContours()函數(shù)接受的參數(shù)為二值圖,即黑白的(不是灰度圖),cv2.RETR_EXTERNAL只檢測外輪廓,cv2.CHAIN_APPROX_SIMPLE只保留終點(diǎn)坐標(biāo)
#返回的list中每個(gè)元素都是圖像中的一個(gè)輪廓

ref_, refCnts, hierarchy = cv2.findContours(ref.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, refCnts, -1, (0, 0, 255), 3)
cv_show('img', img)
print(np.array(refCnts).shape)
refCnts = myutils.sort_contours(refCnts, method="left-to-right")[0] #排序,從左到右,從上到下
digits = {}

# 遍歷每一個(gè)輪廓
for (i, c) in enumerate(refCnts):
	# 計(jì)算外接矩形并且resize成合適大小
	(x, y, w, h) = cv2.boundingRect(c)
	roi = ref[y:y + h, x:x + w]
	roi = cv2.resize(roi, (57, 88))

	# 每一個(gè)數(shù)字對應(yīng)每一個(gè)模板
	digits[i] = roi
# print(digits)

測試圖片處理

# 初始化卷積核
rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3))
sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

#讀取輸入圖像,預(yù)處理
image = cv2.imread(image)
cv_show('image',image)
image = myutils.resize(image, width=300)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv_show('gray',gray)

#禮帽操作,突出更明亮的區(qū)域
tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, rectKernel) 
cv_show('tophat',tophat) 
# 
gradX = cv2.Sobel(tophat, ddepth=cv2.CV_32F, dx=1, dy=0, #ksize=-1相當(dāng)于用3*3的
	ksize=-1)


gradX = np.absolute(gradX)
(minVal, maxVal) = (np.min(gradX), np.max(gradX))
gradX = (255 * ((gradX - minVal) / (maxVal - minVal)))
gradX = gradX.astype("uint8")

print (np.array(gradX).shape)
cv_show('gradX',gradX)

#通過閉操作(先膨脹,再腐蝕)將數(shù)字連在一起
gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rectKernel) 
cv_show('gradX',gradX)
#THRESH_OTSU會(huì)自動(dòng)尋找合適的閾值,適合雙峰,需把閾值參數(shù)設(shè)置為0
thresh = cv2.threshold(gradX, 0, 255,
	cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] 
cv_show('thresh',thresh)

#再來一個(gè)閉操作

thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, sqKernel) #再來一個(gè)閉操作
cv_show('thresh',thresh)

# 計(jì)算輪廓

thresh_, threshCnts, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
	cv2.CHAIN_APPROX_SIMPLE)

cnts = threshCnts
cur_img = image.copy()
cv2.drawContours(cur_img,cnts,-1,(0,0,255),3) 
cv_show('img',cur_img)
locs = []

# 遍歷輪廓
for (i, c) in enumerate(cnts):
	# 計(jì)算矩形
	(x, y, w, h) = cv2.boundingRect(c)
	ar = w / float(h)

	# 選擇合適的區(qū)域,根據(jù)實(shí)際任務(wù)來,這里的基本都是四個(gè)數(shù)字一組
	if ar > 2.5 and ar  4.0:

		if (w > 40 and w  55) and (h > 10 and h  20):
			#符合的留下來
			locs.append((x, y, w, h))

# 將符合的輪廓從左到右排序
locs = sorted(locs, key=lambda x:x[0])
output = []

# 遍歷每一個(gè)輪廓中的數(shù)字
for (i, (gX, gY, gW, gH)) in enumerate(locs):
	# initialize the list of group digits
	groupOutput = []

	# 根據(jù)坐標(biāo)提取每一個(gè)組
	group = gray[gY - 5:gY + gH + 5, gX - 5:gX + gW + 5]
	cv_show('group',group)
	# 預(yù)處理
	group = cv2.threshold(group, 0, 255,
		cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
	cv_show('group',group)
	# 計(jì)算每一組的輪廓
	group_,digitCnts,hierarchy = cv2.findContours(group.copy(), cv2.RETR_EXTERNAL,
		cv2.CHAIN_APPROX_SIMPLE)
	digitCnts = contours.sort_contours(digitCnts,
		method="left-to-right")[0]

	# 計(jì)算每一組中的每一個(gè)數(shù)值
	for c in digitCnts:
		# 找到當(dāng)前數(shù)值的輪廓,resize成合適的的大小
		(x, y, w, h) = cv2.boundingRect(c)
		roi = group[y:y + h, x:x + w]
		roi = cv2.resize(roi, (57, 88))
		cv_show('roi',roi)

		# 計(jì)算匹配得分
		scores = []

		# 在模板中計(jì)算每一個(gè)得分
		for (digit, digitROI) in digits.items():
			# 模板匹配
			result = cv2.matchTemplate(roi, digitROI,
				cv2.TM_CCOEFF)
			(_, score, _, _) = cv2.minMaxLoc(result)
			scores.append(score)

		# 得到最合適的數(shù)字
		groupOutput.append(str(np.argmax(scores)))

	# 畫出來
	cv2.rectangle(image, (gX - 5, gY - 5),
		(gX + gW + 5, gY + gH + 5), (0, 0, 255), 1)
	cv2.putText(image, "".join(groupOutput), (gX, gY - 15),
		cv2.FONT_HERSHEY_SIMPLEX, 0.65, (0, 0, 255), 2)

	# 得到結(jié)果
	output.extend(groupOutput)

# 打印結(jié)果
print("Credit Card Type: {}".format(FIRST_NUMBER[output[0]]))
print("Credit Card #: {}".format("".join(output)))
cv2.imshow("Image", image)
cv2.waitKey(0)
# (194, 300)
# Credit Card Type: MasterCard
# Credit Card #: 5412751234567890

所有代碼連在一起就是完整的代碼

到此這篇關(guān)于Python如何識別銀行卡卡號?的文章就介紹到這了,更多相關(guān)Python識別卡號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 怎么用Python識別手勢數(shù)字
  • python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)
  • python實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識別
  • python opencv人臉識別考勤系統(tǒng)的完整源碼
  • python基于OpenCV模板匹配識別圖片中的數(shù)字
  • Python OpenCV招商銀行信用卡卡號識別的方法

標(biāo)簽:撫州 迪慶 聊城 南寧 牡丹江 六盤水 楊凌 揚(yáng)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python如何識別銀行卡卡號?》,本文關(guān)鍵詞  Python,如何,識別,銀行卡,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python如何識別銀行卡卡號?》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python如何識別銀行卡卡號?的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    免费的黄色小视频| 日本在线播放一区| 国产一级生活片| 欧美激情一区二区三区在线播放| 成人在免费观看视频国产| 久久国产影院| 国产麻豆精品高清在线播放| 欧美激情一区二区三区视频| 一级女性全黄生活片免费| 亚洲第一页色| 日韩在线观看视频免费| 一本高清在线| 99久久网站| 黄色福利片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 高清一级淫片a级中文字幕| 欧美激情一区二区三区在线 | 免费国产在线观看| 国产韩国精品一区二区三区| 美国一区二区三区| 国产成人精品影视| a级黄色毛片免费播放视频| 国产91精品系列在线观看| 日日爽天天| 亚洲天堂免费观看| 99色播| 亚洲天堂在线播放| 99热精品在线| 美女免费毛片| 免费国产一级特黄aa大片在线| 九九久久99| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 麻豆网站在线看| 欧美1区| 日本免费区| 天天色成人网| 日韩中文字幕一区| 精品久久久久久免费影院| 国产精品自拍亚洲| 九九九国产| 91麻豆精品国产自产在线观看一区| 国产极品白嫩美女在线观看看| 精品国产三级a| 韩国毛片| 久久精品人人做人人爽97| 四虎久久影院| 国产伦理精品| 国产成人女人在线视频观看| 超级乱淫黄漫画免费| 亚洲wwwwww| 精品视频在线观看一区二区三区| 成人免费观看视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本在线播放一区| 色综合久久天天综合绕观看| 国产国语在线播放视频| 久草免费在线观看| 日韩中文字幕在线播放| 91麻豆爱豆果冻天美星空| 精品国产香蕉在线播出| 高清一级淫片a级中文字幕| 一级片片| 91麻豆爱豆果冻天美星空| 欧美激情中文字幕一区二区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 九九精品久久| 亚洲爆爽| 国产成人精品影视| 欧美另类videosbestsex视频| 999精品视频在线| 成人高清视频在线观看| 久久99欧美| 99热精品在线| 国产a视频精品免费观看| 日韩中文字幕在线观看视频| 欧美大片毛片aaa免费看| 欧美日本二区| 国产不卡精品一区二区三区| 国产亚洲精品成人a在线| 国产精品自拍一区| 欧美电影免费| 国产精品自拍在线观看| 99久久精品费精品国产一区二区| 精品国产一级毛片| 999久久狠狠免费精品| 国产伦理精品| 色综合久久天天综线观看| 青草国产在线观看| 二级片在线观看| 国产欧美精品| 国产一区二区精品久久91| 国产一区二区精品久久91| 亚洲精品中文一区不卡| 国产91精品露脸国语对白| 日韩中文字幕在线播放| 韩国毛片| 黄色免费三级| 亚欧视频在线| 一 级 黄 中国色 片| 亚洲精品久久久中文字| 精品在线观看一区| 久久成人综合网| 国产麻豆精品| 91麻豆精品国产片在线观看| 日日日夜夜操| 在线观看成人网 | 国产不卡在线看| 毛片高清| 精品久久久久久中文字幕一区| 99色视频在线| 美女免费精品视频在线观看| 成人a级高清视频在线观看| 国产精品免费精品自在线观看| 成人高清视频在线观看| 天天做人人爱夜夜爽2020毛片| 精品久久久久久免费影院| 91麻豆精品国产高清在线| 日韩av片免费播放| 一级毛片看真人在线视频| 亚洲天堂免费| 四虎久久影院| 国产精品自拍一区| 欧美日本国产| 黄视频网站免费| 国产伦精品一区三区视频| 青青青草影院| 国产精品1024永久免费视频| 亚洲 男人 天堂| 久久精品免视看国产成人2021| 久久成人综合网| 免费毛片播放| 欧美激情一区二区三区在线| 九九精品久久| 日日夜夜婷婷| 久草免费在线色站| 日韩欧美一二三区| 精品久久久久久中文| 欧美α片无限看在线观看免费| 色综合久久天天综合绕观看| 国产91精品一区| 国产亚洲精品成人a在线| 国产极品精频在线观看| 韩国三级视频网站| 成人免费一级毛片在线播放视频| 午夜在线影院| 毛片电影网| 韩国毛片| 国产a一级| 国产精品123| 四虎影视库国产精品一区| 成人影院一区二区三区| 免费的黄视频| 精品国产一区二区三区久| 午夜在线亚洲| 可以在线看黄的网站| 欧美激情一区二区三区视频 | 欧美一区二区三区在线观看| 久久精品免视看国产成人2021| 在线观看成人网| 一级女人毛片人一女人| 精品国产亚洲一区二区三区| 日本特黄一级| 国产欧美精品| 精品国产三级a| 日本特黄特黄aaaaa大片| 国产成人欧美一区二区三区的| 毛片高清| 精品视频一区二区三区| 成人免费观看男女羞羞视频| 美女免费黄网站| 麻豆污视频| 久久精品大片| 亚洲精品久久久中文字| 99热精品在线| 国产不卡在线观看视频| 天天色色色| 久久99这里只有精品国产| 欧美1区2区3区| 欧美激情一区二区三区在线| 精品视频在线观看一区二区三区| 亚欧成人乱码一区二区| 国产一区二区精品在线观看| 久久福利影视| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚欧乱色一区二区三区| 国产精品1024在线永久免费| 欧美日本免费| 可以在线看黄的网站| 欧美日本二区| 国产麻豆精品视频| 精品国产香蕉在线播出| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久国产精品自线拍免费| 91麻豆国产| 99色视频在线| 欧美另类videosbestsex久久| 色综合久久天天综线观看 | 青青青草视频在线观看| 精品在线观看国产| 91麻豆精品国产高清在线|