Extraindo texto de imagens com Node

Neste post vamos aprender a extrair textos de imagens usando Node.js e a biblioteca tesseract.js.
optical image recogonition

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:

text-extractor

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!

1 comment
Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Post Anterior

Interfaces em Go: Explorando Usos Avançados

Próximo Post

Concorrência em Go com Goroutines