iT邦幫忙

2021 iThome 鐵人賽

DAY 8
1
自我挑戰組

資料分析及AI深度學習-簡單基礎實作系列 第 8

DAY8:驗證碼辨識(一)

  • 分享至 

  • xImage
  •  

今天要來跟大家分享驗證碼辨識,因為公司也有用到,我就搭配一個網站,讓大家來嘗試看看,這個網站是"身分證國民身分證領補換資料查詢作業",銀行作業很常會用到,今天就以他的驗證碼來做練習吧!!
網站連結

  • 圖片蒐集

要做圖像辨識,我們第一件事情一定是先蒐集資料,爬取夠多的圖片,才能練出更準確的模型。小弟爬取圖片的部分,是跟我們公司老大學的,主要先擷取網站頁面,再定位驗證碼圖片位置,把驗證碼再截圖下來,再做人工標記。

這邊我們主要用selenium去做操作,要用selenium開啟chrome要先去這邊下載chromedriver.exe。另外我們需要儲存圖片,我這邊使用PIL的Image去做圖片的開啟和儲存。我們這個圖片爬取的執行都是在背景下執行,不開視窗。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PIL import Image

chrome_options = Options()
chrome_options.add_argument("--headless")#不開視窗,在背景下處理
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.ris.gov.tw/apply-idCard/app/idcard/IDCardReissue/main")

先進去網頁整頁截圖。

scroll_width = driver.execute_script('return document.body.parentNode.scrollWidth')
scroll_height = driver.execute_script('return document.body.parentNode.scrollHeight')
driver.set_window_size(scroll_width, scroll_height)
driver.save_screenshot('./cap_pic/fullpage.jpg')

這是我們全屏截圖的圖片。

現在我們要把他圖形驗證的圖片給切下來。
先找到圖形驗證碼的位置,然後抓取他的位置,指定好寬高,之後打開剛剛的全屏截圖,在將我們設定的位置給取出來,轉換成RGB去做儲存。

element = driver.find_element_by_xpath('//*[@id="captchaImage_captcha-refresh"]')
left = element.location['x']
right = element.location['x'] + element.size['width']
top = element.location['y']
bottom = element.location['y'] + element.size['height']
img = Image.open('./cap_pic/fullpage.jpg')
img = img.crop((left, top, right, bottom))
img = img.convert("RGB")
img.save(f'C:/Users/Frank/PycharmProjects/practice/captcha_recognition/pic/{i}.jpg')

我們要抓很多張,這邊假設我們抓100張圖片,下面是完整程式碼:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PIL import Image


for i in range(0,100):
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://www.ris.gov.tw/apply-idCard/app/idcard/IDCardReissue/main")
    ######
    scroll_width = driver.execute_script('return document.body.parentNode.scrollWidth')
    scroll_height = driver.execute_script('return document.body.parentNode.scrollHeight')
    driver.set_window_size(scroll_width, scroll_height)
    driver.save_screenshot('./cap_pic/fullpage.jpg')
    # 網頁中圖片驗證碼的位置
    element = driver.find_element_by_xpath('//*[@id="captchaImage_captcha-refresh"]')
    left = element.location['x']
    right = element.location['x'] + element.size['width']
    top = element.location['y']
    bottom = element.location['y'] + element.size['height']
    img = Image.open('./cap_pic/fullpage.jpg')
    img = img.crop((left, top, right, bottom))
    img = img.convert("RGB")
    img.save(f'./pic/{i}.jpg')
    print(f"已儲存:{i}.jpg")

這樣我們就把圖片抓取下來啦,再來就是手動標籤每張圖片的label了。

因為如果在圖片名稱直接標籤會有個問題,就是萬一label是一樣的,檔名就會重複,那等於一種組合的字只能有一張圖片,所以我會把它標記在CSV裡面。

  • 今日小結

今天就先分享爬取圖片的方法,因為這幾天較忙,沒有太多時間,所以建模部分,我就放在明天的部分再跟各位分享囉!!
我主要用pytorch的框架,會分享一個自己架CNN和使用預訓練模型去訓練的差別。
謝謝各位~明天見囉!!


上一篇
DAY7:Kaggle-San Francisco Crime Classification(下)
下一篇
DAY9: 驗證碼辨識(二)
系列文
資料分析及AI深度學習-簡單基礎實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言