Node實現驗證碼識別

copy了別人代碼的你前端

圖片描述


最近突然對圖像識別有了興趣,做爲一個前端,固然是想用Javascript來深刻研究。node

先從簡單的入手,識別圖片驗證碼。圖片驗證碼對web開發來講一點也不陌生,它是對服務器保護的一道屏障,避免了諸如暴力破解密碼之類的攻擊。可是,今天就是要去突破這道屏障。git

如今開源的圖像識別技術有不少,我在GitHub上找到了一個用Javascript實現的,相對受歡迎的框架Tesseract.jsweb

我先準備好一個簡單的驗證碼npm

clipboard.png

這個是數字字母的組合,接下來咱們就用tesseract.js來對這個驗證碼進行解析。瀏覽器

安裝
npm install --save tesseract.js

使用這個命令進行安裝,--save表明只安裝到當前項目中。服務器

使用

首先要在代碼中進行引入app

var tesseract = require('tesseract.js');

而後使用tesseract的recognize方法對圖片進行解析。框架

tesseract.recognize(myImage,options)
.then(function(result){
    console.log(result)
});

其中,myImage能夠是圖片file對象,或者圖片的存放地址的字符串等,咱們這裏先用存放地址的字符串。ui

options則是對解析過程的個性化設置,能夠設置語言等其餘屬性,較爲重要的有lang屬性,用來設置語言類型,英文爲eng(默認),數字是Math.

運行效果

下面咱們來看一下實際的運行效果。

文件系統

clipboard.png

app.js

clipboard.png

使用node命令運行

clipboard.png

能夠看出,輸出的結果是LPGU,驗證碼中的字母數字組合是LP6U,略有誤差,將6解析成了G。

因此,自動識別雖好,可是準確率仍是須要提升。

Tesseract.js訓練

tesseract.js是能夠經過訓練來提升準確率的,咱們看一下第一次運行結束後發生了什麼變化。

運行結束以後,文件系統中生成了一個eng.traineddata文件

clipboard.png

這個文件,就是tesseract的訓練文件,下次再分析的時候,會先從這個訓練文件中尋找是否有匹配的結果。經過這種方式,造成它本身的大腦。

固然,我認爲也能夠手動的添加相同格式的文件進去,手動的擴充這個圖像分析系統的智能性。

附錄一

recognize第一個參數所容許的類型:

由於tesseract.js既能夠運行node服務器中,也能夠運行再瀏覽器中,咱們這裏只提在服務器中所容許的類型

  • 文件地址(string)

  • 包含PNGJPEG類型的Buffer對象

  • imageData對象

附錄二

瀏覽器中引入方式

<script src='https://cdn.rawgit.com/naptha/tesseract.js/1.0.10/dist/tesseract.js'></script>

使用方式同node方法

圖片描述

相關文章
相關標籤/搜索