制作一个Node命令行图像识别工具

栏目: Node.js · 发布时间: 5年前

内容简介:从 0 开始制作一个 NodeJS 命令行验证码识别工具。实现如下效果。通常命令行工具入口名字为这样,我们告诉 *nix 系统,JavaScript 文件的解释器应该是

从 0 开始制作一个 NodeJS 命令行验证码识别工具。实现如下效果。

制作一个Node命令行图像识别工具

初始化项目

# 创建 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 实现的 OCR(光学字符识别)工具,用于图像内容识别

  • chalk :让命令行内容样式好看

  • yargs :命令行参数解析器

  • socks5-http-client :SOCKS v5,用于设置代理,在需要拉取某些不能直接访问的资源时使用, request proxy 例子

项目准备

新建 cli.js

通常命令行工具入口名字为 cli.js ,我们新建一个 cli.js 文件,并在开头写上:

#!/usr/bin/env node
复制代码

这样,我们告诉 *nix 系统,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 本地开发

我们如何能够在本地可以使用 rec 命令呢?只需要把本项目 link 即可:

yarn link
复制代码

核心逻辑

主要逻辑在 cli.jsrecognize.js 中。这里有几个注意点:

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(`创建了 ${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;
复制代码

具体可以查看源码仓库: github.com/ringcrl/rec…


以上所述就是小编给大家介绍的《制作一个Node命令行图像识别工具》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

OKR:源于英特尔和谷歌的目标管理利器

OKR:源于英特尔和谷歌的目标管理利器

(美) 保罗R.尼文(Paul R. Niven)、本•拉莫尔特(Ben Lamorte) / 况阳 / 机械工业出版社 / 2017-8-1 / 59.00元

内在动机驱动,而非绩效考核驱动 尤其适用快速扩张和转型期组织 谷歌、英特尔、领英、推特、星佳等硅谷知名企业成功的法宝 OKR(目标与关键结果法)是一套严密的思考框架和持续的纪律要求,旨在确保员工紧密协作,把精力聚焦在能促进组织成长的、可衡量的贡献上。 如何更好地将OKR集成到企业现有的绩效评估体系中? 如何确保OKR由高管团队来领导,而不仅仅是HR、IT或财务等职能部......一起来看看 《OKR:源于英特尔和谷歌的目标管理利器》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试