内容简介:通常命令行工具入口名字为这样,我们告诉 *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.js
和 recognize.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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 原 荐 Qt封装百度人脸识别+图像识别
- 走进AI时代的文档识别技术 之表格图像识别
- 揭秘“图像识别”的工作原理
- REM图像识别市场分析
- 图像识别攻击还没完全解决,语音识别攻击又来了!
- 零基础小白快速打造图像识别模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Programming Patterns
Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95
The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!