-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathImageSegmentation.mm
63 lines (53 loc) · 1.85 KB
/
ImageSegmentation.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#import "ImageSegmentation.h"
#import "models/image_segmentation/ImageSegmentationModel.h"
#import "models/BaseModel.h"
#import "utils/ETError.h"
#import <ExecutorchLib/ETModel.h>
#import <React/RCTBridgeModule.h>
#import <opencv2/opencv.hpp>
#import "ImageProcessor.h"
@implementation ImageSegmentation {
ImageSegmentationModel *model;
}
RCT_EXPORT_MODULE()
- (void)loadModule:(NSString *)modelSource
resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject {
model = [[ImageSegmentationModel alloc] init];
[model
loadModel:[NSURL URLWithString:modelSource]
completion:^(BOOL success, NSNumber *errorCode) {
if (success) {
resolve(errorCode);
return;
}
reject(@"init_module_error",
[NSString stringWithFormat:@"%ld", (long)[errorCode longValue]],
nil);
return;
}];
}
- (void)forward:(NSString *)input
classesOfInterest:(NSArray *)classesOfInterest
resize:(BOOL)resize
resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject {
@try {
cv::Mat image = [ImageProcessor readImage:input];
NSDictionary *result = [model runModel:image
returnClasses:classesOfInterest
resize:resize];
resolve(result);
return;
} @catch (NSException *exception) {
NSLog(@"An exception occurred: %@, %@", exception.name, exception.reason);
reject(@"forward_error",
[NSString stringWithFormat:@"%@", exception.reason], nil);
return;
}
}
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params {
return std::make_shared<facebook::react::NativeImageSegmentationSpecJSI>(params);
}
@end