本文概述
- 1.在你的系统中安装Tesseract
- 2.安装Tesseract Node.js包装器
- 3.处理图像
- 已知的问题
在本文中, 你将学习如何在Tesseract的帮助下使用Node.js中的Javascript从图像中提取文本。
1.在你的系统中安装Tesseract 如本文所述, 为了使用光学字符识别API, 我们将使用Tesseract。 Tesseract是一个开放源代码的光学字符识别(OCR)引擎, 可以通过Apache 2.0许可获得。它可以直接通过API使用, 以从图像中提取打字, 手写或打印的文本。它支持多种语言(需要安装)。 Tesseract支持多种输出格式:纯文本, hocr(html)和pdf。
根据你使用的操作系统, Tesseract在系统中的安装过程会有所不同:
视窗
Windows中Tesseract的安装非常简单, 我们建议你使用Wiki中提到的非官方安装程序(tesseract-ocr-setup- < version> .exe)。你可以在tesseract的官方网站上获得所有可用设置的列表(始终下载最新版本)。
安装过程非常简单, 只需遵循向导即可。但是, 我们建议你直接在安装程序中安装tesseract所需的所有语言(仅安装所需的语言, 否则下载过程将花费很长时间), 然后在PATH中注册tesseract:
文章图片
等待安装完成, 你就可以开始了。你可以在新的命令提示符窗口tesseract -v(应该输出已安装的版本)中执行测试, 以确定它是否已正确安装。
的Ubuntu
使用以下命令安装Tesseract:
sudo apt-get install tesseract-ocr
然后, 安装你需要识别的语言(例如, 需要-deu, -fra, -eng和-spa english):
sudo apt-get install tesseract-ocr-eng
然后tesseract应该在任何终端上都可用, 因此以后我们的PHP脚本即可使用。
苹果系统
如果你使用的是Mac OS X, 则可以使用MacPorts或Homebrew安装tesseract:
MacPorts 要安装Tesseract, 请运行以下命令:
sudo port install tesseract
要安装任何语言数据, 请执行:
sudo port install tesseract-<
langcode>
可在MacPorts tesseract页面上找到可用语言代码的完整列表。
家酿 要安装Tesseract, 请运行以下命令:
brew install tesseract
如果你需要更多信息或未列出你的操作系统, 请在此处参考Github中Tesseract信息库的Installation Wiki。
2.安装Tesseract Node.js包装器 为了使用Node.js处理Tesseract, 我们将使用@desmondmorris编写的最著名的Tesseract包装器。 node-tesseract模块是用于node.js的Tesseract OCR软件包的非常简单的包装, 它需要Tesseract 3.01或更高版本。
要将Node-tesseract模块安装在Node.js项目中, 请执行以下命令:
npm install node-tesseract
然后, 你将可以使用require(‘ node-tesseract’ )要求该模块。
3.处理图像 Node.js中包装器的使用非常简单, 它包含一个名为process的简单方法。此方法期望将要处理的图像的绝对或相对文件路径作为第一个参数, 将具有配置的对象作为第二个参数(使用默认设置是可选的), 并将命令结束时触发的回调作为第三个参数。
默认初始化
要处理图像, 需要使用node-tesseract模块并使用2个必需的参数(文件名和回调)调用process函数:
var tesseract = require('node-tesseract');
tesseract.process('image.jpeg', (err, text) =>
{if(err){return console.log("An error occured: ", err);
}console.log("Recognized text:");
// the text variable contains the recognized textconsole.log(text);
});
自订选项
options对象中的所有属性都是你通过命令行与tesseract一起使用的参数, 例如, 命令tesseract image.jpeg output_filename -l eng + deu -psm 6有4个参数, 但是第一个参数由你的代码设置, 并且其次是库, 这意味着需要在options对象中给出-l和-psm参数:
var tesseract = require('node-tesseract');
var options = {// Use the english and german languagesl: 'eng+deu', // Use the segmentation mode #6 that assumes a single uniform block of text.psm: 6};
tesseract.process('image.jpeg', options , (err, text) =>
{if(err){return console.log("An error occured: ", err);
}console.log("Recognized text:");
console.log(text);
});
已知的问题 当使用不同的语言(可能是大文件)时, 在执行脚本时可能会捕获以下异常:
Error :An error occured:{ Error: stderr maxBuffer exceededat Socket.<
anonymous>
(child_process.js:278:14)at emitOne (events.js:96:13)at Socket.emit (events.js:188:7)at readableAddChunk (_stream_readable.js:176:18)at Socket.Readable.push (_stream_readable.js:134:10)at Pipe.onread (net.js:548:20)<
/p>
导致此错误” 超出stderr maxBuffer” 的原因是, 用于使用node.js处理tesseract的child_process.exec杀死了进程, 因为标准输出的允许数据量不足(默认值为200KB)。为防止此错误, 你需要在流程选项中使用并设置maxBuffer属性。 node-tesseract允许你通过在env属性中提供一个对象来实现此目的:
var tesseract = require('node-tesseract');
var options = {// Use the english and german languagesl: 'deu', // Use the segmentation mode #6 that assumes a single uniform block of text.psm: 6, // Increase the allowed amount of data in stdout to 16MB (A little exaggerated)env: {maxBuffer: 4096 * 4096}};
tesseract.process('german.jpeg', options , (err, text) =>
{if(err){return console.log("An error occured: ", err);
}console.log("Recognized text:");
console.log(text);
});
【Node.js中的Tesseract光学字符识别(OCR)入门】注意:根据你的需要, 增加maxBuffer值。
最后, 我们建议你通过命令行阅读Tesseract用法文档, 以了解更多配置选项。
编码愉快!
推荐阅读
- 如何在VLC Media Player 3.0.8上播放Midi文件
- 同时使用Apache2和Nginx时如何在Linux Plesk Obsidian Server中的域上启用gzip压缩
- 如何在Node.js中使用wkhtmltopdf创建PDF
- 在Node.js中创建第一个自我实现的基本HTTP服务器(带有路由)
- 如果要脱颖而出,必须在幻灯片视频中包含这些独特功能
- 这是什么物联网()
- 如何在Symfony 4中漂亮地打印JsonResponse
- 简单的C语言printf函数输出
- 无线网络技术专题企业WLAN网络典型组网架构分析