教你使用基于計(jì)算機(jī)視覺(jué)的PAN卡欺詐檢測(cè)
什么是計(jì)算機(jī)視覺(jué)?計(jì)算機(jī)視覺(jué)是人工智能的一個(gè)領(lǐng)域,它訓(xùn)練計(jì)算機(jī)解釋和理解視覺(jué)世界。使用來(lái)自相機(jī)和視頻的數(shù)字圖像以及深度學(xué)習(xí)模型,機(jī)器可以準(zhǔn)確地識(shí)別和分類(lèi)物體——然后對(duì)它們“看到”的東西做出反應(yīng)。
計(jì)算機(jī)視覺(jué)任務(wù)包括獲取、處理、分析和理解數(shù)字圖像的方法
圖像處理中的計(jì)算機(jī)視覺(jué)主要專(zhuān)注于處理原始輸入圖像以增強(qiáng)它們使其做好完成其他任務(wù)的準(zhǔn)備。計(jì)算機(jī)視覺(jué)專(zhuān)注于從輸入圖像或視頻中提取信息,以正確理解它們,從而像人腦一樣預(yù)測(cè)視覺(jué)輸入。
目的
該項(xiàng)目的目的是使用計(jì)算機(jī)視覺(jué)檢測(cè) PAN 卡的篡改/欺詐。這個(gè)項(xiàng)目將幫助不同的組織檢測(cè)他們的員工或客戶(hù)或任何人提供給他們的 Id,即 PAN 卡是否是原件。
對(duì)于這個(gè)項(xiàng)目,我們將計(jì)算 PAN 卡原件和用戶(hù)上傳的 PAN 卡的結(jié)構(gòu)相似度——這是這個(gè)項(xiàng)目的靈魂,我們將在本博客后面深入討論。
同樣,在這個(gè)項(xiàng)目中,借助涉及計(jì)算機(jī)視覺(jué)技術(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è)開(kāi)源的Python 包,在這個(gè)項(xiàng)目中,大部分圖像處理技術(shù)將通過(guò)scikit-image 來(lái)使用
imutils: Imutils 是一系列方便的函數(shù),用于使OpenCV 中的平移、旋轉(zhuǎn)、調(diào)整大小和顯示圖像等基本圖像處理功能變得更容易。
cv2: OpenCV (開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù))是一個(gè)編程函數(shù)庫(kù)。在這個(gè)項(xiàng)目中,圖像的讀取和寫(xiě)入是通過(guò) cv2 完成的。
PIL: PIL (Python 圖像庫(kù))是 Python 編程語(yǔ)言的免費(fèi)開(kāi)源附加庫(kù),增加了對(duì)打開(kāi)、操作和保存許多不同圖像文件格式的支持。
創(chuàng)建用于存儲(chǔ)圖像的文件夾和子文件夾,你可以手動(dòng)創(chuàng)建它(可選)。
!mkdir pan_card_tampering
!mkdir pan_card_tampering/image
從不同來(lái)源爬取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ì)來(lái)自不同來(lái)源的圖像進(jìn)行網(wǎng)絡(luò)抓取。加載原始圖像和用戶(hù)提供的圖像# 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)換為與原始圖像類(lèi)似的格式。
# 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),F(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
輸出 :
顯示用戶(hù)提供的圖像,將與 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卡和用戶(hù)給定的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è)完整的參考,需要來(lái)自同一個(gè)鏡頭的2 個(gè)圖像,這意味著對(duì)于人眼來(lái)說(shuō),2 個(gè)圖像是相同的。第二張圖片一般是經(jīng)過(guò)壓縮的或者有不同的質(zhì)量,這就是這個(gè)指標(biāo)的目標(biāo)。
SSIM 的實(shí)際用途是什么?
SSIM 通常用于視頻行業(yè),但在攝影方面也有很強(qiáng)的應(yīng)用。
SSIM 如何幫助檢測(cè)?
SSIM 實(shí)際上衡量的是兩個(gè)相似圖像之間的感知差異。它無(wú)法判斷兩者中的哪一個(gè)更好:必須從知道哪個(gè)是原始的以及哪個(gè)已經(jīng)暴露于諸如壓縮或過(guò)濾器之類(lèi)的附加處理來(lái)推斷。# 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è)過(guò)程,可以簡(jiǎn)單地解釋為連接所有連續(xù)點(diǎn)(連同邊界)的曲線(xià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ī)視覺(jué)的閾值函數(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
推斷:這與篡改圖像類(lèi)似,但可以注意到篡改圖像中缺少某些輪廓。這是上述結(jié)果的說(shuō)明
# 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ù)加熱閾值顯示輪廓的另一種交互式的方式,即通過(guò)查找加熱區(qū)域(文本/圖像區(qū)域)和正常區(qū)域(沒(méi)有文本/圖像)。加熱區(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%,我們可以說(shuō)用戶(hù)提供的圖像是偽造的或被篡改的。最后,我們通過(guò)顯示具有輪廓、差異和閾值的圖像來(lái)可視化圖像之間的差異和相似之處。范圍該項(xiàng)目可用于不同的組織,客戶(hù)或用戶(hù)需要提供任何類(lèi)型的 id 才能進(jìn)行驗(yàn)證。該組織可以使用該項(xiàng)目來(lái)查明該 ID 是原始的還是偽造的。同樣,這可用于任何類(lèi)型的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)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線(xiàn)大會(huì)
-
4月30日立即下載>> 【村田汽車(chē)】汽車(chē)E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線(xiàn)下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線(xiàn)會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書(shū)】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專(zhuān)題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開(kāi)始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 “AI寒武紀(jì)”爆發(fā)至今,五類(lèi)新物種登上歷史舞臺(tái)
- 4 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 5 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來(lái)商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽(yáng)光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開(kāi)成長(zhǎng)空間
- 8 地平線(xiàn)自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營(yíng)收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?