Visión en iOS: detección de texto y reconocimiento de Tesseract

Dejame contarte una historia.
Hace dos semanas me uní al Stupid Hackathon en Oslo, donde a la gente se le ocurrieron algunas ideas estúpidas y piratearon juntos. Cuando acabo de ver el clip de conteo de Big big numbers de Donald Trump, pensé que podría ser una buena / estúpida idea hacer una aplicación divertida de iOS que pueda reconocer un número y decir si es lo suficientemente grande, a través de la voz de Trump.

En primer lugar, necesitamos configurar la sesión de la cámara, ya que necesitamos capturar la imagen para el reconocimiento de texto. La lógica de la cámara y su capa de vista previa están encapsuladas en un controlador de vista personalizado CameraController .

Aún dentro del BoxService , debemos recortar la imagen en el rectángulo detectado para OCR (Reconocimiento óptico de caracteres). Calculamos en la coordenada de la imagen capturada e insertamos una imagen grande para tomar una imagen un poco más grande para acomodar los bordes superior e inferior. El código se ha modificado desde Convert Vision boundingBox de VNFaceObservation a rect para dibujar en la imagen:

Ahora que tenemos una imagen lista para el reconocimiento de texto. Trabajemos con OCRService .

Personalmente, me gusta la solución pura de Swift, por lo que SwiftOCR es una opción perfecta, se dice que funciona mejor que Tesseract. Así que lo intenté. La API no puede ser más simple.

Tesseract es un “es un motor de reconocimiento óptico de caracteres para varios sistemas operativos. Es un software gratuito, lanzado bajo la licencia Apache, versión 2.0, y el desarrollo ha sido patrocinado por Google desde 2006 ”. El puerto iOS es de código abierto en GitHub y tiene soporte para CocoaPods. Simplemente coloque el pod 'TesseractOCRiOS' en su Podfile y Podfile para Podfile .

Al igual que en README y en TestsProject, se necesita tessdata , que contiene información de idioma para que Tesseract funcione. Sin este tessdata , el framework TesseractOCR tessdata con algunas advertencias sobre la falta de TESSDATA_PREFIX.

Requisito estricto sobre los archivos de idioma existentes en una carpeta “tessdata” referenciada.

Descargue el tessdata desde aquí, agregue y agréguelo como reference a su proyecto Xcode. El color azul indica que esta carpeta se agrega como referencia.

Es posible que también deba agregar libstdc++.dylib y CoreImage.framework a su destino:

Tesseract

Usar Tesseract es fácil. Recuerde importar TesseractOCR , no TesseractOCRiOS:

Ahora podemos usar AVPlayer para reproducir sonido en nuestra clase MusicService . Cree y ejecute la aplicación, apunte su cámara hacia algunos números, toque la pantalla y la aplicación debería detectar el texto, reconocer el número y reproducir algo de sonido hablando de Trump.

Es posible que esta aplicación no sea muy útil, pero se puede ajustar para un uso más práctico, como el seguimiento de la reserva de la habitación, el análisis del número de teléfono o simplemente el escaneo de texto.

Espero que aprendas algo. Aquí hay algunos enlaces más para ayudarlo a comenzar con su viaje de detección de texto en iOS:

  • Tutorial de Tesseract OCR para iOS: aprenda a usar el marco de Tesseract en iOS, que detalla algunos problemas que puede encontrar al usarlo.
  • Utilizando Machine Learning en la palma de tu mano con los marcos ML de iOS: cómo usar Vision con SwiftOCR.
  • tesseract.js: Tesseract implementado en Javascript. No está relacionado con iOS, pero es bueno tener la importancia de Tesseract en algunas otras plataformas.
  • Seguimiento de objetos en Vision: Cambios interesantes para Vision en iOS en WWDC 2018. Hay muchas mejoras en el seguimiento de objetos y la capacitación de modelos personalizados.
  • Detección de objetos en imágenes fijas: código de muestra oficial de Apple para localizar y demarcar rectángulos, caras, códigos de barras y texto en imágenes usando el marco de visión.
  • Integrando Google ML Kit en iOS para detección de rostros, reconocimiento de texto y muchos más: Google introdujo ML Kit en Google IO este año, y también es bueno para el reconocimiento de texto. El marco es compatible con iOS y Android.