教你使用基于計(jì)算機(jī)視覺的PAN卡欺詐檢測(cè)
什么是計(jì)算機(jī)視覺?計(jì)算機(jī)視覺是人工智能的一個(gè)領(lǐng)域,它訓(xùn)練計(jì)算機(jī)解釋和理解視覺世界。使用來自相機(jī)和視頻的數(shù)字圖像以及深度學(xué)習(xí)模型,機(jī)器可以準(zhǔn)確地識(shí)別和分類物體——然后對(duì)它們“看到”的東西做出反應(yīng)。
計(jì)算機(jī)視覺任務(wù)包括獲取、處理、分析和理解數(shù)字圖像的方法
圖像處理中的計(jì)算機(jī)視覺主要專注于處理原始輸入圖像以增強(qiáng)它們使其做好完成其他任務(wù)的準(zhǔn)備。計(jì)算機(jī)視覺專注于從輸入圖像或視頻中提取信息,以正確理解它們,從而像人腦一樣預(yù)測(cè)視覺輸入。
目的
該項(xiàng)目的目的是使用計(jì)算機(jī)視覺檢測(cè) PAN 卡的篡改/欺詐。這個(gè)項(xiàng)目將幫助不同的組織檢測(cè)他們的員工或客戶或任何人提供給他們的 Id,即 PAN 卡是否是原件。
對(duì)于這個(gè)項(xiàng)目,我們將計(jì)算 PAN 卡原件和用戶上傳的 PAN 卡的結(jié)構(gòu)相似度——這是這個(gè)項(xiàng)目的靈魂,我們將在本博客后面深入討論。
同樣,在這個(gè)項(xiàng)目中,借助涉及計(jì)算機(jī)視覺技術(shù)的圖像處理,我們將檢測(cè) PAN 卡的給定圖像是原件還是篡改(假)PAN 卡。
本項(xiàng)目涉及的步驟如下
導(dǎo)入必要的庫(kù)
從網(wǎng)站上爬取被篡改的pan卡原件
將篡改圖像的形狀縮小為原始圖像
讀取原始圖像和篡改圖像
將圖像轉(zhuǎn)換為灰度圖像
幅圖像之間應(yīng)用結(jié)構(gòu)相似性指數(shù)(SSIM)技術(shù)
計(jì)算閾值和輪廓
體驗(yàn)圖像的實(shí)時(shí)輪廓和閾值
導(dǎo)入必要的包
from skimage.metrics import structural_similarity
import imutils
import cv2
from PIL import Image
import requests
Skimage: Scikit-image,或ski-mage,是一個(gè)開源的Python 包,在這個(gè)項(xiàng)目中,大部分圖像處理技術(shù)將通過scikit-image 來使用
imutils: Imutils 是一系列方便的函數(shù),用于使OpenCV 中的平移、旋轉(zhuǎn)、調(diào)整大小和顯示圖像等基本圖像處理功能變得更容易。
cv2: OpenCV (開源計(jì)算機(jī)視覺庫(kù))是一個(gè)編程函數(shù)庫(kù)。在這個(gè)項(xiàng)目中,圖像的讀取和寫入是通過 cv2 完成的。
PIL: PIL (Python 圖像庫(kù))是 Python 編程語(yǔ)言的免費(fèi)開源附加庫(kù),增加了對(duì)打開、操作和保存許多不同圖像文件格式的支持。
創(chuàng)建用于存儲(chǔ)圖像的文件夾和子文件夾,你可以手動(dòng)創(chuàng)建它(可選)。
!mkdir pan_card_tampering
!mkdir pan_card_tampering/image
從不同來源爬取PAN 卡原件和篡改的 PAN 卡original = Image.open(requests.get('https://www.thestatesman.com/wp-content/uploads/2019/07/pan-card.jpg', stream=True).raw)
tampered = Image.open(requests.get('https://assets1.cleartax-cdn.com/s/img/20170526124335/Pan4.png', stream=True).raw)
在上面的代碼片段中,我們使用requests庫(kù)對(duì)來自不同來源的圖像進(jìn)行網(wǎng)絡(luò)抓取。加載原始圖像和用戶提供的圖像# The file format of the source file.
print("Original image format : ",original.format)
print("Tampered image format : ",tampered.format)
# Image size, in pixels. The size is given as a 2-tuple (width, height).
print("Original image size : ",original.size)
print("Tampered image size : ",tampered.size)
輸出 :Original image format : JPEG
Tampered image format : PNG
Original image size : (1200, 800)
Tampered image size : (282, 179)
正如你在上面的輸出中所看到的,原始圖像的原始大小和篡改圖像的原始大小不同,這將導(dǎo)致在進(jìn)行圖像處理時(shí)出現(xiàn)不必要的錯(cuò)誤結(jié)果,這就是將圖像縮小到相同形狀的原因。將篡改圖像的格式轉(zhuǎn)換為與原始圖像類似的格式。
# Resize Image
original = original.resize((250, 160))
print(original.size)
original.save('pan_card_tampering/image/original.png')#Save image
tampered = tampered.resize((250,160))
print(tampered.size)
tampered.save('pan_card_tampering/image/tampered.png')#Saves image
輸出 :(250, 160)
(250, 160)
現(xiàn)在,如果你將看到輸出圖像(原始圖像和篡改圖像)的形狀被縮小到相同的形狀,即(250,160)。現(xiàn)在的圖像處理將比以前更加平滑和準(zhǔn)確。如果需要,我們可以更改圖像的格式(png 或 jpg)。# Change image type if required from png to jpg
tampered = Image.open('pan_card_tampering/image/tampered.png')
tampered.save('pan_card_tampering/image/tampered.png')#can do png to jpg
顯示將用于比較的原始 PAN 卡圖像。# Display original image
original
輸出 :
顯示用戶提供的圖像,將與 PAN 卡進(jìn)行比較。# Display user given image
tampered
輸出 :
使用 OpenCV 讀取圖像。# load the two input images
original = cv2.imread('pan_card_tampering/image/original.png')
tampered = cv2.imread('pan_card_tampering/image/tampered.png')
現(xiàn)在在上面的代碼中,我們使用 cv2 的**imread()**函數(shù)讀取圖像(原件和篡改)。
將圖像轉(zhuǎn)換為灰度
# Convert the images to grayscale
original_gray = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
tampered_gray = cv2.cvtColor(tampered, cv2.COLOR_BGR2GRAY)
在上面的代碼中,我們使用參數(shù)為cv2.COLOR_BGR2GRAY 的 cv2函數(shù)cvtColor()將原始圖像(原始PAN卡和用戶給定的PAN卡)轉(zhuǎn)換為灰度圖像。但是為什么我們需要將它們轉(zhuǎn)換為灰度?原因如下:將圖像轉(zhuǎn)換為灰度對(duì)于圖像處理的不準(zhǔn)確性非常有益,因?yàn)樵趫D像處理中,許多應(yīng)用程序并不能幫助我們識(shí)別重要性,彩色圖像的邊緣以及彩色圖像對(duì)于機(jī)器理解有點(diǎn)復(fù)雜,因?yàn)樗鼈冇? 個(gè)通道,而灰度只有1 個(gè)通道。
在兩幅圖像之間應(yīng)用結(jié)構(gòu)相似性指數(shù) (SSIM) 技術(shù)
首先我們需要了解什么是SSIM。
什么是 SSIM?
**結(jié)構(gòu)相似性指數(shù) (SSIM)**是一種感知度量,用于量化由數(shù)據(jù)壓縮等處理或數(shù)據(jù)傳輸丟失引起的圖像質(zhì)量下降。
SSIM 如何發(fā)揮其功能?
這個(gè)指標(biāo)基本上是一個(gè)完整的參考,需要來自同一個(gè)鏡頭的2 個(gè)圖像,這意味著對(duì)于人眼來說,2 個(gè)圖像是相同的。第二張圖片一般是經(jīng)過壓縮的或者有不同的質(zhì)量,這就是這個(gè)指標(biāo)的目標(biāo)。
SSIM 的實(shí)際用途是什么?
SSIM 通常用于視頻行業(yè),但在攝影方面也有很強(qiáng)的應(yīng)用。
SSIM 如何幫助檢測(cè)?
SSIM 實(shí)際上衡量的是兩個(gè)相似圖像之間的感知差異。它無法判斷兩者中的哪一個(gè)更好:必須從知道哪個(gè)是原始的以及哪個(gè)已經(jīng)暴露于諸如壓縮或過濾器之類的附加處理來推斷。# Compute the Structural Similarity Index (SSIM) between the two images,
# ensuring that the difference image is returned
(score, diff) = structural_similarity(original_gray, tampered_gray, full=True)
diff = (diff * 255).a(chǎn)stype("uint8")
print("SSIM Score is : {}".format(score*100))
if score >= 80:
print ("The given pan card is original")
else:
print("The given pan card is tampered")
輸出 :SSIM Score is : 31.678790332739425
The given pan card is tampered
讓我們分解一下上面代碼中剛剛發(fā)生的事情結(jié)構(gòu)相似性指數(shù)幫助我們準(zhǔn)確地確定在x,y 坐標(biāo)位置方面,圖像差異在哪里。在這里,我們?cè)噲D找到原始圖像和篡改圖像之間的相似之處。SSIM分?jǐn)?shù)越低相似度越低,即SSIM分?jǐn)?shù)與兩幅圖像的相似度成正比我們給出了一個(gè)閾值“45”,即如果分?jǐn)?shù)>= 80,它將被視為原卡,否則被篡改。通常,對(duì)于良好質(zhì)量的重建技術(shù),SSIM 值為 0.97、0.98、0.99。體驗(yàn)圖像上的實(shí)時(shí)閾值和輪廓輪廓檢測(cè)是一個(gè)過程,可以簡(jiǎn)單地解釋為連接所有連續(xù)點(diǎn)(連同邊界)的曲線,具有相同的顏色或強(qiáng)度。該算法確實(shí)找到了圖像的邊緣,但也將它們置于層次結(jié)構(gòu)中。# Calculating threshold and contours
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
在這里,我們使用計(jì)算機(jī)視覺的閾值函數(shù),該函數(shù)將自適應(yīng)閾值應(yīng)用于存儲(chǔ)在表單數(shù)組中的圖像。此函數(shù)使用數(shù)學(xué)公式將灰度圖像轉(zhuǎn)換為二值圖像。查找輪廓適用于二值圖像并檢索輪廓。這些輪廓是形狀分析和識(shí)別的有用工具。抓取輪廓,抓取合適的輪廓值。創(chuàng)建邊界框(輪廓)# loop over the contours
for c in cnts:
# applying contours on image
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(original, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.rectangle(tampered, (x, y), (x + w, y + h), (0, 0, 255), 2)
邊界矩形幫助找到對(duì)象的邊界矩形的寬高比。我們計(jì)算輪廓的邊界框,然后在兩個(gè)輸入圖像上繪制邊界框以表示兩個(gè)圖像的不同之處**。**#Display original image with contour
print('Original Format Image')
original_contour = Image.fromarray(original)
original_contour.save("pan_card_tampering/image/original_contour_image.png")
original_contour
輸出 :Original format Image
推斷:在上面的輸出中,你可以看到使用**fromarray()**函數(shù)顯示原始圖像及其輪廓(邊界框)。此外,你可以使用**save()**函數(shù)(可選)簡(jiǎn)單地保存圖像。#Diplay tampered image with contour
print('Tampered Image')
tampered_contour = Image.fromarray(tampered)
tampered_contour.save("pan_card_tampering/image/tampered_contours_image.png")
tampered_contour
輸出 :Tampered Image
推斷:這與篡改圖像類似,但可以注意到篡改圖像中缺少某些輪廓。這是上述結(jié)果的說明
# Display difference image with black
print('Different Image')
difference_image = Image.fromarray(diff)
difference_image.save("pan_card_tampering/image/difference_image.png")
difference_image
輸出 :Different Image
推斷:這是根據(jù)加熱閾值顯示輪廓的另一種交互式的方式,即通過查找加熱區(qū)域(文本/圖像區(qū)域)和正常區(qū)域(沒有文本/圖像)。加熱區(qū),即具有文本/圖像的區(qū)域?qū)@示在深色區(qū)域中,而另一種區(qū)域顯示為淺色區(qū)域。#Display threshold image with white
print('Threshold Image')
threshold_image = Image.fromarray(thresh)
threshold_image.save("pan_card_tampering/image/threshold_image.png")
threshold_image
輸出 :Threshold Image
推論:這里的一切都是一樣的,我們只能看到顏色作用的變化,這里白色表示加熱區(qū),黑色表示正常區(qū)?偨Y(jié)找出圖像的結(jié)構(gòu)相似性有助于我們找到圖像形狀的差異或相似性。同樣,根據(jù)該閾值為轉(zhuǎn)換為灰度二值的圖像找出閾值和輪廓也有助于我們進(jìn)行形狀分析和識(shí)別。由于我們的 SSIM 約為 31.2%,我們可以說用戶提供的圖像是偽造的或被篡改的。最后,我們通過顯示具有輪廓、差異和閾值的圖像來可視化圖像之間的差異和相似之處。范圍該項(xiàng)目可用于不同的組織,客戶或用戶需要提供任何類型的 id 才能進(jìn)行驗(yàn)證。該組織可以使用該項(xiàng)目來查明該 ID 是原始的還是偽造的。同樣,這可用于任何類型的ID,如 Aadhar、選民 ID 等。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
精彩回顧立即查看>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
推薦專題
- 1 【一周車話】沒有方向盤和踏板的車,你敢坐嗎?
- 2 特斯拉發(fā)布無人駕駛車,還未迎來“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 6 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 7 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 8 比蘋果偉大100倍!真正改寫人類歷史的智能產(chǎn)品降臨
- 9 諾獎(jiǎng)進(jìn)入“AI時(shí)代”,人類何去何從?
- 10 Open AI融資后成萬億獨(dú)角獸,AI人才之爭(zhēng)開啟
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市