Я пытаюсь интегрировать библиотеку tesseract OCR в мой react native
проект для распознавания текста. Я установил tesseract iOS
и успешно его интегрировал. Но всякий раз, когда я пытаюсь распознать текст, я получаю следующую ошибку:
Пожалуйста, вызовите SetImage перед попыткой распознавания. 2018-06-27
15: 16: 10.417392 + 0500 MyApp [528: 165975] Нет распознанного текста. Проверь это
- [Tesseract setImage:] передается изображение больше 0x0. 2018-06-27 15: 16: 10.419 [фатально] [tid: com.facebook.react.RNTextRecognitionQueue]
Исключение '*** - [NSPlaceholderString initWithString:]: ноль аргумент'
был брошен во время вызова readData для целевого RNTextRecognition с
параметры (
"Файл: ///var/mobile/Containers/Data/Application/630539FD-AFDA-441F-8AB8-98CAA0867CE1/Library/Caches/Camera/F03909D4-4B7C-4A07-88BA-028E5A175156.jpg"
)
Я снимаю картинку, используя react-native-camera
и передаю URI методу readData
. И использованные обученные данные взяты из этого репо
Это мой код:
#import "RNTextRecognition.h"
#import <React/RCTLog.h>
@implementation RNTextRecognition
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(readData:(NSString *)uri)
{
RCTLogInfo(@"URI %@", uri);
[self initTesseract:uri];
}
- (void) initTesseract: (NSString *)uri {
G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:@"eng"];
tesseract.delegate = self;
NSURL *url = [NSURL URLWithString:uri];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc] initWithData:data];
[tesseract setImage:img];
[tesseract recognize];
NSLog(@"%@", [tesseract recognizedText]);
}
- (void)progressImageRecognitionForTesseract:(G8Tesseract *)tesseract {
NSLog(@"progress: %lu", (unsigned long)tesseract.progress);
}
- (BOOL)shouldCancelImageRecognitionForTesseract:(G8Tesseract *)tesseract {
return NO;
}
-(UIImage *)preprocessedImageForTesseract:(G8Tesseract *)tesseract sourceImage:(UIImage *)sourceImage {
NSString* text = tesseract.recognizedText;
NSLog(@"%@", [NSString stringWithString:text]);
return sourceImage;
}
@end
Edit:
После отладки обнаружил, что ошибка возникает в следующей строке метода G8Tesseract.mm setImage
:
UIImage *thresholdedImage = [self.delegate preprocessedImageForTesseract:self sourceImage:image];