如何制作一個Node命令行圖像識別工具
從 0 開始制作一個 NodeJS 命令行驗證碼識別工具。實現(xiàn)如下效果。
初始化項目
# 創(chuàng)建 recognition 項目 mkdir recognition cd recognition npm init -y # 安裝主依賴 yarn add images tesseract.js # 安裝工具依賴 yarn add chalk yargs # 可選依賴 yarn add socks5-http-client
依賴說明
images :Node.js 輕量級跨平臺圖像編碼庫,用于處理下載下來的圖片
tesseract.js :純 JS 實現(xiàn)的 OCR(光學字符識別)工具,用于圖像內(nèi)容識別
chalk :讓命令行內(nèi)容樣式好看
yargs :命令行參數(shù)解析器
socks5-http-client :SOCKS v5,用于設(shè)置代理,在需要拉取某些不能直接訪問的資源時使用, request proxy 例子
項目準備
新建 cli.js
通常命令行工具入口名字為 cli.js ,我們新建一個 cli.js 文件,并在開頭寫上:
#!/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 的包,就可以直接通過命令行運行了:
reg --url=https://static.chenng.cn/imgs/test_img.png
link 本地開發(fā)
我們?nèi)绾文軌蛟诒镜乜梢允褂?rec 命令呢?只需要把本項目 link 即可:
yarn link
核心邏輯
主要邏輯在 cli.js 和 recognize.js 中。這里有幾個注意點:
- request 圖片的時候要設(shè)置
encoding: null,否則返回的是亂碼 - 初次使用的時候需要下載訓(xùn)練集,需要花點時間
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(`
識別成功!
識別結(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;
具體可以查看源碼倉庫: https://github.com/ringcrl/recognition
發(fā)布上線
# 新建代碼倉庫,git push # 登錄到 npm npm adduser # 發(fā)包 npm publish --access public # 全局安裝 npm install -g @chenng/recognition
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 基于MATLAB神經(jīng)網(wǎng)絡(luò)圖像識別的高識別率代碼
- python自動截取需要區(qū)域,進行圖像識別的方法
- Node Puppeteer圖像識別實現(xiàn)百度指數(shù)爬蟲的示例
- iOS通過攝像頭圖像識別技術(shù)分享
- python實現(xiàn)識別手寫數(shù)字 python圖像識別算法
- python實現(xiàn)圖像識別功能
- 用Python進行簡單圖像識別(驗證碼)
- C#圖像識別 微信跳一跳機器人
- 微信跳一跳python輔助軟件思路及圖像識別源碼解析
- PHP圖像識別技術(shù)原理與實現(xiàn)
- JAVA演示阿里云圖像識別API,印刷文字識別-營業(yè)執(zhí)照識別
相關(guān)文章
使用 Node.js 對文本內(nèi)容分詞和關(guān)鍵詞抽取
這篇文章主要介紹了使用 Node.js 對文本內(nèi)容分詞和關(guān)鍵詞抽取,需要的朋友可以參考下2017-05-05
Node.js+Socket.io實現(xiàn)雙人在線五子棋對戰(zhàn)
這篇文章主要為大家詳細介紹了Node.js+Socket.io實現(xiàn)雙人在線五子棋對戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

