[心得] 驗證碼影像處理 灰度 去雜點 切割

看板Python作者 (123)時間8年前 (2017/09/12 22:58), 8年前編輯推噓12(12010)
留言22則, 7人參與, 最新討論串1/1
先感謝這篇留言的大大 https://www.ptt.cc/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://www.ptt.cc/bbs/Python/M.1505228328.A.7F4.html ※ 編輯: f496328mm (220.137.164.234), 09/12/2017 23:09:49

09/13 01:23, , 1F
我有做了個台鐵的https://goo.gl/Aiz52x
09/13 01:23, 1F

09/13 01:24, , 2F
訓練出來的成功率98% 但遇到相黏的字成功率為0
09/13 01:24, 2F

09/13 01:33, , 3F
應該說 單個字成功率98% 驗證碼成功率是0.98^6
09/13 01:33, 3F
黏住不好切 可能要試試別的方法 或是讓DL學習 一次判斷兩個數字這樣

09/13 07:17, , 4F
還沒點進code裡面去看
09/13 07:17, 4F

09/13 07:17, , 5F
但是請問一下你的分隔字是怎麼做到的呀?
09/13 07:17, 5F
https://imgur.com/TdeOWV0
灰度去雜點後 用 x 軸去切 只要是'白色' 就存入x座標 以上就會得到一串數列 舉例來說 11,12,13...27,63,64...95,129,130... 可以看出來 11~27 是一個數字 63~95 是一個數字 這樣就切出數字了 https://imgur.com/rv7z1Wl
像這樣 之後 y 軸的切法也一樣

09/13 09:07, , 6F
有用到opening和closing嗎
09/13 09:07, 6F
沒耶 這是什麼

09/13 13:39, , 7F
我能判斷出相黏的數字位置 但要怎麼切就沒想法了
09/13 13:39, 7F

09/13 13:40, , 8F
open close 給你參考 http://monkeycoding.com/?p=586
09/13 13:40, 8F

09/13 13:41, , 9F
至於切字 我有做切線相關的想法 不過還沒實做
09/13 13:41, 9F
我沒學過影像相關 想請問 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) 驗證碼我是這樣做 另外'模糊化'是只去雜點嗎? 在驗證碼,我是先灰度->去雜點->強化

09/13 18:40, , 10F
喔喔喔喔!我懂了 但是每張圖的字位置不會一樣吧(?)
09/13 18:40, 10F

09/13 18:40, , 11F
這樣會不會有點針對某張圖分析呀
09/13 18:40, 11F

09/13 18:41, , 12F
open 是擴張 close 是收縮(我的理解啦xd
09/13 18:41, 12F
字的位置不一樣沒關係啊 最後都是切成正方形 就像下圖 不管字在哪 切成這樣後 再用DL去單獨預測就好 https://imgur.com/OqaXK4q

09/14 00:56, , 13F
先推個
09/14 00:56, 13F

09/14 05:06, , 14F
去雜訊之後那個圖很漂亮,直接dilate到一團,然後用fin
09/14 05:06, 14F

09/14 05:06, , 15F
d contour找rect,不用自己數,比較簡單比較快
09/14 05:06, 15F
不好意思 我還是初學者 可以請大大說清楚一點嗎? 謝謝 ※ 編輯: f496328mm (220.137.164.234), 09/14/2017 10:28:14

09/14 13:27, , 16F
findContour就是找輪廓
09/14 13:27, 16F

09/14 13:37, , 17F
正確說是平滑化 是用來除雜訊的 但是相對代價是影像會變
09/14 13:37, 17F

09/14 13:37, , 18F
模糊
09/14 13:37, 18F

09/14 13:37, , 19F
參照 opencv blur
09/14 13:37, 19F

09/14 13:54, , 20F
我發現我推文有點跳痛 我平滑化那邊是講模糊化這件事
09/14 13:54, 20F
喔喔 了解 用輪廓去辨識 正確性應該會比較高 ※ 編輯: f496328mm (220.137.164.234), 09/14/2017 14:55:17

09/18 14:04, , 21F
你是直接用vgg這些inference嗎?
09/18 14:04, 21F

09/18 14:05, , 22F
或許你人工做一些資料 再用VGG transferlearning ?
09/18 14:05, 22F
文章代碼(AID): #1Pj_OeVq (Python)