博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
制作一个Node命令行图像识别工具
阅读量:5938 次
发布时间:2019-06-19

本文共 2283 字,大约阅读时间需要 7 分钟。

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

初始化项目

# 创建 recognition 项目mkdir recognitioncd recognitionnpm init -y# 安装主依赖yarn add images tesseract.js# 安装工具依赖yarn add chalk yargs# 可选依赖yarn add socks5-http-client复制代码

依赖说明

  • :Node.js 轻量级跨平台图像编码库,用于处理下载下来的图片

  • :纯 JS 实现的 OCR(光学字符识别)工具,用于图像内容识别

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

  • :命令行参数解析器

  • :SOCKS v5,用于设置代理,在需要拉取某些不能直接访问的资源时使用,

项目准备

新建 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 中。这里有几个注意点:

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

具体可以查看源码仓库:

发布上线

# 新建代码仓库,git push# 登录到 npmnpm adduser# 发包npm publish --access public# 全局安装npm install -g @chenng/recognition复制代码

博客引流

本文首发于:

转载地址:http://nuttx.baihongyu.com/

你可能感兴趣的文章
开源 CMS系统 / SNS系统 / BBS系统
查看>>
LeetCode--007--整数反转(java)
查看>>
K - Ignatius and the Princess IV
查看>>
Latex学习(标题,子标题)
查看>>
matlab练习程序(最大流/最小割)
查看>>
CentOS安装中文支持
查看>>
Java内部类详解
查看>>
(document).height()与$(window).height()
查看>>
Spring Boot|监控-Actuator
查看>>
java读取txt字符串挨个写入int数组
查看>>
RabbitMQ广播:fanout模式
查看>>
部署Java项目到阿里云服务器(Ubuntu16.04 64位)
查看>>
货币转换常用方法
查看>>
Manthan, Codefest 17
查看>>
TOJ4505: KOSARE
查看>>
csa Round #73 (Div. 2 only)
查看>>
Extjs4.2如何实现鼠标点击统计图时弹出窗口来展示统计的具体列表信息
查看>>
KeepAlive随笔
查看>>
你一定要知道的关于Linux文件目录操作的12个常用命令
查看>>
集合文件操作
查看>>