現在到處都在談 AI,很久以前用來防機器人的 CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) 是不是無用武之地了呢?這次剛好有機會拿實例探討一下。
在某個網站,用本篇封面圖這樣簡單的 CAPTCHA 防止非人為的訪問,但這個網站又沒有提供 API,偏偏以我個人了解,這個 API 頗有節省人力成本的價值。因此,研究了一下市面上幾個 CAPTCHA solver,竟然沒有簡單又免費的?有的是複雜到在外開代理伺服器,或大部份甚至連試用的機會也不給,雖然並不貴,也許一美元可以解數百甚至上千次,但總是不踏實。
其實主流的 CAPTCHA 都進化到 reCAPTCHA 了,就是把一張模糊的照片割成幾等分,請你把汽車勾起來的那種,此外還有很多變化,先不在這討論。簡單的 CAPTCHA 用一種古老的跨平台光學辨識工具 Tesseract
就能解決了,基本的用法非常簡單:
如此就能把 image.png 辨識的結果寫到 out.txt,大概八九不離十。因為圖有時候上下左右留白的關係,造成不必要的空行,需要額外的參數:
PSM 是 Page segmentation modes 的意思,7 這個神秘數字的出處可以用 --help-psm 參數查到,指定後就會只有一行內容(多餘的空白行我們後面解決)。有時候我們都確定只會有數字 1 了,它辦識成英文字母大寫 I 或小寫 l 怎麼辦?就要給正確的提示:
接著是多餘的空白行,甚至於有一些「不可列印控制字元」,如 Form Feed 等等,這些在 Linux 的話可以:
其他的作業系統一定也有對應的做法,這樣我們就得到免付費又好用的 CAPTCHA solver 了。