✔ 最佳答案
http://3wa.tw/demo/php/ebank.feib.com.tw/
既然你來我家問我了,我做了一個sample XD
2011-11-04 15:51:08 補充:
如果針對圖片的特性去修圖,辨識率可以更高些
趁午休時寫的…主管來了,逃
2011-11-05 00:20:01 補充:
總算回到家了,雖然我寫的很糟…免強只能辨一些,不過我分享一下我的做法:
第一步:
網頁的部分固然是實作 curl 去抓 某商銀的網頁
你來回觀察個幾次就會發現他很天才的每個 text 都用了一次
真不知道哪個設計師寫的東西...軌異的巢狀 forms...
所以你抓下來的畫面,一定要自己取代他的表單~
然後重點在於 curl 不是那麼簡單的 curl paser 他的內容
你該掛的cookie、user_agent、RETURNTRANSFER、FOLLOWLOCATION
這些都必需符合他檢查內容才行
你的curl一定會要使用cookie file 、cookjar的技巧
2011-11-05 00:26:49 補充:
第二步:
針對驗證碼圖片的操作,如何把他作的讓現成的軟體可以ocr的內容
參考:
http://3wa.tw/demo/php/ebank.feib.com.tw/?uid=shadow
像這樣轉換你的圖片
你有很多軟體可以作到,imagemagick、php-gd、... maybe libpng or opencv...
然後寫filter
讓你的圖片可以呈現出只剩下乾淨的白底黑字、或黑底白字
演算法之前的網友有提了,的確就是那些~
你可以看圖片呈現的結果,通常沒有一套解全部的,都得客製才行
2011-11-05 00:30:44 補充:
續第二步:
http://3wa.tw/demo/php/ebank.feib.com.tw/file/1.jpg
http://3wa.tw/demo/php/ebank.feib.com.tw/file/2.jpg
以上面這種的,應該是最好破解的
演算法很簡單,x、y走過一次,拿出rgb
比較 前、後、左、右、左上、右上、左下、右下
然後你可以設一個滿足條件的參數,如果該值大於5、6有白點,自身消除
走個一輪,圖片就會變很乾淨~而數字的部分因為較厚實,不會被破壞
(我再強調一下…我沒研究這些演算法,只是想到大概可能可以作出來的方法,就try了)
效果還不錯XD
2011-11-05 00:33:51 補充:
懶的一張一張點的可以看這個link
http://3wa.tw/demo/php/ebank.feib.com.tw/file/
http://3wa.tw/demo/php/ebank.feib.com.tw/file/1-1.jpg
http://3wa.tw/demo/php/ebank.feib.com.tw/file/1-2.jpg
http://3wa.tw/demo/php/ebank.feib.com.tw/file/1-3.jpg
剛才沒複製到原圖有點可惜,我來解說這張
其實可以相容於剛才那段提的那個演算法,也可以輕鬆破解~
2011-11-05 00:39:00 補充:
如果有更好的解圖軟體當然就更好了,沒有的話,只好自己刻
敝人的專精是寫 php,你看到的解圖是我用php-gd刻的
理想是解出
http://3wa.tw/demo/php/ebank.feib.com.tw/file/1-3.jpg
這樣乾淨的圖片,就可以讓ocr軟體去辨識
你需要找一套textmode only 的ocr 軟體
當然你如果夠閒也可以自己寫...
Sample idea:
http://3wa.tw/produce/ocr/index.php?uid=shadow
這個網址可能會開個30秒以上...
我那時的演算法寫的很差,三、四年前寫的了~你可以參考一下我的想法就是了
2011-11-05 00:43:10 補充:
扯了一堆不外乎就是研究經驗跟研究精神啦...
不過現在比較務實些,有好用的軟體當然要拿來用
我是推薦這個~
tesseract-3.01
他支援文字模式,應該很容易就找的到他的script怎實作
tesseract xxx.jpg 1 就會輸出 1.txt 了
2011-11-05 00:47:53 補充:
所以既然你要用作外部呼叫,當然可以,而且不難
流程大概如下:
1、抓圖並寫檔 (不能隨便用wget抓,你要符合當時你cookie時的資訊才行)
2、對圖片作濾鏡filter (imagemagick or 自己寫 compiler to exe and support text mode)
3、ocr 該圖,tesseract your_pic_file to_text_file
4、迴圈,判斷辨識內容不為空值或純數字才行 ( 而且可能需要處理一下字串)
5、將驗證碼拿回到放到你重建的form
6、仿照他網頁要送出的表單(你可以使用httpfox 去看他表單送啥)
7、最後得到勝利~
2011-11-05 00:50:23 補充:
給你一個小建議:
即然要呼叫外部指令,其實用啥語言都差不多…
重點是剛才提的流程,難度最高的不在於ocr...
而是 7
成功,或是 失敗 XD
Anyway... enjoy 這個過程吧
2011-11-05 02:07:48 補充:
怪了,不能再補充了嗎?
我想要補充 php 寫 filter -> exe 的方法...
2011-11-05 02:10:02 補充:
可以成功編出一個不錯的filter
例
img_filter.exe xxx.jpg new_xxx.jpg
new_xxx.jpg 就會變成白底黑字的圖片
因為我熟php-gd (提好幾次了XD)
所以我可以利用 bacompiler ,把寫好的 php 編成 exe 拿來呼叫使用
2011-11-05 02:12:28 補充:
其實就算如果不編成 exe也行,你本機裝個 php 程式就好(appserv )
就可以跑 php img_filter.php xxx.jpg new_xxx.jpg
一樣可以 作出白底黑字乾淨的圖片
然後再交給專業的 text mode ocr 軟體去跑出文字結果,最後再拿來用
2011-11-05 02:15:21 補充:
另外,某商銀 的認證碼圖片的路徑每次都不一樣,如果你要實作,也得研究一下paser html tags attributes 的方法
眉角好多,還好我會 XD
2011-11-05 17:02:46 補充:
你貼的程式我可以跑呢:)
2011-11-05 17:04:43 補充:
http://3wa.tw/uploads/upload/works.jpg
2011-11-05 17:13:42 補充:
其實我目前作的不是百分百啦…
http://3wa.tw/demo/php/ebank.feib.com.tw/?
我判斷他ocr後的結果,如果不是數字,就重整畫面,重新再抓一次新的圖再辨識一次…
如果系統反反覆覆一直失敗,那麼就如同前人寫的,那不如手動輸入算了xd
其實關鍵會在於破解圖片的演算法跟技巧,那需要客製化,針對他會出現的幾種圖片的特性去處理:)
2011-11-05 17:17:46 補充:
我猜一下你們要的東西好了?
你們需要一個小程式,裡面可以輸入 登入的帳號資料(也許下次打開,也會自動帶入)
然後,不需要輸入驗證碼,直接按下 「登入」
就可以開啟網頁的畫面,直接登入到他的系統?
素不素??