blob: 4732265966ce665e04cf4d78afbe6d169b7ec1f2 [file] [log] [blame]
#import "FirebaseMlVisionPlugin.h"
@implementation TextRecognizer
static FIRVisionTextRecognizer *recognizer;
+ (void)handleDetection:(FIRVisionImage *)image
options:(NSDictionary *)options
result:(FlutterResult)result {
FIRVision *vision = [FIRVision vision];
recognizer = [vision onDeviceTextRecognizer];
[recognizer processImage:image
completion:^(FIRVisionText *_Nullable visionText, NSError *_Nullable error) {
if (error) {
[FLTFirebaseMlVisionPlugin handleError:error result:result];
return;
} else if (!visionText) {
result(@{@"text" : @"", @"blocks" : @[]});
return;
}
NSMutableDictionary *visionTextData = [NSMutableDictionary dictionary];
visionTextData[@"text"] = visionText.text;
NSMutableArray *allBlockData = [NSMutableArray array];
for (FIRVisionTextBlock *block in visionText.blocks) {
NSMutableDictionary *blockData = [NSMutableDictionary dictionary];
[self addData:blockData
confidence:block.confidence
cornerPoints:block.cornerPoints
frame:block.frame
languages:block.recognizedLanguages
text:block.text];
NSMutableArray *allLineData = [NSMutableArray array];
for (FIRVisionTextLine *line in block.lines) {
NSMutableDictionary *lineData = [NSMutableDictionary dictionary];
[self addData:lineData
confidence:line.confidence
cornerPoints:line.cornerPoints
frame:line.frame
languages:line.recognizedLanguages
text:line.text];
NSMutableArray *allElementData = [NSMutableArray array];
for (FIRVisionTextElement *element in line.elements) {
NSMutableDictionary *elementData = [NSMutableDictionary dictionary];
[self addData:elementData
confidence:element.confidence
cornerPoints:element.cornerPoints
frame:element.frame
languages:element.recognizedLanguages
text:element.text];
[allElementData addObject:elementData];
}
lineData[@"elements"] = allElementData;
[allLineData addObject:lineData];
}
blockData[@"lines"] = allLineData;
[allBlockData addObject:blockData];
}
visionTextData[@"blocks"] = allBlockData;
result(visionTextData);
}];
}
+ (void)addData:(NSMutableDictionary *)addTo
confidence:(NSNumber *)confidence
cornerPoints:(NSArray<NSValue *> *)cornerPoints
frame:(CGRect)frame
languages:(NSArray<FIRVisionTextRecognizedLanguage *> *)languages
text:(NSString *)text {
__block NSMutableArray<NSArray *> *points = [NSMutableArray array];
for (NSValue *point in cornerPoints) {
[points addObject:@[ @(point.CGPointValue.x), @(point.CGPointValue.y) ]];
}
__block NSMutableArray<NSDictionary *> *allLanguageData = [NSMutableArray array];
for (FIRVisionTextRecognizedLanguage *language in languages) {
[allLanguageData addObject:@{
@"languageCode" : language.languageCode ? language.languageCode : [NSNull null]
}];
}
[addTo addEntriesFromDictionary:@{
@"confidence" : confidence ? confidence : [NSNull null],
@"points" : points,
@"left" : @(frame.origin.x),
@"top" : @(frame.origin.y),
@"width" : @(frame.size.width),
@"height" : @(frame.size.height),
@"recognizedLanguages" : allLanguageData,
@"text" : text,
}];
}
@end