成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

node識(shí)別驗(yàn)證碼

levy9527 / 1879人閱讀

摘要:驗(yàn)證碼的識(shí)別成功率跟圖片質(zhì)量關(guān)系密切,一般拿到后的驗(yàn)證碼都得經(jīng)過灰度化,二值化,去噪,利用就可以很方便的做到。

了解驗(yàn)證碼 什么是驗(yàn)證碼?
所謂驗(yàn)證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識(shí)別其中的驗(yàn)證碼信息,輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能,通俗說就是一種區(qū)分用戶是計(jì)算機(jī)和人的公共全自動(dòng)程序
驗(yàn)證碼的作用
可以防止惡意破解密碼、刷票、論壇灌水,有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試,所使用驗(yàn)證碼技術(shù)是現(xiàn)在很多網(wǎng)站通行的方式(比如招商銀行的網(wǎng)上個(gè)人銀行,百度社區(qū))。
沒有驗(yàn)證碼登陸,黑客會(huì)更加容易破解你的賬號(hào),通過組合碼刷機(jī)等黑客技術(shù)來破取你的密碼,有了驗(yàn)證碼相當(dāng)于加了一層很厚的屏障,安全系數(shù)很高。
常見的驗(yàn)證碼

隨機(jī)的四位數(shù)字的組合,這是最原始的驗(yàn)證碼

隨機(jī)數(shù)字圖片驗(yàn)證碼,圖片上的字符比較中規(guī)中矩,驗(yàn)證作用比上一個(gè)好

隨機(jī)數(shù)字+隨機(jī)大小寫英文字母圖片驗(yàn)證碼,每刷新一次,每個(gè)字符還會(huì)變位置

隨機(jī)數(shù)字+隨機(jī)大小寫英文字母+隨機(jī)干擾像素+隨機(jī)位置圖片驗(yàn)證碼,比上一個(gè)驗(yàn)證作用更好,不易識(shí)別

如何識(shí)別驗(yàn)證碼的內(nèi)容?

所需要的工具:

Tesseract
識(shí)別工具,目前由Google維護(hù),支持中文,默認(rèn)的識(shí)別率很低,特別是中文,但是可以自己提供樣本,訓(xùn)練提高識(shí)別率。

安裝:

brew install tesseract --all-languages // MAC安裝
npm install node-tesseract // // windows安裝

在DOS窗口輸入:tesseract,顯示如圖則證明安裝成功

命令行使用方法:

tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile…]

imagename為目標(biāo)圖片文件名,需加格式后綴;outputbase是轉(zhuǎn)換結(jié)果文件名;lang是語言名稱(在Tesseract-OCR中tessdata文件夾可看到以eng開頭的語言文件eng.traineddata),如不標(biāo)-l eng則默認(rèn)為eng;pagesegmode則是生成結(jié)果顯示相關(guān)配置。

例如:

tesseract 1.jpg result -psm 7 

tesseract code.jpg result -l chi_sim -psm 7 //  -l chi_sim 表示用簡(jiǎn)體中文字庫, -psm 7 表示告訴tesseract code.jpg圖片是一行文本,這個(gè)參數(shù)可以減少識(shí)別錯(cuò)誤率,默認(rèn)為3

node使用方法(官方示例):

var tesseract = require("node-tesseract");

// Recognize text of any language in any format
tesseract.process(__dirname + "/path/to/image.jpg",function(err, text) {
    if(err) {
        console.error(err);
    } else {
        console.log(text);
    }
});

// Recognize German text in a single uniform block of text and set the binary path

var options = {
    l: "deu",
    psm: 6,
    binary: "/usr/local/bin/tesseract"
};

tesseract.process(__dirname + "/path/to/image.jpg", options, function(err, text) {
    if(err) {
        console.error(err);
    } else {
        console.log(text);
    }
});

運(yùn)行結(jié)果:

嘗試調(diào)用此方法后會(huì)在本地文件生成一個(gè)對(duì)應(yīng)的txt文件,內(nèi)容即為識(shí)別內(nèi)容??梢钥闯鰜?,對(duì)于簡(jiǎn)單清楚的驗(yàn)證碼識(shí)別還比較準(zhǔn)確,但是對(duì)于帶有噪點(diǎn)或者其他影響的識(shí)別效果的就很坑,完全識(shí)別不出來,所以我們需要對(duì)圖片進(jìn)行一些處理,比如提高圖片的閾值,比如設(shè)置為55%,可以用ps等軟件實(shí)現(xiàn),但是node中已經(jīng)有相應(yīng)的包graphicsmagick,可以對(duì)圖像進(jìn)行這種處理,比較方便。

graphicsmagick
非常實(shí)用的圖像處理工具,一般后臺(tái)想要處理圖片就需要下載graphicsmagick,可以方便實(shí)現(xiàn)比如:制作縮略圖、頭像剪切等功能。
驗(yàn)證碼的識(shí)別成功率跟圖片質(zhì)量關(guān)系密切,一般拿到后的驗(yàn)證碼都得經(jīng)過灰度化,二值化,去噪,利用graphicsmagick就可以很方便的做到。

安裝:

brew install imagemagick
brew install graphicsmagick // Mac安裝

npm install gm // windows安裝

命令行使用方法:

gm convert 1.jpg -thumbnail "100x100!" output_1.jpg  // 非等比縮圖,生成的圖片大小是:100x100

gm convert 1.jpg 1.pdf  // 格式轉(zhuǎn)換

node使用方法(官方示例):

var fs = require("fs")
  , gm = require("gm");

// resize and remove EXIF profile data
gm("/path/to/my/img.jpg")
.resize(240, 240)
.noProfile()
.write("/path/to/resize.png", function (err) {
  if (!err) console.log("done");
});

// some files would not be resized appropriately
// http://stackoverflow.com/questions/5870466/imagemagick-incorrect-dimensions
// you have two options:
// use the "!" flag to ignore aspect ratio
gm("/path/to/my/img.jpg")
.resize(240, 240, "!")
.write("/path/to/resize.png", function (err) {
  if (!err) console.log("done");
});

運(yùn)行結(jié)果:

可以看出,gm成功將這個(gè)圖片進(jìn)行裁剪或者轉(zhuǎn)換為pdf格式,使用很方便。

使用node識(shí)別驗(yàn)證碼示例

新建項(xiàng)目目錄

在合適的磁盤目錄下創(chuàng)建項(xiàng)目目錄 node-orc

初始化項(xiàng)目

1.進(jìn)入node-orc文件夾下
2.執(zhí)行npm init,初始化package.json文件

安裝依賴包

1.npm install gm
2.npm install node-tesseract

新建index.js,寫入代碼如下:

var fs        = require("fs");
var tesseract = require("node-tesseract");
var gm        = require("gm");

/**
 * 對(duì)圖片進(jìn)行閾值處理(默認(rèn)55)
 */
function disposeImg (imgPath, newPath, thresholdValue) {
  return new Promise((resolve, reject) => {
    gm(imgPath)
      .threshold(thresholdValue || 55)
      .write(newPath, (err)=> {
        if (err) return reject(err);
        resolve(newPath);
      });
  });
}

/**
 * 識(shí)別閾值化后圖片內(nèi)容
 */
function recognizeImg (imgPath, options) {
  options = Object.assign({psm: 8}, options);
  // options = Object.assign({l: "chi_sim"}, options); // 識(shí)別中文

  return new Promise((resolve, reject) => {
    tesseract
      .process(imgPath, options, (err, text) => {
        if (err) return reject(err);
        resolve(text.replace(/[
s]/gm, "")); // 去掉識(shí)別結(jié)果中的換行回車空格
      });
  });
}

async function recognize(imgPath, newPath, thresholdValue) {
  try {
    const newImgPath = await disposeImg(imgPath, newPath, thresholdValue)
    const result = await recognizeImg(newImgPath)
    console.log(`識(shí)別結(jié)果:${result}`)
  } catch (err) {
    console.error(`識(shí)別失敗:${err}`);
  }
}

recognize("1.jpg", "test_1.jpg")

運(yùn)行代碼

進(jìn)入當(dāng)前目錄,運(yùn)行node index即可直接打印出當(dāng)前識(shí)別的結(jié)果

識(shí)別結(jié)果

可以看到比之前的識(shí)別率高很多,但是還是細(xì)節(jié)方便識(shí)別不夠好,不夠完善,感興趣的可以看看tesseract訓(xùn)練,訓(xùn)練一個(gè)自己的識(shí)別庫,精確度會(huì)提高很多

注意:
windows直接運(yùn)行代碼會(huì)提示Could not execute GraphicsMagick/ImageMagick: gm "convert",這是因?yàn)閃indows系統(tǒng)找不到gm中的convert命令,所以需要我們安裝個(gè)客戶端工具GraphicsMagick(下載的時(shí)候要下載Q8版本的),然后,因?yàn)閏onvert這個(gè)命令執(zhí)行需要特定的環(huán)境,所以我們需要在電腦的環(huán)境變量中加gm.exe的所在目錄

關(guān)于中文的識(shí)別
目前這個(gè)庫只能識(shí)別英文,中文直接是亂碼,如何識(shí)別中文呢?
我們可以下載一個(gè)中文庫,下載地址如下:https://pan.baidu.com/s/13DCN...,并下載Tesseract-OCR安裝包,tesseract安裝目錄的tessdata文件是存放語言庫的,可以將解壓后的文件放入這個(gè)文件夾下,字庫文件擴(kuò)展名為.raineddata 簡(jiǎn)體中文字庫文件名為 chi_sim.traineddata,使用的時(shí)候帶上語言類型即可,例如:tesseract 7.jpg result -l chi_sim

中文識(shí)別效果:

最后總結(jié)

對(duì)于簡(jiǎn)單的驗(yàn)證碼直接用Tesseract識(shí)別

對(duì)于一些有噪點(diǎn)或者其他影響的驗(yàn)證碼可以通過graphicsmagick進(jìn)行圖像處理,再用Tesseract識(shí)別

關(guān)于中文或者其他語言的識(shí)別需要多帶帶下載相關(guān)的語言庫并放到tessData文件夾下,并在Tesseract識(shí)別代碼中配置一下

整個(gè)識(shí)別效果還是不夠完善,想要識(shí)別結(jié)果的準(zhǔn)確度更高,可以對(duì)代碼進(jìn)行Tesseract訓(xùn)練,因?yàn)檫@個(gè)稍微復(fù)雜點(diǎn),之后會(huì)繼續(xù)了解,希望大家多多交流指正!

相關(guān)代碼
本文相關(guān)代碼和圖片github地址:https://github.com/fighting12...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107888.html

相關(guān)文章

  • Node實(shí)現(xiàn)驗(yàn)證識(shí)別

    摘要:了別人代碼的你最近忽然對(duì)圖像識(shí)別有了興趣,作為一個(gè)前端,當(dāng)然是想用來深入研究。先從簡(jiǎn)單的入手,識(shí)別圖片驗(yàn)證碼。圖片驗(yàn)證碼對(duì)開發(fā)來說一點(diǎn)也不陌生,它是對(duì)服務(wù)器保護(hù)的一道屏障,避免了諸如暴力破解密碼之類的攻擊。 copy了別人代碼的你 showImg(https://segmentfault.com/img/bVN5FL?w=396&h=210); 最近忽然對(duì)圖像識(shí)別有了興趣,作為一個(gè)前...

    luckyw 評(píng)論0 收藏0
  • OCR識(shí)別驗(yàn)證

    摘要:識(shí)別網(wǎng)站驗(yàn)證碼詳見維基百科或者百度百科識(shí)別的驗(yàn)證碼原理采集一批驗(yàn)證碼,根據(jù)圖片特點(diǎn)進(jìn)行初步處理二值化灰度化濾波降噪等處理然后分割圖片,旋轉(zhuǎn)圖片,模板選取,訓(xùn)練算法,讓它更準(zhǔn)確。 最近在爬某網(wǎng)站,老是蹦出來驗(yàn)證碼,就想著找個(gè)OCR破了這個(gè)驗(yàn)證碼,然后就開始了OCR探索之旅。 首先簡(jiǎn)單說一下什么是OCR OCR是(Optical Character Recognition,光學(xué)字符識(shí)別)的...

    Yangyang 評(píng)論0 收藏0
  • 一只node爬蟲的升級(jí)打怪之路

    摘要:我是一個(gè)知乎輕微重度用戶,之前寫了一只爬蟲幫我爬取并分析它的數(shù)據(jù),我感覺這個(gè)過程還是挺有意思,因?yàn)檫@是一個(gè)不斷給自己創(chuàng)造問題又去解決問題的過程。所以這只爬蟲還有登陸知乎搜索題目的功能。 我一直覺得,爬蟲是許多web開發(fā)人員難以回避的點(diǎn)。我們也應(yīng)該或多或少的去接觸這方面,因?yàn)榭梢詮呐老x中學(xué)習(xí)到web開發(fā)中應(yīng)當(dāng)掌握的一些基本知識(shí)。而且,它還很有趣。 我是一個(gè)知乎輕微重度用戶,之前寫了一只爬...

    shiweifu 評(píng)論0 收藏0
  • 爬蟲攻防實(shí)踐

    摘要:之前在學(xué)校曾經(jīng)用過的方法做過一些爬蟲腳本來玩,從正式轉(zhuǎn)前端之后,出于興趣,我對(duì)爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐。爬蟲腳本通常會(huì)很頻繁的進(jìn)行網(wǎng)絡(luò)請(qǐng)求,比如要爬取豆瓣排行榜的電影,就會(huì)連續(xù)發(fā)送個(gè)網(wǎng)絡(luò)請(qǐng)求。 之前在學(xué)校曾經(jīng)用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉(zhuǎn)前端之后,出于興趣,我對(duì)爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐...

    wanglu1209 評(píng)論0 收藏0
  • 爬蟲攻防實(shí)踐

    摘要:之前在學(xué)校曾經(jīng)用過的方法做過一些爬蟲腳本來玩,從正式轉(zhuǎn)前端之后,出于興趣,我對(duì)爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐。爬蟲腳本通常會(huì)很頻繁的進(jìn)行網(wǎng)絡(luò)請(qǐng)求,比如要爬取豆瓣排行榜的電影,就會(huì)連續(xù)發(fā)送個(gè)網(wǎng)絡(luò)請(qǐng)求。 之前在學(xué)校曾經(jīng)用過request+xpath的方法做過一些爬蟲腳本來玩,從ios正式轉(zhuǎn)前端之后,出于興趣,我對(duì)爬蟲和反爬蟲又做了一些了解,并且做了一些爬蟲攻防的實(shí)踐...

    xiangzhihong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<