mediversal-rn-image-intelligence 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,120 @@
1
+ package com.mediversalrnimagintelligence
2
+
3
+ import android.net.Uri
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
8
+ import com.facebook.react.bridge.ReactMethod
9
+ import com.facebook.react.bridge.WritableArray
10
+ import com.facebook.react.bridge.WritableMap
11
+ import com.google.mlkit.vision.common.InputImage
12
+ import com.google.mlkit.vision.objects.DetectedObject
13
+ import com.google.mlkit.vision.objects.ObjectDetection
14
+ import com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions
15
+ import java.io.IOException
16
+
17
+ class ObjectDetectionModule(reactContext: ReactApplicationContext) :
18
+ ReactContextBaseJavaModule(reactContext) {
19
+
20
+ override fun getName(): String {
21
+ return "ObjectDetectionModule"
22
+ }
23
+
24
+ @ReactMethod
25
+ fun detectObjects(imageUri: String, promise: Promise) {
26
+ try {
27
+ val image = parseImageFromUri(imageUri)
28
+
29
+ val options = ObjectDetectorOptions.Builder()
30
+ .setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
31
+ .enableMultipleObjects()
32
+ .enableClassification()
33
+ .build()
34
+
35
+ val detector = ObjectDetection.getClient(options)
36
+
37
+ detector.process(image)
38
+ .addOnSuccessListener { objects ->
39
+ val result = Arguments.createMap()
40
+ val objectsArray = Arguments.createArray()
41
+
42
+ for (obj in objects) {
43
+ objectsArray.pushMap(convertObjectToMap(obj))
44
+ }
45
+
46
+ result.putArray("objects", objectsArray)
47
+ promise.resolve(result)
48
+ }
49
+ .addOnFailureListener { e ->
50
+ val result = Arguments.createMap()
51
+ result.putArray("objects", Arguments.createArray())
52
+ result.putString("error", e.message ?: "Object detection failed")
53
+ promise.resolve(result)
54
+ }
55
+
56
+ } catch (e: Exception) {
57
+ val result = Arguments.createMap()
58
+ result.putArray("objects", Arguments.createArray())
59
+ result.putString("error", e.message ?: "Failed to process image")
60
+ promise.resolve(result)
61
+ }
62
+ }
63
+
64
+ private fun parseImageFromUri(uriString: String): InputImage {
65
+ val context = reactApplicationContext
66
+
67
+ return try {
68
+ when {
69
+ uriString.startsWith("file://") -> {
70
+ val uri = Uri.parse(uriString)
71
+ InputImage.fromFilePath(context, uri)
72
+ }
73
+ uriString.startsWith("content://") -> {
74
+ val uri = Uri.parse(uriString)
75
+ InputImage.fromFilePath(context, uri)
76
+ }
77
+ uriString.startsWith("/") -> {
78
+ val uri = Uri.parse("file://$uriString")
79
+ InputImage.fromFilePath(context, uri)
80
+ }
81
+ else -> {
82
+ throw IOException("Unsupported URI format: $uriString")
83
+ }
84
+ }
85
+ } catch (e: IOException) {
86
+ throw IOException("Failed to load image from URI: ${e.message}")
87
+ }
88
+ }
89
+
90
+ private fun convertObjectToMap(obj: DetectedObject): WritableMap {
91
+ val objectMap = Arguments.createMap()
92
+
93
+ // Bounding box
94
+ val boundingBox = Arguments.createMap()
95
+ val bounds = obj.boundingBox
96
+ boundingBox.putInt("x", bounds.left)
97
+ boundingBox.putInt("y", bounds.top)
98
+ boundingBox.putInt("width", bounds.width())
99
+ boundingBox.putInt("height", bounds.height())
100
+ objectMap.putMap("boundingBox", boundingBox)
101
+
102
+ // Tracking ID
103
+ if (obj.trackingId != null) {
104
+ objectMap.putInt("trackingId", obj.trackingId!!)
105
+ }
106
+
107
+ // Labels
108
+ val labelsArray = Arguments.createArray()
109
+ for (label in obj.labels) {
110
+ val labelMap = Arguments.createMap()
111
+ labelMap.putString("text", label.text)
112
+ labelMap.putDouble("confidence", label.confidence.toDouble())
113
+ labelMap.putInt("index", label.index)
114
+ labelsArray.pushMap(labelMap)
115
+ }
116
+ objectMap.putArray("labels", labelsArray)
117
+
118
+ return objectMap
119
+ }
120
+ }
@@ -0,0 +1,14 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(ObjectDetectionModule, NSObject)
4
+
5
+ RCT_EXTERN_METHOD(detectObjects:(NSString *)imageUri
6
+ resolver:(RCTPromiseResolveBlock)resolve
7
+ rejecter:(RCTPromiseRejectBlock)reject)
8
+
9
+ + (BOOL)requiresMainQueueSetup
10
+ {
11
+ return NO;
12
+ }
13
+
14
+ @end
@@ -0,0 +1,129 @@
1
+ import Foundation
2
+ import MLKitObjectDetection
3
+ import MLKitVision
4
+
5
+ @objc(ObjectDetectionModule)
6
+ class ObjectDetectionModule: NSObject {
7
+
8
+ @objc
9
+ func detectObjects(
10
+ _ imageUri: String,
11
+ resolver resolve: @escaping RCTPromiseResolveBlock,
12
+ rejecter reject: @escaping RCTPromiseRejectBlock
13
+ ) {
14
+ DispatchQueue.global(qos: .userInitiated).async {
15
+ do {
16
+ guard let image = self.parseImageFromUri(imageUri) else {
17
+ let result: [String: Any] = [
18
+ "objects": [],
19
+ "error": "Failed to load image from URI"
20
+ ]
21
+ DispatchQueue.main.async {
22
+ resolve(result)
23
+ }
24
+ return
25
+ }
26
+
27
+ let visionImage = VisionImage(image: image)
28
+ visionImage.orientation = image.imageOrientation
29
+
30
+ let options = ObjectDetectorOptions()
31
+ options.detectorMode = .singleImage
32
+ options.shouldEnableMultipleObjects = true
33
+ options.shouldEnableClassification = true
34
+
35
+ let detector = ObjectDetector.objectDetector(options: options)
36
+
37
+ detector.process(visionImage) { objects, error in
38
+ if let error = error {
39
+ let result: [String: Any] = [
40
+ "objects": [],
41
+ "error": error.localizedDescription
42
+ ]
43
+ DispatchQueue.main.async {
44
+ resolve(result)
45
+ }
46
+ return
47
+ }
48
+
49
+ guard let objects = objects, !objects.isEmpty else {
50
+ let result: [String: Any] = ["objects": []]
51
+ DispatchQueue.main.async {
52
+ resolve(result)
53
+ }
54
+ return
55
+ }
56
+
57
+ let objectsArray = objects.map { self.convertObjectToDict($0) }
58
+ let result: [String: Any] = ["objects": objectsArray]
59
+
60
+ DispatchQueue.main.async {
61
+ resolve(result)
62
+ }
63
+ }
64
+
65
+ } catch {
66
+ let result: [String: Any] = [
67
+ "objects": [],
68
+ "error": error.localizedDescription
69
+ ]
70
+ DispatchQueue.main.async {
71
+ resolve(result)
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ private func parseImageFromUri(_ uriString: String) -> UIImage? {
78
+ var path = uriString
79
+
80
+ if path.hasPrefix("file://") {
81
+ path = String(path.dropFirst(7))
82
+ }
83
+
84
+ if path.hasPrefix("ph://") || path.hasPrefix("assets-library://") {
85
+ return nil
86
+ }
87
+
88
+ if FileManager.default.fileExists(atPath: path) {
89
+ return UIImage(contentsOfFile: path)
90
+ }
91
+
92
+ return nil
93
+ }
94
+
95
+ private func convertObjectToDict(_ obj: Object) -> [String: Any] {
96
+ var objectDict: [String: Any] = [:]
97
+
98
+ let frame = obj.frame
99
+ let boundingBox: [String: Any] = [
100
+ "x": Int(frame.origin.x),
101
+ "y": Int(frame.origin.y),
102
+ "width": Int(frame.size.width),
103
+ "height": Int(frame.size.height)
104
+ ]
105
+ objectDict["boundingBox"] = boundingBox
106
+
107
+ if obj.trackingID != nil {
108
+ objectDict["trackingId"] = obj.trackingID!.intValue
109
+ }
110
+
111
+ var labelsArray: [[String: Any]] = []
112
+ for label in obj.labels {
113
+ let labelDict: [String: Any] = [
114
+ "text": label.text,
115
+ "confidence": label.confidence,
116
+ "index": label.index
117
+ ]
118
+ labelsArray.append(labelDict)
119
+ }
120
+ objectDict["labels"] = labelsArray
121
+
122
+ return objectDict
123
+ }
124
+
125
+ @objc
126
+ static func requiresMainQueueSetup() -> Bool {
127
+ return false
128
+ }
129
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ /**
9
+ * Object Detection TurboModule Specification
10
+ */
11
+ var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('ObjectDetectionModule');
12
+ //# sourceMappingURL=NativeObjectDetectionModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeObjectDetectionModule.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAGA;AACA;AACA;AAFA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAOeC,gCAAmB,CAACC,YAAY,CAC7C,uBACF,CAAC","ignoreList":[]}
@@ -9,6 +9,7 @@ exports.isAvailable = isAvailable;
9
9
  var _reactNative = require("react-native");
10
10
  var _NativeFaceDetectionModule = _interopRequireDefault(require("./NativeFaceDetectionModule"));
11
11
  var _NativeTextRecognitionModule = _interopRequireDefault(require("./NativeTextRecognitionModule"));
12
+ var _NativeObjectDetectionModule = _interopRequireDefault(require("./NativeObjectDetectionModule"));
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  // Export types for consumers
14
15
 
@@ -18,6 +19,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
18
19
  const DEFAULT_OPTIONS = {
19
20
  detectFaces: true,
20
21
  detectPrintedText: true,
22
+ detectObjects: true,
21
23
  faceDetectionMode: 'fast',
22
24
  minFaceSize: 0.1
23
25
  };
@@ -95,7 +97,8 @@ async function analyzeImage(imageUri, options = {}) {
95
97
  // Initialize result
96
98
  const result = {
97
99
  containsFace: false,
98
- containsPrintedText: false
100
+ containsPrintedText: false,
101
+ containsObjects: false
99
102
  };
100
103
 
101
104
  // Create promises array for parallel execution
@@ -139,6 +142,25 @@ async function analyzeImage(imageUri, options = {}) {
139
142
  })());
140
143
  }
141
144
 
145
+ // Object Detection
146
+ if (opts.detectObjects) {
147
+ promises.push((async () => {
148
+ try {
149
+ const objectResult = await _NativeObjectDetectionModule.default.detectObjects(validatedUri);
150
+ if (objectResult.error) {
151
+ result.errors = result.errors || {};
152
+ result.errors.objectDetection = objectResult.error;
153
+ } else if (objectResult.objects && objectResult.objects.length > 0) {
154
+ result.containsObjects = true;
155
+ result.objects = objectResult.objects;
156
+ }
157
+ } catch (error) {
158
+ result.errors = result.errors || {};
159
+ result.errors.objectDetection = error instanceof Error ? error.message : 'Unknown error';
160
+ }
161
+ })());
162
+ }
163
+
142
164
  // Wait for all analyses to complete
143
165
  await Promise.all(promises);
144
166
 
@@ -157,7 +179,7 @@ async function analyzeImage(imageUri, options = {}) {
157
179
  */
158
180
  async function isAvailable() {
159
181
  try {
160
- return !!(_NativeFaceDetectionModule.default && _NativeTextRecognitionModule.default);
182
+ return !!(_NativeFaceDetectionModule.default && _NativeTextRecognitionModule.default && _NativeObjectDetectionModule.default);
161
183
  } catch {
162
184
  return false;
163
185
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_NativeFaceDetectionModule","_interopRequireDefault","_NativeTextRecognitionModule","e","__esModule","default","DEFAULT_OPTIONS","detectFaces","detectPrintedText","faceDetectionMode","minFaceSize","validateImageUri","imageUri","Error","trimmedUri","trim","length","Platform","OS","startsWith","analyzeImage","options","validatedUri","opts","result","containsFace","containsPrintedText","promises","push","faceResult","FaceDetectionModule","error","errors","faceDetection","faces","message","textResult","TextRecognitionModule","recognizeText","textRecognition","text","printedText","Promise","all","enabledCount","errorCount","Object","keys","JSON","stringify","isAvailable","_default","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_NativeFaceDetectionModule","_interopRequireDefault","_NativeTextRecognitionModule","_NativeObjectDetectionModule","e","__esModule","default","DEFAULT_OPTIONS","detectFaces","detectPrintedText","detectObjects","faceDetectionMode","minFaceSize","validateImageUri","imageUri","Error","trimmedUri","trim","length","Platform","OS","startsWith","analyzeImage","options","validatedUri","opts","result","containsFace","containsPrintedText","containsObjects","promises","push","faceResult","FaceDetectionModule","error","errors","faceDetection","faces","message","textResult","TextRecognitionModule","recognizeText","textRecognition","text","printedText","objectResult","ObjectDetectionModule","objectDetection","objects","Promise","all","enabledCount","errorCount","Object","keys","JSON","stringify","isAvailable","_default","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import { TurboModuleRegistry } from 'react-native';
2
+
3
+ /**
4
+ * Object Detection TurboModule Specification
5
+ */
6
+
7
+ export default TurboModuleRegistry.getEnforcing('ObjectDetectionModule');
8
+ //# sourceMappingURL=NativeObjectDetectionModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeObjectDetectionModule.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAGlD;AACA;AACA;;AAKA,eAAeA,mBAAmB,CAACC,YAAY,CAC7C,uBACF,CAAC","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { Platform } from 'react-native';
2
2
  import FaceDetectionModule from './NativeFaceDetectionModule';
3
3
  import TextRecognitionModule from './NativeTextRecognitionModule';
4
+ import ObjectDetectionModule from './NativeObjectDetectionModule';
4
5
 
5
6
  // Export types for consumers
6
7
 
@@ -10,6 +11,7 @@ import TextRecognitionModule from './NativeTextRecognitionModule';
10
11
  const DEFAULT_OPTIONS = {
11
12
  detectFaces: true,
12
13
  detectPrintedText: true,
14
+ detectObjects: true,
13
15
  faceDetectionMode: 'fast',
14
16
  minFaceSize: 0.1
15
17
  };
@@ -87,7 +89,8 @@ export async function analyzeImage(imageUri, options = {}) {
87
89
  // Initialize result
88
90
  const result = {
89
91
  containsFace: false,
90
- containsPrintedText: false
92
+ containsPrintedText: false,
93
+ containsObjects: false
91
94
  };
92
95
 
93
96
  // Create promises array for parallel execution
@@ -131,6 +134,25 @@ export async function analyzeImage(imageUri, options = {}) {
131
134
  })());
132
135
  }
133
136
 
137
+ // Object Detection
138
+ if (opts.detectObjects) {
139
+ promises.push((async () => {
140
+ try {
141
+ const objectResult = await ObjectDetectionModule.detectObjects(validatedUri);
142
+ if (objectResult.error) {
143
+ result.errors = result.errors || {};
144
+ result.errors.objectDetection = objectResult.error;
145
+ } else if (objectResult.objects && objectResult.objects.length > 0) {
146
+ result.containsObjects = true;
147
+ result.objects = objectResult.objects;
148
+ }
149
+ } catch (error) {
150
+ result.errors = result.errors || {};
151
+ result.errors.objectDetection = error instanceof Error ? error.message : 'Unknown error';
152
+ }
153
+ })());
154
+ }
155
+
134
156
  // Wait for all analyses to complete
135
157
  await Promise.all(promises);
136
158
 
@@ -149,7 +171,7 @@ export async function analyzeImage(imageUri, options = {}) {
149
171
  */
150
172
  export async function isAvailable() {
151
173
  try {
152
- return !!(FaceDetectionModule && TextRecognitionModule);
174
+ return !!(FaceDetectionModule && TextRecognitionModule && ObjectDetectionModule);
153
175
  } catch {
154
176
  return false;
155
177
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","FaceDetectionModule","TextRecognitionModule","DEFAULT_OPTIONS","detectFaces","detectPrintedText","faceDetectionMode","minFaceSize","validateImageUri","imageUri","Error","trimmedUri","trim","length","OS","startsWith","analyzeImage","options","validatedUri","opts","result","containsFace","containsPrintedText","promises","push","faceResult","error","errors","faceDetection","faces","message","textResult","recognizeText","textRecognition","text","printedText","Promise","all","enabledCount","errorCount","Object","keys","JSON","stringify","isAvailable"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","FaceDetectionModule","TextRecognitionModule","ObjectDetectionModule","DEFAULT_OPTIONS","detectFaces","detectPrintedText","detectObjects","faceDetectionMode","minFaceSize","validateImageUri","imageUri","Error","trimmedUri","trim","length","OS","startsWith","analyzeImage","options","validatedUri","opts","result","containsFace","containsPrintedText","containsObjects","promises","push","faceResult","error","errors","faceDetection","faces","message","textResult","recognizeText","textRecognition","text","printedText","objectResult","objectDetection","objects","Promise","all","enabledCount","errorCount","Object","keys","JSON","stringify","isAvailable"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import type { NativeObjectDetectionResult } from './types';
3
+ /**
4
+ * Object Detection TurboModule Specification
5
+ */
6
+ export interface Spec extends TurboModule {
7
+ detectObjects(imageUri: string): Promise<NativeObjectDetectionResult>;
8
+ }
9
+ declare const _default: Spec;
10
+ export default _default;
11
+ //# sourceMappingURL=NativeObjectDetectionModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeObjectDetectionModule.d.ts","sourceRoot":"","sources":["../../src/NativeObjectDetectionModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACvE;;AAED,wBAEU"}
@@ -1,5 +1,5 @@
1
1
  import type { AnalysisResult, AnalysisOptions } from './types';
2
- export type { AnalysisResult, AnalysisOptions, FaceData, BoundingBox, } from './types';
2
+ export type { AnalysisResult, AnalysisOptions, FaceData, BoundingBox, ObjectData, ObjectLabel, } from './types';
3
3
  /**
4
4
  * Analyzes an image using Google ML Kit on-device APIs
5
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/D,YAAY,EACV,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,GACZ,MAAM,SAAS,CAAC;AA0DjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAqFzB;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;;;;;AAGD,wBAGE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/D,YAAY,EACV,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AA2DjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA+GzB;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAUpD;;;;;AAGD,wBAGE"}
@@ -36,12 +36,17 @@ export interface AnalysisResult {
36
36
  containsPrintedText: boolean;
37
37
  /** Array of detected faces with metadata */
38
38
  faces?: FaceData[];
39
+ /** True if object was detected */
40
+ containsObjects: boolean;
41
+ /** Array of detected objects with labels */
42
+ objects?: ObjectData[];
39
43
  /** Extracted printed text content */
40
44
  printedText?: string;
41
45
  /** Error messages if any module failed (won't throw, for graceful degradation) */
42
46
  errors?: {
43
47
  faceDetection?: string;
44
48
  textRecognition?: string;
49
+ objectDetection?: string;
45
50
  };
46
51
  }
47
52
  /**
@@ -54,6 +59,8 @@ export interface AnalysisOptions {
54
59
  detectPrintedText?: boolean;
55
60
  /** Face detection performance mode: 'fast' or 'accurate' (default: 'fast') */
56
61
  faceDetectionMode?: 'fast' | 'accurate';
62
+ /** Enable object detection (default: false) */
63
+ detectObjects?: boolean;
57
64
  /** Minimum face size relative to image (0.0 to 1.0, default: 0.1) */
58
65
  minFaceSize?: number;
59
66
  }
@@ -77,4 +84,34 @@ export interface NativeTextRecognitionResult {
77
84
  * Internal handwriting recognition result from native module
78
85
  * @internal
79
86
  */
87
+ /**
88
+ * Detected object information
89
+ */
90
+ export interface ObjectData {
91
+ /** Bounding box of the detected object */
92
+ boundingBox: BoundingBox;
93
+ /** Tracking ID for video sequences */
94
+ trackingId?: number;
95
+ /** Object labels with confidence scores */
96
+ labels: ObjectLabel[];
97
+ }
98
+ /**
99
+ * Object label with confidence
100
+ */
101
+ export interface ObjectLabel {
102
+ /** Label text (e.g., "Dog", "Car", "Person") */
103
+ text: string;
104
+ /** Confidence score (0.0 to 1.0) */
105
+ confidence: number;
106
+ /** Label index */
107
+ index: number;
108
+ }
109
+ /**
110
+ * Internal object detection result from native module
111
+ * @internal
112
+ */
113
+ export interface NativeObjectDetectionResult {
114
+ objects: ObjectData[];
115
+ error?: string;
116
+ }
80
117
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kCAAkC;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -19,6 +19,8 @@ Pod::Spec.new do |s|
19
19
 
20
20
  s.dependency "GoogleMLKit/FaceDetection", "~> 4.0.0"
21
21
  s.dependency "GoogleMLKit/TextRecognition", "~> 4.0.0"
22
+ s.dependency "GoogleMLKit/ObjectDetection", "~> 4.0.0"
23
+
22
24
 
23
25
  s.swift_version = "5.0"
24
26
  end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediversal-rn-image-intelligence",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Production-ready React Native library for intelligent image analysis using Google ML Kit (on-device)",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -0,0 +1,14 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+ import type { NativeObjectDetectionResult } from './types';
4
+
5
+ /**
6
+ * Object Detection TurboModule Specification
7
+ */
8
+ export interface Spec extends TurboModule {
9
+ detectObjects(imageUri: string): Promise<NativeObjectDetectionResult>;
10
+ }
11
+
12
+ export default TurboModuleRegistry.getEnforcing<Spec>(
13
+ 'ObjectDetectionModule'
14
+ ) as Spec;