如何制作一個(gè)Node命令行圖像識(shí)別工具
從 0 開(kāi)始制作一個(gè) NodeJS 命令行驗(yàn)證碼識(shí)別工具。實(shí)現(xiàn)如下效果。
初始化項(xiàng)目
# 創(chuàng)建 recognition 項(xiàng)目 mkdir recognition cd recognition npm init -y # 安裝主依賴(lài) yarn add images tesseract.js # 安裝工具依賴(lài) yarn add chalk yargs # 可選依賴(lài) yarn add socks5-http-client
依賴(lài)說(shuō)明
images :Node.js 輕量級(jí)跨平臺(tái)圖像編碼庫(kù),用于處理下載下來(lái)的圖片
tesseract.js :純 JS 實(shí)現(xiàn)的 OCR(光學(xué)字符識(shí)別)工具,用于圖像內(nèi)容識(shí)別
chalk :讓命令行內(nèi)容樣式好看
yargs :命令行參數(shù)解析器
socks5-http-client :SOCKS v5,用于設(shè)置代理,在需要拉取某些不能直接訪問(wèn)的資源時(shí)使用, request proxy 例子
項(xiàng)目準(zhǔn)備
新建 cli.js
通常命令行工具入口名字為 cli.js ,我們新建一個(gè) cli.js 文件,并在開(kāi)頭寫(xiě)上:
#!/usr/bin/env node
這樣,我們告訴 *nix 系統(tǒng),JavaScript 文件的解釋器應(yīng)該是 /usr/bin/env node ,它查找本地安裝的 node 。
配置 bin
// package.json
{
"bin": {
"reg": "./cli.js"
}
}
這樣配置完成后,別人 npm install -g @chenng/recognition 的包,就可以直接通過(guò)命令行運(yùn)行了:
reg --url=https://static.chenng.cn/imgs/test_img.png
link 本地開(kāi)發(fā)
我們?nèi)绾文軌蛟诒镜乜梢允褂?rec 命令呢?只需要把本項(xiàng)目 link 即可:
yarn link
核心邏輯
主要邏輯在 cli.js 和 recognize.js 中。這里有幾個(gè)注意點(diǎn):
- request 圖片的時(shí)候要設(shè)置
encoding: null,否則返回的是亂碼 - 初次使用的時(shí)候需要下載訓(xùn)練集,需要花點(diǎn)時(shí)間
const Tesseract = require('tesseract.js');
const images = require('images');
const requset = require('request');
const fs = require('fs');
const { promisify } = require('util');
const chalk = require('chalk');
const writeFile = promisify(fs.writeFile);
const rp = promisify(requset);
class Recognize {
constructor(url) {
Recognize.downloadDir = `${__dirname}/dist/`;
Recognize.downloadFile = `${__dirname}/dist/temp.png`;
this.url = url;
this.start();
}
async start() {
const data = await this.downloadImg();
await writeFile(Recognize.downloadFile, data);
this.recognize();
const result = await Tesseract.recognize(Recognize.downloadFile, {
lang: 'eng',
tessedit_char_blacklist: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
});
console.log(`
識(shí)別成功!
識(shí)別結(jié)果為:${chalk.green(result.text)}
`);
}
async downloadImg() {
if (!fs.existsSync(Recognize.downloadDir)) {
fs.mkdirSync(Recognize.downloadDir);
console.log(`創(chuàng)建了 ${Recognize.downloadDir} 文件夾`);
}
const res = await rp({
url: this.url,
method: 'GET',
encoding: null,
});
return res.body;
}
recognize() {
// 放大圖片,并覆蓋源文件
images(Recognize.downloadFile)
.size(400)
.save(Recognize.downloadFile);
}
}
module.exports = Recognize;
具體可以查看源碼倉(cāng)庫(kù): https://github.com/ringcrl/recognition
發(fā)布上線
# 新建代碼倉(cāng)庫(kù),git push # 登錄到 npm npm adduser # 發(fā)包 npm publish --access public # 全局安裝 npm install -g @chenng/recognition
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于MATLAB神經(jīng)網(wǎng)絡(luò)圖像識(shí)別的高識(shí)別率代碼
- python自動(dòng)截取需要區(qū)域,進(jìn)行圖像識(shí)別的方法
- Node Puppeteer圖像識(shí)別實(shí)現(xiàn)百度指數(shù)爬蟲(chóng)的示例
- iOS通過(guò)攝像頭圖像識(shí)別技術(shù)分享
- python實(shí)現(xiàn)識(shí)別手寫(xiě)數(shù)字 python圖像識(shí)別算法
- python實(shí)現(xiàn)圖像識(shí)別功能
- 用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)
- C#圖像識(shí)別 微信跳一跳機(jī)器人
- 微信跳一跳python輔助軟件思路及圖像識(shí)別源碼解析
- PHP圖像識(shí)別技術(shù)原理與實(shí)現(xiàn)
- JAVA演示阿里云圖像識(shí)別API,印刷文字識(shí)別-營(yíng)業(yè)執(zhí)照識(shí)別
相關(guān)文章
使用 Node.js 對(duì)文本內(nèi)容分詞和關(guān)鍵詞抽取
這篇文章主要介紹了使用 Node.js 對(duì)文本內(nèi)容分詞和關(guān)鍵詞抽取,需要的朋友可以參考下2017-05-05
nodejs語(yǔ)言實(shí)現(xiàn)驗(yàn)證碼生成功能的示例代碼
這篇文章主要介紹了nodejs語(yǔ)言實(shí)現(xiàn)驗(yàn)證碼生成功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查
這篇文章主要介紹了詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Node.js+Socket.io實(shí)現(xiàn)雙人在線五子棋對(duì)戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了Node.js+Socket.io實(shí)現(xiàn)雙人在線五子棋對(duì)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
NodeJs中express框架的send()方法簡(jiǎn)介
這篇文章主要介紹了NodeJs中express框架的send()方法簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Node.JS中事件輪詢(xún)(Event Loop)的解析
對(duì)NodeJs的事情輪詢(xún)機(jī)造一孔之見(jiàn)。查閱了些許材料后,總算掀開(kāi)了其神奇的里紗。下面這篇文章主要介紹了Node.JS中事件輪詢(xún)(Event Loop)的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02
nw.js實(shí)現(xiàn)類(lèi)似微信的聊天軟件
本文給大家介紹的是使用nw.js實(shí)現(xiàn)類(lèi)似微信的聊天軟件,還處于測(cè)試階段,功能非常少,大家一起來(lái)添磚加瓦吧。2015-03-03

