国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

如何制作一個Node命令行圖像識別工具

2019-11-19 12:21:14
字體:
來源:轉載
供稿:網(wǎng)友

從 0 開始制作一個 NodeJS 命令行驗證碼識別工具。實現(xiàn)如下效果。

 

初始化項目

# 創(chuàng)建 recognition 項目mkdir recognitioncd recognitionnpm 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,用于設置代理,在需要拉取某些不能直接訪問的資源時使用, request proxy 例子

項目準備

新建 cli.js

通常命令行工具入口名字為 cli.js ,我們新建一個 cli.js 文件,并在開頭寫上:

#!/usr/bin/env node

這樣,我們告訴 *nix 系統(tǒng),JavaScript 文件的解釋器應該是 /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.jsrecognize.js 中。這里有幾個注意點:

  • request 圖片的時候要設置 encoding: null,否則返回的是亂碼
  • 初次使用的時候需要下載訓練集,需要花點時間
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(`   識別成功!   識別結果為:${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# 登錄到 npmnpm adduser# 發(fā)包npm publish --access public# 全局安裝npm install -g @chenng/recognition

 以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 金塔县| 梁山县| 宁海县| 桃江县| 禄丰县| 蒙山县| 河南省| 加查县| 日喀则市| 绵阳市| 景谷| 道孚县| 宁强县| 万源市| 衡阳市| 濮阳市| 罗源县| 宁陕县| 赤峰市| 屏山县| 平谷区| 丹阳市| 湟源县| 宁夏| 武城县| 都兰县| 文安县| 廉江市| 锦屏县| 五原县| 南充市| 定远县| 泰来县| 类乌齐县| 桂阳县| 祁门县| 会同县| 兰考县| 中阳县| 广河县| 冷水江市|