tutorial library descargar ios objective-c ocr tesseract

ios - library - tesseract ocr swift 4



¿Por qué la biblioteca OCR de Tesseract(iOS) no puede reconocer texto en absoluto? (5)

Asegúrate de tener el último archivo tessdata del código de Google

http://code.google.com/p/tesseract-ocr/downloads/list

Esto le proporcionará una lista de archivos de tessdata que debe descargar e incluir en su aplicación si aún no lo ha hecho. En su caso, necesitará tesseract-ocr-3.02.eng.tar.gz ya que está buscando los archivos en inglés.

El siguiente artículo te mostrará dónde necesitas instalarlo. Leí este tutorial cuando construí mi primer proyecto de Tesseract y lo encontré realmente útil

http://lois.di-qual.net/blog/install-and-use-tesseract-on-ios-with-tesseract-ios/

Estoy intentando usar la biblioteca Tesseract OCR en mi aplicación iOS. Descargué la biblioteca tesseract-ios de github y cuando traté de reconocer una imagen de texto simple obtuve basura en su lugar. Aquí hay una imagen de lo que traté de reconocer:

Tengo texto ilegible

T0I1101T0W KIR1 H1I1101T0W KIR1 H1I1101T0W CIBEPS H1 ES PBHY P306 EHH11 133I R1 11335 11I1Hazio de la mano 5 13H1H1H1H1H1H1H1HP2H1H1HP2H1H1HP1H1H1HP2H1H1HP2H1HP2H1HP2H1HP1H1H1HP1H1H1H1H1HP2H1H1H1HP2H1H1HP2H1H1H1HP2H1HP1H1H1HP2H1H1H1H1HP2H1H1HP2H1H1H1HP2H1H1HP2H1H1H1HP2H1H1H1HP2H1H1H1HP1HP1H1111H1131.

¿Por qué Tesseract no puede reconocer ni siquiera una imagen simple? Aquí está el código que utilicé para instanciar Tesseract:

Tesseract* tesseractObject = [[Tesseract alloc] initWithDataPath:@"tessdata" language:@"eng"]; [tesseractObject setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"]; [tesseractObject setImage:image]; [tesseractObject recognize]; NSLog(@"RECOGNISED= %@" , [tesseractObject recognizedText]);

Aquí está mi estructura de proyecto:

Agregué la carpeta testdata en inglés por referencia. Entonces, ¿qué estoy haciendo mal? ¿Cómo puedo arreglar esto?


Como dijo Adam, si quieres buenos resultados, tendrás que hacer un procesamiento de imágenes y configurar algunas configuraciones (incluir en la lista blanca ciertos caracteres, etc.).

Para cualquier otra persona que se haya topado con esta pregunta, he reunido un proyecto de ejemplo aquí que hace una lista blanca y el procesamiento de imágenes: https://github.com/mstrchrstphr/OCR-iOS-Example


Está utilizando la opción tessedit_char_whitelist con el valor "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" que limita el reconocimiento de caracteres a esta lista solamente. Sin embargo, la imagen que desea procesar contiene caracteres en minúsculas, si desea utilizar esta opción también tendrá que incluir caracteres en minúsculas.

[tesseractObject setVariableValue:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"];


lo que @ Adam Richardson explicó es correcto, junto con este método 1) de imagen en escala para aumentar el tamaño de la imagen (aumento de dimensiones)

func scaleImage (imagen: UIImage, maxDimension: CGFloat) -> UIImage {

var scaledSize = CGSize(width: maxDimension, height: maxDimension) var scaleFactor: CGFloat if image.size.width > image.size.height { scaleFactor = image.size.height / image.size.width scaledSize.width = maxDimension scaledSize.height = scaledSize.width * scaleFactor } else { scaleFactor = image.size.width / image.size.height scaledSize.height = maxDimension scaledSize.width = scaledSize.height * scaleFactor } UIGraphicsBeginImageContext(scaledSize) image.draw(in: CGRect(x: 0, y: 0, width: scaledSize.width, height: scaledSize.height)) let scaledImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return scaledImage! }

2) almacenar este archivo de idioma eng.traineddata en el administrador de archivos

func storeLanguageFile() throws{ var fileManager: FileManager = FileManager.default let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask let docDirectory = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)[0] as NSString let path: String = docDirectory.appendingPathComponent("/tessdata/eng.traineddata") if fileManager.fileExists(atPath: path){ var data: NSData = NSData.dataWithContentsOfMappedFile((Bundle.main.resourcePath?.appending("/tessdata/eng.traineddata"))!)! as! NSData var error: NSError try FileManager.default.createDirectory(atPath: docDirectory.appendingPathComponent("/tessdata"), withIntermediateDirectories: true, attributes: nil) data.write(toFile: path, atomically: true) } }

3) después de eso, puede usar https://github.com/BradLarson/GPUImage para aumentar la claridad de la imagen

puedes usar esto

func preprocessedImage(for tesseract: G8Tesseract!, sourceImage: UIImage!) -> UIImage! { var stillImageFilter: GPUImageAdaptiveThresholdFilter = GPUImageAdaptiveThresholdFilter() stillImageFilter.blurRadiusInPixels = 4.0 var filterImage: UIImage = stillImageFilter.image(byFilteringImage: sourceImage) return filterImage }

estos 3 pasos le ayudarán a aumentar la precisión del tesseract hasta 60 ~ 70%


y mi salida es

Solución:

tesseract.language = @"eng+fra"; tesseract.pageSegmentationMode = G8PageSegmentationModeAuto; tesseract.engineMode = G8OCREngineModeTesseractCubeCombined; tesseract.image = [image.image g8_blackAndWhite]; tesseract.maximumRecognitionTime = 60.0; [tesseract recognize]; NSLog(@"%@", tesseract.recognizedText); reco_area.text = [tesseract recognizedText];

para tessdata haga clic aquí