Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
Problemas de Tesseract JS para reconocer números

Estoy usando Tesseract JS (v2.1.0 con Tesseract v4.1.1) para reconocer números (uno o más dígitos) en una imagen escaneada que está muy preprocesada (reducción de ruido, blanco y negro) y que sabe dónde están los números.

Sin embargo, cuando ejecuto el reconocimiento, muy a menudo los números de dos dígitos no se reconocen correctamente, por ejemplo:

ingrese la descripción de la imagen aquí

En este ejemplo, el "11" se reconoce como "1".

En la imagen se puede ver

  • La imagen pasó a Tesseract (blanco/negro)
  • Rectángulos coloreados que se pasan como rectangle a Tesseract para reconocer solo en ese rectángulo (pero se agregan después del reconocimiento)
  • Los números reconocidos en la esquina inferior izquierda en cian

Lo que probé hasta ahora:

  • Al principio, la imagen era blanca sobre negro, que cambié invirtiendo la imagen. Eso mejoró drásticamente la precisión.
  • Luego leí que Tesseract necesita un borde alrededor del texto, así que agregué un borde negro en el mismo lugar donde están los rectángulos de colores, pero eso no cambió nada.
  • A también cambió al modo de motor antiguo, ya que se supone que funciona mejor.
  • Agregué la lista blanca de personajes

¿Hay algo que pueda cambiar en las opciones del preprocesamiento para mejorar eso?

Este es el código (partes de él):

 const scheduler = Tesseract.createScheduler(); const workers = createWorkers(16); const canvasElement = document.getElementById('detected-numbers'); await recognizeNumbers(scheduler, workers, canvasElement, rowSpecNumbers, colSpecNumbers); async function recognizeNumbers(scheduler, workers, canvasElement, rowSpecNumbers, colSpecNumbers) { for (const worker of workers) { await worker.load(); await worker.loadLanguage('eng'); await worker.initialize('eng'); await worker.setParameters({ tessedit_ocr_engine_mode: Tesseract.TESSERACT_ONLY, tessedit_char_whitelist: '0123456789', tessedit_pageseg_mode: Tesseract.SINGLE_WORD }) scheduler.addWorker(worker); } await Promise.all(rowSpecNumbers .flat() .map(number => scheduler.addJob('recognize', canvasElement, { rectangle: { left: number.boundingRect.x, top: number.boundingRect.y, width: number.boundingRect.width, height: number.boundingRect.height } }).then(result => number.data = result.data) )); await Promise.all(colSpecNumbers .flat() .map(number => scheduler.addJob('recognize', canvasElement, { rectangle: { left: number.boundingRect.x, top: number.boundingRect.y, width: number.boundingRect.width, height: number.boundingRect.height } }).then(result => number.data = result.data) )); await scheduler.terminate(); }
about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!