如何制作一個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(光學(xué)字符識別)工具,用于圖像內(nèi)容識別
chalk :讓命令行內(nèi)容樣式好看
yargs :命令行參數(shù)解析器
socks5-http-client :SOCKS v5,用于設(shè)置代理,在需要拉取某些不能直接訪問的資源時使用, request proxy 例子
項目準(zhǔn)備
新建 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
的包,就可以直接通過命令行運(yùn)行了:
reg --url=https://static.chenng.cn/imgs/test_img.png
link 本地開發(fā)
我們?nèi)绾文軌蛟诒镜乜梢允褂?rec
命令呢?只需要把本項目 link 即可:
yarn link
核心邏輯
主要邏輯在 cli.js
和 recognize.js
中。這里有幾個注意點(diǎn):
- request 圖片的時候要設(shè)置
encoding: null
,否則返回的是亂碼 - 初次使用的時候需要下載訓(xùn)練集,需要花點(diǎ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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于MATLAB神經(jīng)網(wǎng)絡(luò)圖像識別的高識別率代碼
- python自動截取需要區(qū)域,進(jìn)行圖像識別的方法
- Node Puppeteer圖像識別實現(xiàn)百度指數(shù)爬蟲的示例
- iOS通過攝像頭圖像識別技術(shù)分享
- python實現(xiàn)識別手寫數(shù)字 python圖像識別算法
- python實現(xiàn)圖像識別功能
- 用Python進(jìn)行簡單圖像識別(驗證碼)
- C#圖像識別 微信跳一跳機(jī)器人
- 微信跳一跳python輔助軟件思路及圖像識別源碼解析
- PHP圖像識別技術(shù)原理與實現(xiàn)
- JAVA演示阿里云圖像識別API,印刷文字識別-營業(yè)執(zhí)照識別
相關(guān)文章
史上無敵詳細(xì)的Node.Js環(huán)境搭建步驟記錄
Node.js是一個事件驅(qū)動I/O服務(wù)端JavaScript環(huán)境,由于其擁有異步非阻塞、環(huán)境搭建簡單、實踐應(yīng)用快等特性,使得其在新一代編程開發(fā)中更為流行,下面這篇文章主要給大家介紹了關(guān)于Node.Js環(huán)境搭建步驟記錄的相關(guān)資料,需要的朋友可以參考下2023-03-03深入理解Commonjs規(guī)范及Node模塊實現(xiàn)
本篇文章主要介紹了深入理解Commonjs規(guī)范及Node模塊實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05可能是全網(wǎng)最詳細(xì)的nodejs卸載和安裝教程
npm的中文意思為"node包管理器",是Node.js平臺的默認(rèn)包管理工具,會隨著Nodejs一起安裝,npm管理對應(yīng)node.js的第三方插件,下面這篇文章主要給大家介紹了關(guān)于nodejs卸載和安裝教程的相關(guān)資料,這可能全網(wǎng)最詳細(xì)的教程了,需要的朋友可以參考下2023-05-05使用nodejs、Python寫的一個簡易HTTP靜態(tài)文件服務(wù)器
這篇文章主要介紹了使用nodejs、Python寫的一個簡易HTTP靜態(tài)文件服務(wù)器,分為nodejs和Python兩個版本,用類似淘寶的CSS、JS文件加載方式處理靜態(tài)文件加載,需要的朋友可以參考下2014-07-07