Neste post vamos aprender a extrair textos de imagens usando Node.js e a biblioteca tesseract.js.
Comece criando uma pasta para seu projeto e inicializando o projeto Node. Eu particularmente uso yarn, mas fique a vontade para usar npm se preferir:
mkdir text-extractor cd text-extractor yarn init -y
ou com npm:
mkdir text-extractor cd text-extractor npm init -y
Estamos chamando nosso projeto de text-extractor. Dentro da pasta do projeto execute o comando para instalar a biblioteca tesseract.js:
yarn add tesseract.js
ou
npm install --save tesseract.js
Pronto, essa é a única biblioteca que iremos utilizar. Vou deixar aqui abaixo uma image de exemplo para usarmos de teste. Fique livre para baixar essa imagem (sem direitos autorais) e a coloque na raíz do seu projeto:
O código na verdade é muito simples, vou postar ele todo e explicar por partes:
const { createWorker } = require('tesseract.js'); (async () => { try { const worker = await createWorker(); const inicio = new Date(); await worker.loadLanguage('por'); await worker.initialize('por'); const { data: { text }, } = await worker.recognize('./img.jpeg'); console.log(text); const fim = new Date(); const total = (fim - inicio) / 1000; console.log(`Tempo corrido - ${total}\n\n`); await worker.terminate(); return; } catch (error) { console.log(error.message); } })();
Começamos importando a biblioteca tesseract.js. Logo em seguida criamos uma função anônima async, uma vez que utilizamos await dentro dela para chamar funções assíncronas. Colocamos todo nosso código dentro de um bloco try-catch para podermos capturar eventuais erros das chamadas assíncronas.
const worker = await createWorker();
Aqui chamamos o método “createWorker” da biblioteca tesseract que retorna uma instância do objeto principal. Nesse objeto setamos todos os parâmetros.
await worker.loadLanguage('por'); await worker.initialize('por');
Nessas duas linhas dizemos para o objeto que o texto da imagem estará em português. Nesse link você encontra todas as línguas suportadas pela biblioteca.
const {data: { text }, } = await worker.recognize('./img.jpeg');
Aqui chamamos o método “recognize” que de fato irá analisar a imagem e extrair o texto para a constante “text”.
Logo em seguida imprimimos na tela o texto que foi extraído bem como o tempo decorrido da operação, apenas por curiosidade.
console.log(text); const fim = new Date(); const total = (fim - inicio) / 1000; console.log(`Tempo decorrido - ${total}\n\n`);
E finalmente fechamos o “worker” e retornamos a função.
await worker.terminate();
Existem muitas opções de configurações e parâmetros além do que mostramos aqui. Você pode conferir, bem como ler a documentação completa diretamente no Github da biblioteca.
O texto extraído pode apresentar inconsistências. Quanto mais visível for o texto com maior contraste da imagem de fundo, melhor será o resultado. Mas sem dúvida, é uma excelente ferramenta para integrar com seus projetos. Em apenas um script com menos de 30 linhas já conseguimos uma funcionalidade impressionante.
Espero que tenha gostado Até a próxima e happy coding!
Show de bola, não conhecia essa lib… obrigado por compartilhar !