機器學習高階 專案實戰 信用卡數字識別

2021-10-25 09:36:00 字數 4085 閱讀 4535

機器學習高階-專案實戰-信用卡數字識別 1.cv2.findcontour(找出輪廓) 2.cv2.boudingrect(輪廓外接矩陣位置) 3.cv2.threshold(二值化操作) 4.cv2.morph_tophat(禮帽運算突出線條) 5.cv2.morph_close(閉運算內部膨脹) 6. cv2.resize(改變影象大小) 7.cv2.puttext(在上放上文字)

cv2.puttext(img, text, loc, text_font, font_scale, color, linestick)

font_scale表示文字的規格,color表示文字顏色,linestick表示線條大小

信用卡數字識別:

信用卡 數字模板

涉及到的內容:主要是採用模板匹配的思想

思路:第一部分:數字模板提取數字

第二步:進行灰度化和二值化處理,這裡的二值化使用的cv2.thresh_binary_inv, 將黑色的數字轉換為白色

第三步:使用cv2.findcontours獲得輪廓資訊

第四步:對contours根據外接矩陣的x的位置,從左到右進行排序

複製**

import cv2

import numpy as np

import my_utis

def cv_show(img, name):

cv2.imshow(name, img)

cv2.waitkey(0)

cv2.destroyallwindows()

template = cv2.imread(『images/ocr_a_reference.png』)

gray = cv2.cvtcolor(template, cv2.color_bgr2gray)

cv_show(gray, 『gray』)

thresh = cv2.threshold(gray, 10, 255, cv2.thresh_binary_inv)[1]

cv_show(thresh, 『thresh』)

contours = my_utis.contours_sort(contours)

dict_template = {}

for i, contour in enumerate(contours):

# 畫出其外接矩陣,獲得其位置資訊

x, y, w, h = cv2.boundingrect(contour)

template_img = binary[y:y+h, x:x+w]

# 使用cv2.resize變化模板的大小

template_img = cv2.resize(template_img, (55, 88))

# cv_show(template_img, 『template_img』)

dict_template[i] = template_img

複製**

第八步:重新計算輪廓值,遍歷輪廓,根據長寬比和長寬的數值,篩選出符合條件的輪廓的locs,並對locs根據x的大小進行排序

複製**

rectkernel = np.ones([3, 9]) # 構造的卷積核,用於進行閉運算,和禮帽運算

sqkernel = np.ones([6, 6]) # 構造的卷積核,用於進行閉運算

img = cv2.imread(『images/cr』

『edit_card_01.png』)

img = my_utis.resize(img, width=300)

gray = cv2.cvtcolor(img, cv2.color_bgr2gray)

print(gray.shape)

#第三步:使用禮帽操作,使得亮度更加的明顯

tophat = cv2.morphologyex(gray, cv2.morph_tophat, rectkernel)

cv_show(tophat, 『tophat』)

sobel = cv2.sobel(tophat, cv2.cv_64f, 1, 0, ksize=-1)

sobel = np.absolute(sobel)

sobel_img = 255 * (sobel - sobel.min()) / (sobel.max() - sobel.min())

sobel_img = np.uint8(sobel_img)

cv_show(sobel_img, 『sobel_img』)

close = cv2.morphologyex(sobel_img, cv2.morph_close, rectkernel)

cv_show(close, 『close』)

binary = cv2.threshold(close, 0, 255, cv2.thresh_binary|cv2.thresh_otsu)[1]

cv_show(binary, 『binary』)

close2 = cv2.morphologyex(binary, cv2.morph_close, sqkernel)

cv_show(close2, 『close2』)

locs = sorted(locs, key=lambda x: x[0])

複製**

第三部分:遍歷每個locs,提取其中的數字,與模板數字做匹配,判斷數字屬於模板中的哪個數字

第三步:使用cv2.findcontours,找出其中的輪廓,對輪廓進行排序

第五步:迴圈數字模板,使用cv2.matchtemplate進行模板匹配,使用cv2.minmaxloc獲得最大的得分值,使用np.argmax輸出可能性最大的數字

複製**

print(np.shape(locs))

_, score, _, _ = cv2.minmaxloc(ret)
複製**

第一步:使用cv2.rectangle畫出矩陣

第二步:使用cv2.puttext加上文字資訊

複製**

for i in range(len(predict_number)):

x, y, w, h = predict_loc[i]

# 第一步:畫出矩形框

cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 1)

print(predict_number[i])

# 第二步:在上加上文字

cv2.puttext(img, predict_number[i], (x, y-10), cv2.font_hershey_******x, 0.65, (0, 0, 255), 2)

cv_show(img, 『img』)

複製**

最終的效果圖

複製**

import cv2

import numpy as np

def contours_sort(contours, method=0):

if method == 0:

contours = sorted(contours, key=lambda x:cv2.boundingrect(x)[0])

else:

contours = sorted(contours, key=lambda x:cv2.boundingrect(x)[0], reverse=true)

return contours
def resize(image, width=none, height=none, inter=cv2.inter_area):

h, w = image.shape[:2]

if width is none and height is none:

return image

if width is none:

r = height / float(h)

dim = (int(w * r), height)

else:

r = width / w

dim = (width, int(r * h))

resized = cv2.resize(image, dim, interpolation=inter)

return resized

複製**

呼叫的函式my_utis.py

機器學習專案實戰之信用卡欺詐檢測

反欺詐應用的機器模型演算法,多為二分類演算法。1 gbdt梯度提公升決策樹 gradient boosting decision tree,gbdt 演算法,該演算法的效能高,且在各類資料探勘中應用廣泛,表現優秀,被應用的場景較多。2 logistic回歸又稱logistic回歸分析,是一種廣義的線...

機器學習實戰之信用卡詐騙(一)

import pandas as pd import matplotlib.pyplot as plt import numpy as np 讀取資料 data pd.read csv creditcard.csv print data.head count classes pd.value cou...

大資料分析實戰 信用卡欺詐檢測

假設有乙份信用卡交易記錄,遺憾的是資料經過了脫敏處理,只知道其特徵,卻不知道每乙個字段代表什麼含義,沒關係,就當作是乙個個資料特徵。在資料中有兩種類別,分別是正常交易資料和異常交易資料,欄位中有明確的識別符號。要做的任務就是建立邏輯回歸模型,以對這兩類資料進行分類,看起來似乎很容易,但實際應用時會出...