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

栏目: 编程工具 · 发布时间: 5年前

内容简介:通常命令行工具入口名字为这样,我们告诉 *nix 系统,JavaScript 文件的解释器应该是这样配置完成后,别人

初始化项目

# 创建 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;

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

发布上线

# 新建代码仓库,git push

# 登录到 npm
npm adduser

# 发包
npm publish --access public

# 全局安装
npm install -g @chenng/recognition

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)

经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)

曼昆 (N.Gregory Mankiw) / 梁小民、梁砾 / 北京大学出版社 / 2015-5-1 / 128

《经济学原理(第7版):微观经济学分册+宏观经济学分册》是目前国内市场上最受欢迎的引进版经济学教材之一,其最大特点是它的“学生导向”,它更多地强调经济学原理的应用和政策分析,而非经济学模型。第7版在延续该书一贯风格的同时,对第6版作了全面修订和改进。大幅更新了“新闻摘录”“案例研究”等专栏,拓展了章后习题。一起来看看 《经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具