作者f496328mm (123)
看板Python
標題[心得] 驗證碼影像處理 灰度 去雜點 切割
時間Tue Sep 12 22:58:40 2017
先感謝這篇留言的大大
https://webptt.com/m.aspx?n=bbs/Python/M.1504617371.A.CF2.html
給我一些關鍵字,之後我就靠著 google,做些修正,加入自己的想法,
以下範例是 台鐵驗證碼
原始圖
https://imgur.com/BVqh2hY
灰度&去雜點
https://imgur.com/TdeOWV0
分割成個別數字
https://imgur.com/OqaXK4q
https://imgur.com/e1pFLBd
https://imgur.com/DI2LTJs
https://imgur.com/bBag7rS
https://imgur.com/BEpv1io
如果有興趣,code 我已經上傳 github ,不懂可以再寄信給我
https://github.com/f496328mm/Verification_code_image
另外我想請問,影像處理還有什麼方法?除了我目前做的驗證碼之外
我目前在做 CIFAR-10 我用VGG,準確率都在0.8左右,
不知道要如何衝上0.9,甚至是0.95,
我只有做最基本的---除以255
我目前知道的方法有這些 不過詳細並不清楚
基本影像處理(裁減、模糊、銳化)
影像分割(線、圓圈、斑點)
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.164.234
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1505228328.A.7F4.html
※ 編輯: f496328mm (220.137.164.234), 09/12/2017 23:09:49
2F:→ vi000246: 訓練出來的成功率98% 但遇到相黏的字成功率為0 09/13 01:24
3F:→ vi000246: 應該說 單個字成功率98% 驗證碼成功率是0.98^6 09/13 01:33
黏住不好切 可能要試試別的方法 或是讓DL學習 一次判斷兩個數字這樣
4F:推 HenryLiKing: 還沒點進code裡面去看 09/13 07:17
5F:→ HenryLiKing: 但是請問一下你的分隔字是怎麼做到的呀? 09/13 07:17
https://imgur.com/TdeOWV0
灰度去雜點後
用 x 軸去切 只要是'白色' 就存入x座標
以上就會得到一串數列 舉例來說 11,12,13...27,63,64...95,129,130...
可以看出來 11~27 是一個數字 63~95 是一個數字
這樣就切出數字了
https://imgur.com/rv7z1Wl
像這樣 之後 y 軸的切法也一樣
6F:推 husky0427: 有用到opening和closing嗎 09/13 09:07
沒耶 這是什麼
7F:推 vi000246: 我能判斷出相黏的數字位置 但要怎麼切就沒想法了 09/13 13:39
9F:→ neil987: 至於切字 我有做切線相關的想法 不過還沒實做 09/13 13:41
我沒學過影像相關 想請問
open or close 這些可以幫助影像辨識嗎? 為什麼? 是因為比較好抓邊界嗎?
另外有些人會做'去均值',為什麼這樣會變好??
https://goo.gl/AQKk2N
我在做 CIFAR-10,目前已經將邊框加大,
這樣 filter 跟 pooling 才不會預測邊界的問題,
原圖
https://imgur.com/s4CdlgA
放大
https://imgur.com/LIGLcTs
不過結果沒什麼變@@
--------------------------------------------
對影像做銳化or強化,可能會比較有幫助??上網找是說可以強化邊緣位置,
cv2.dilate(im3, (2, 2), iterations=1)
驗證碼我是這樣做
另外'模糊化'是只去雜點嗎? 在驗證碼,我是先灰度->去雜點->強化
10F:推 HenryLiKing: 喔喔喔喔!我懂了 但是每張圖的字位置不會一樣吧(?) 09/13 18:40
11F:→ HenryLiKing: 這樣會不會有點針對某張圖分析呀 09/13 18:40
12F:→ HenryLiKing: open 是擴張 close 是收縮(我的理解啦xd 09/13 18:41
字的位置不一樣沒關係啊 最後都是切成正方形
就像下圖 不管字在哪 切成這樣後 再用DL去單獨預測就好
https://imgur.com/OqaXK4q
13F:推 billy4195: 先推個 09/14 00:56
14F:推 laladeer: 去雜訊之後那個圖很漂亮,直接dilate到一團,然後用fin 09/14 05:06
15F:→ laladeer: d contour找rect,不用自己數,比較簡單比較快 09/14 05:06
不好意思 我還是初學者 可以請大大說清楚一點嗎? 謝謝
※ 編輯: f496328mm (220.137.164.234), 09/14/2017 10:28:14
16F:推 neil987: findContour就是找輪廓 09/14 13:27
17F:推 neil987: 正確說是平滑化 是用來除雜訊的 但是相對代價是影像會變 09/14 13:37
18F:→ neil987: 模糊 09/14 13:37
19F:→ neil987: 參照 opencv blur 09/14 13:37
20F:推 neil987: 我發現我推文有點跳痛 我平滑化那邊是講模糊化這件事 09/14 13:54
喔喔 了解 用輪廓去辨識 正確性應該會比較高
※ 編輯: f496328mm (220.137.164.234), 09/14/2017 14:55:17
21F:推 Kazimir: 你是直接用vgg這些inference嗎? 09/18 14:04
22F:→ Kazimir: 或許你人工做一些資料 再用VGG transferlearning ? 09/18 14:05