vision-camera-face-detection 1.2.0 → 1.2.2

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.
@@ -197,7 +197,7 @@ class FaceHelper {
197
197
  return pixelBuffer
198
198
  }
199
199
 
200
- static func getImageFaceFromBuffer(from sampleBuffer: CMSampleBuffer?, rectImage: CGRect) -> UIImage? {
200
+ static func getImageFaceFromBuffer(from sampleBuffer: CMSampleBuffer?, rectImage: CGRect, orientation: UIImage.Orientation) -> UIImage? {
201
201
  guard let sampleBuffer = sampleBuffer else {
202
202
  print("Sample buffer is NULL.")
203
203
  return nil
@@ -212,7 +212,7 @@ class FaceHelper {
212
212
 
213
213
  if (!rectImage.isNull) {
214
214
  let imageRef: CGImage = cgImage.cropping(to: rectImage)!
215
- let imageCrop: UIImage = UIImage(cgImage: imageRef, scale: 0.5, orientation: .up)
215
+ let imageCrop: UIImage = UIImage(cgImage: imageRef, scale: 0.5, orientation: orientation)
216
216
  return imageCrop
217
217
  } else {
218
218
  return nil
@@ -267,7 +267,8 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
267
267
 
268
268
  let faces: [Face] = try faceDetector!.results(in: image)
269
269
  for face in faces {
270
- guard let imageCrop = FaceHelper.getImageFaceFromBuffer(from: frame.buffer, rectImage: face.frame) else {
270
+ var map: [String: Any] = [:]
271
+ guard let imageCrop = FaceHelper.getImageFaceFromBuffer(from: frame.buffer, rectImage: face.frame, orientation: orientation) else {
271
272
  return nil
272
273
  }
273
274
  guard let pixelBuffer = FaceHelper.uiImageToPixelBuffer(image: imageCrop, size: inputWidth) else {
@@ -284,14 +285,12 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
284
285
  try interpreter?.invoke()
285
286
  let outputTensor: Tensor? = try interpreter?.output(at: 0)
286
287
 
287
- var map: [String: Any] = [:]
288
288
  if ((outputTensor?.data) != nil) {
289
289
  let result: [Float] = [Float32](unsafeData: outputTensor!.data) ?? []
290
290
  map["data"] = result
291
291
  } else {
292
292
  map["data"] = []
293
293
  }
294
-
295
294
  if runLandmarks {
296
295
  map["landmarks"] = processLandmarks(
297
296
  from: face,
@@ -299,13 +298,11 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
299
298
  scaleY: scaleY
300
299
  )
301
300
  }
302
-
303
301
  if runClassifications {
304
302
  map["leftEyeOpenProbability"] = face.leftEyeOpenProbability
305
303
  map["rightEyeOpenProbability"] = face.rightEyeOpenProbability
306
304
  map["smilingProbability"] = face.smilingProbability
307
305
  }
308
-
309
306
  if runContours {
310
307
  map["contours"] = processFaceContours(
311
308
  from: face,
@@ -313,11 +310,9 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
313
310
  scaleY: scaleY
314
311
  )
315
312
  }
316
-
317
313
  if trackingEnabled {
318
314
  map["trackingId"] = face.trackingID
319
315
  }
320
-
321
316
  map["rollAngle"] = face.headEulerAngleZ
322
317
  map["pitchAngle"] = face.headEulerAngleX
323
318
  map["yawAngle"] = face.headEulerAngleY
@@ -329,13 +324,11 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
329
324
  scaleX: scaleX,
330
325
  scaleY: scaleY
331
326
  )
332
-
333
327
  result.append(map)
334
328
  }
335
329
  } catch let error {
336
330
  print("Error processing face detection: \(error)")
337
331
  }
338
-
339
332
  return result
340
333
  }
341
334
  }
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Camera = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
8
9
  var _reactNativeVisionCamera = require("react-native-vision-camera");
9
10
  var _reactNativeWorkletsCore = require("react-native-worklets-core");
10
11
  var _FaceDetector = require("./FaceDetector.cjs");
@@ -75,7 +76,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
75
76
  /**
76
77
  * Runs on detection callback on js thread
77
78
  */
78
- const runOnJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
79
+ const runInJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
79
80
 
80
81
  /**
81
82
  * Async context that will handle face detection
@@ -88,7 +89,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
88
89
  // increment frame count so we can use frame on
89
90
  // js side without frame processor getting stuck
90
91
  frame.incrementRefCount();
91
- runOnJs(faces, frame).finally(() => {
92
+ runInJs(faces, frame).finally(() => {
92
93
  'worklet';
93
94
 
94
95
  // finally decrement frame count so it can be dropped
@@ -100,7 +101,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
100
101
  frame.decrementRefCount();
101
102
  isAsyncContextBusy.value = false;
102
103
  }
103
- }, [detectFaces, runOnJs]);
104
+ }, [detectFaces, runInJs]);
104
105
 
105
106
  /**
106
107
  * Detect faces on frame on an async context without blocking camera preview
@@ -123,7 +124,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
123
124
  /**
124
125
  * Camera frame processor
125
126
  */
126
- const cameraFrameProcessor = (0, _reactNativeVisionCamera.useFrameProcessor)(frame => {
127
+ const processorAndroid = (0, _reactNativeVisionCamera.useFrameProcessor)(frame => {
127
128
  'worklet';
128
129
 
129
130
  runAsync(frame);
@@ -133,29 +134,24 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
133
134
  // use bellow when vision-camera's
134
135
  // context creation issue is solved
135
136
  //
136
- // /**
137
- // * Runs on detection callback on js thread
138
- // */
139
- // const runOnJs = useRunOnJS( faceDetectionCallback, [
140
- // faceDetectionCallback
141
- // ] )
142
-
143
- // const cameraFrameProcessor = useFrameProcessor( ( frame ) => {
144
- // 'worklet'
145
- // runAsync( frame, () => {
146
- // 'worklet'
147
- // runOnJs(
148
- // detectFaces( frame ),
149
- // frame
150
- // )
151
- // } )
152
- // }, [ runOnJs ] )
137
+ /**
138
+ * Runs on detection callback on js thread
139
+ */
140
+ const runOnJs = (0, _reactNativeWorkletsCore.useRunOnJS)(faceDetectionCallback, [faceDetectionCallback]);
141
+ const processorIOS = (0, _reactNativeVisionCamera.useFrameProcessor)(frame => {
142
+ 'worklet';
153
143
 
144
+ runOnJs(detectFaces(frame), frame);
145
+ // runAsync(frame, () => {
146
+ // 'worklet';
147
+ // runOnJs(detectFaces(frame), frame);
148
+ // });
149
+ }, [runOnJs]);
154
150
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeVisionCamera.Camera, {
155
151
  ...props,
156
152
  ref: ref,
157
- frameProcessor: cameraFrameProcessor,
158
- pixelFormat: "yuv"
153
+ frameProcessor: _reactNative.Platform.OS === 'android' ? processorAndroid : processorIOS,
154
+ pixelFormat: 'yuv'
159
155
  });
160
156
  });
161
157
  //# sourceMappingURL=Camera.cjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeVisionCamera","_reactNativeWorkletsCore","_FaceDetector","_jsxRuntime","e","__esModule","default","useWorklet","func","dependencyList","worklet","React","useMemo","context","Worklets","defaultContext","createRunAsync","useRunInJS","createRunOnJS","Camera","exports","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","useFaceDetector","isAsyncContextBusy","useSharedValue","logOnJs","log","error","console","message","JSON","stringify","runOnJs","runOnAsyncContext","frame","faces","incrementRefCount","finally","decrementRefCount","value","runAsync","internal","cameraFrameProcessor","useFrameProcessor","jsx","frameProcessor","pixelFormat"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeVisionCamera","_reactNativeWorkletsCore","_FaceDetector","_jsxRuntime","e","__esModule","default","useWorklet","func","dependencyList","worklet","React","useMemo","context","Worklets","defaultContext","createRunAsync","useRunInJS","createRunOnJS","Camera","exports","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","useFaceDetector","isAsyncContextBusy","useSharedValue","logOnJs","log","error","console","message","JSON","stringify","runInJs","runOnAsyncContext","frame","faces","incrementRefCount","finally","decrementRefCount","value","runAsync","internal","processorAndroid","useFrameProcessor","runOnJs","useRunOnJS","processorIOS","jsx","frameProcessor","Platform","OS","pixelFormat"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","VisionCameraFaceDetectionModule","NativeModules","Proxy","get","Error","initTensor","modelPath","count","detectFromBase64","imageString"],"sourceRoot":"../../src","sources":["Tensor.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GACjB,uFAAuF,GACvFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,+BAA+B,GACnCC,0BAAa,CAACD,+BAA+B,GACzCC,0BAAa,CAACD,+BAA+B,GAC7C,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEA,SAASU,UAAUA,CAACC,SAAiB,EAAEC,KAAc,EAAmB;EAC7E,OAAOP,+BAA+B,CAACK,UAAU,CAACC,SAAS,EAAEC,KAAK,CAAC;AACrE;AAEO,SAASC,gBAAgBA,CAACC,WAAmB,EAAgB;EAClE,OAAOT,+BAA+B,CAACQ,gBAAgB,CAACC,WAAW,CAAC;AACtE","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","VisionCameraFaceDetectionModule","NativeModules","Proxy","get","Error","initTensor","modelPath","count","detectFromBase64","imageString"],"sourceRoot":"../../src","sources":["Tensor.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GACjB,uFAAuF,GACvFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,+BAA+B,GACnCC,0BAAa,CAACD,+BAA+B,GACzCC,0BAAa,CAACD,+BAA+B,GAC7C,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEA,SAASU,UAAUA,CAACC,SAAiB,EAAEC,KAAc,EAAmB;EAC7E,OAAOP,+BAA+B,CAACK,UAAU,CAACC,SAAS,EAAEC,KAAK,CAAC;AACrE;AAEO,SAASC,gBAAgBA,CAC9BC,WAAmB,EACO;EAC1B,OAAOT,+BAA+B,CAACQ,gBAAgB,CAACC,WAAW,CAAC;AACtE","ignoreList":[]}
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
+ import { Platform } from 'react-native';
2
3
  import { Camera as VisionCamera,
3
4
  // runAsync,
4
5
  useFrameProcessor } from 'react-native-vision-camera';
5
- import { Worklets,
6
- // useRunOnJS,
7
- useSharedValue } from 'react-native-worklets-core';
6
+ import { Worklets, useRunOnJS, useSharedValue } from 'react-native-worklets-core';
8
7
  import { useFaceDetector } from "./FaceDetector.mjs";
9
8
 
10
9
  // types
@@ -72,7 +71,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
72
71
  /**
73
72
  * Runs on detection callback on js thread
74
73
  */
75
- const runOnJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
74
+ const runInJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
76
75
 
77
76
  /**
78
77
  * Async context that will handle face detection
@@ -85,7 +84,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
85
84
  // increment frame count so we can use frame on
86
85
  // js side without frame processor getting stuck
87
86
  frame.incrementRefCount();
88
- runOnJs(faces, frame).finally(() => {
87
+ runInJs(faces, frame).finally(() => {
89
88
  'worklet';
90
89
 
91
90
  // finally decrement frame count so it can be dropped
@@ -97,7 +96,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
97
96
  frame.decrementRefCount();
98
97
  isAsyncContextBusy.value = false;
99
98
  }
100
- }, [detectFaces, runOnJs]);
99
+ }, [detectFaces, runInJs]);
101
100
 
102
101
  /**
103
102
  * Detect faces on frame on an async context without blocking camera preview
@@ -120,7 +119,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
120
119
  /**
121
120
  * Camera frame processor
122
121
  */
123
- const cameraFrameProcessor = useFrameProcessor(frame => {
122
+ const processorAndroid = useFrameProcessor(frame => {
124
123
  'worklet';
125
124
 
126
125
  runAsync(frame);
@@ -130,29 +129,24 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
130
129
  // use bellow when vision-camera's
131
130
  // context creation issue is solved
132
131
  //
133
- // /**
134
- // * Runs on detection callback on js thread
135
- // */
136
- // const runOnJs = useRunOnJS( faceDetectionCallback, [
137
- // faceDetectionCallback
138
- // ] )
139
-
140
- // const cameraFrameProcessor = useFrameProcessor( ( frame ) => {
141
- // 'worklet'
142
- // runAsync( frame, () => {
143
- // 'worklet'
144
- // runOnJs(
145
- // detectFaces( frame ),
146
- // frame
147
- // )
148
- // } )
149
- // }, [ runOnJs ] )
132
+ /**
133
+ * Runs on detection callback on js thread
134
+ */
135
+ const runOnJs = useRunOnJS(faceDetectionCallback, [faceDetectionCallback]);
136
+ const processorIOS = useFrameProcessor(frame => {
137
+ 'worklet';
150
138
 
139
+ runOnJs(detectFaces(frame), frame);
140
+ // runAsync(frame, () => {
141
+ // 'worklet';
142
+ // runOnJs(detectFaces(frame), frame);
143
+ // });
144
+ }, [runOnJs]);
151
145
  return /*#__PURE__*/_jsx(VisionCamera, {
152
146
  ...props,
153
147
  ref: ref,
154
- frameProcessor: cameraFrameProcessor,
155
- pixelFormat: "yuv"
148
+ frameProcessor: Platform.OS === 'android' ? processorAndroid : processorIOS,
149
+ pixelFormat: 'yuv'
156
150
  });
157
151
  });
158
152
  //# sourceMappingURL=Camera.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Camera","VisionCamera","useFrameProcessor","Worklets","useSharedValue","useFaceDetector","jsx","_jsx","useWorklet","func","dependencyList","worklet","useMemo","context","defaultContext","createRunAsync","useRunInJS","createRunOnJS","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","isAsyncContextBusy","logOnJs","log","error","console","message","JSON","stringify","runOnJs","runOnAsyncContext","frame","faces","incrementRefCount","finally","decrementRefCount","value","runAsync","internal","cameraFrameProcessor","frameProcessor","pixelFormat"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Platform","Camera","VisionCamera","useFrameProcessor","Worklets","useRunOnJS","useSharedValue","useFaceDetector","jsx","_jsx","useWorklet","func","dependencyList","worklet","useMemo","context","defaultContext","createRunAsync","useRunInJS","createRunOnJS","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","isAsyncContextBusy","logOnJs","log","error","console","message","JSON","stringify","runInJs","runOnAsyncContext","frame","faces","incrementRefCount","finally","decrementRefCount","value","runAsync","internal","processorAndroid","runOnJs","processorIOS","frameProcessor","OS","pixelFormat"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","VisionCameraFaceDetectionModule","Proxy","get","Error","initTensor","modelPath","count","detectFromBase64","imageString"],"sourceRoot":"../../src","sources":["Tensor.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,uFAAuF,GACvFD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,+BAA+B,GACnCN,aAAa,CAACM,+BAA+B,GACzCN,aAAa,CAACM,+BAA+B,GAC7C,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEP,OAAO,SAASQ,UAAUA,CAACC,SAAiB,EAAEC,KAAc,EAAmB;EAC7E,OAAON,+BAA+B,CAACI,UAAU,CAACC,SAAS,EAAEC,KAAK,CAAC;AACrE;AAEA,OAAO,SAASC,gBAAgBA,CAACC,WAAmB,EAAgB;EAClE,OAAOR,+BAA+B,CAACO,gBAAgB,CAACC,WAAW,CAAC;AACtE","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","VisionCameraFaceDetectionModule","Proxy","get","Error","initTensor","modelPath","count","detectFromBase64","imageString"],"sourceRoot":"../../src","sources":["Tensor.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,uFAAuF,GACvFD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,+BAA+B,GACnCN,aAAa,CAACM,+BAA+B,GACzCN,aAAa,CAACM,+BAA+B,GAC7C,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEP,OAAO,SAASQ,UAAUA,CAACC,SAAiB,EAAEC,KAAc,EAAmB;EAC7E,OAAON,+BAA+B,CAACI,UAAU,CAACC,SAAS,EAAEC,KAAK,CAAC;AACrE;AAEA,OAAO,SAASC,gBAAgBA,CAC9BC,WAAmB,EACO;EAC1B,OAAOR,+BAA+B,CAACO,gBAAgB,CAACC,WAAW,CAAC;AACtE","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../src/Camera.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,MAAM,IAAI,YAAY,EAGvB,MAAM,4BAA4B,CAAC;AAUpC,OAAO,KAAK,EACV,WAAW,EACX,KAAK,EAEN,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AASjE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AA4C1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM;2BA/CM,oBAAoB;2BACpB,YAAY;oDA8JpC,CAAC"}
1
+ {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../src/Camera.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,MAAM,IAAI,YAAY,EAGvB,MAAM,4BAA4B,CAAC;AAUpC,OAAO,KAAK,EACV,WAAW,EACX,KAAK,EAEN,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AASjE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AA4C1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM;2BA/CM,oBAAoB;2BACpB,YAAY;oDA+JpC,CAAC"}
@@ -21,7 +21,7 @@ export interface Face {
21
21
  smilingProbability: number;
22
22
  contours: Contours;
23
23
  landmarks: Landmarks;
24
- data: number[];
24
+ data: any;
25
25
  }
26
26
  export interface Bounds {
27
27
  width: number;
@@ -1 +1 @@
1
- {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAE3E,KAAK,kBAAkB,GAAG;IACxB;;;;OAIG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC;CACvC,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,mBAAmB,EAAE,KAAK,EAAE,CAAC;IAC7B,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAC3B,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,WAAW,EAAE,KAAK,EAAE,CAAC;IACrB,WAAW,EAAE,KAAK,EAAE,CAAC;IACrB,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,WAAW,EAAE,KAAK,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAEtC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA4BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAEpB"}
1
+ {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAE3E,KAAK,kBAAkB,GAAG;IACxB;;;;OAIG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,CAAC;CACvC,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,mBAAmB,EAAE,KAAK,EAAE,CAAC;IAC7B,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAC3B,oBAAoB,EAAE,KAAK,EAAE,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,WAAW,EAAE,KAAK,EAAE,CAAC;IACrB,WAAW,EAAE,KAAK,EAAE,CAAC;IACrB,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,WAAW,EAAE,KAAK,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAEtC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA4BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAEpB"}
@@ -1,3 +1,8 @@
1
1
  export declare function initTensor(modelPath: string, count?: number): Promise<string>;
2
- export declare function detectFromBase64(imageString: string): Promise<any>;
2
+ export declare function detectFromBase64(imageString: string): Promise<DetectBas64Type>;
3
+ export type DetectBas64Type = {
4
+ base64: string;
5
+ data: any;
6
+ message: string;
7
+ };
3
8
  //# sourceMappingURL=Tensor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tensor.d.ts","sourceRoot":"","sources":["../../../src/Tensor.ts"],"names":[],"mappings":"AAoBA,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAElE"}
1
+ {"version":3,"file":"Tensor.d.ts","sourceRoot":"","sources":["../../../src/Tensor.ts"],"names":[],"mappings":"AAoBA,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7E;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vision-camera-face-detection",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Plugin Face Detection for Vision Camera 4",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.cjs",
@@ -75,7 +75,7 @@
75
75
  "react": "18.2.0",
76
76
  "react-native": "0.74.3",
77
77
  "react-native-builder-bob": "^0.25.0",
78
- "react-native-vision-camera": "4.4.1",
78
+ "react-native-vision-camera": "4.5.0",
79
79
  "react-native-worklets-core": "1.3.3",
80
80
  "release-it": "^15.0.0",
81
81
  "turbo": "^1.10.7",
package/src/Camera.tsx CHANGED
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { Platform } from 'react-native';
2
3
  import {
3
4
  Camera as VisionCamera,
4
5
  // runAsync,
@@ -6,7 +7,7 @@ import {
6
7
  } from 'react-native-vision-camera';
7
8
  import {
8
9
  Worklets,
9
- // useRunOnJS,
10
+ useRunOnJS,
10
11
  useSharedValue,
11
12
  } from 'react-native-worklets-core';
12
13
  import { useFaceDetector } from './FaceDetector';
@@ -102,7 +103,7 @@ export const Camera = React.forwardRef(
102
103
  /**
103
104
  * Runs on detection callback on js thread
104
105
  */
105
- const runOnJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
106
+ const runInJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
106
107
 
107
108
  /**
108
109
  * Async context that will handle face detection
@@ -115,7 +116,7 @@ export const Camera = React.forwardRef(
115
116
  // increment frame count so we can use frame on
116
117
  // js side without frame processor getting stuck
117
118
  frame.incrementRefCount();
118
- runOnJs(faces, frame).finally(() => {
119
+ runInJs(faces, frame).finally(() => {
119
120
  'worklet';
120
121
  // finally decrement frame count so it can be dropped
121
122
  frame.decrementRefCount();
@@ -127,7 +128,7 @@ export const Camera = React.forwardRef(
127
128
  isAsyncContextBusy.value = false;
128
129
  }
129
130
  },
130
- [detectFaces, runOnJs]
131
+ [detectFaces, runInJs]
131
132
  );
132
133
 
133
134
  /**
@@ -150,7 +151,7 @@ export const Camera = React.forwardRef(
150
151
  /**
151
152
  * Camera frame processor
152
153
  */
153
- const cameraFrameProcessor = useFrameProcessor(
154
+ const processorAndroid = useFrameProcessor(
154
155
  (frame) => {
155
156
  'worklet';
156
157
  runAsync(frame);
@@ -162,30 +163,31 @@ export const Camera = React.forwardRef(
162
163
  // use bellow when vision-camera's
163
164
  // context creation issue is solved
164
165
  //
165
- // /**
166
- // * Runs on detection callback on js thread
167
- // */
168
- // const runOnJs = useRunOnJS( faceDetectionCallback, [
169
- // faceDetectionCallback
170
- // ] )
171
-
172
- // const cameraFrameProcessor = useFrameProcessor( ( frame ) => {
173
- // 'worklet'
174
- // runAsync( frame, () => {
175
- // 'worklet'
176
- // runOnJs(
177
- // detectFaces( frame ),
178
- // frame
179
- // )
180
- // } )
181
- // }, [ runOnJs ] )
166
+ /**
167
+ * Runs on detection callback on js thread
168
+ */
169
+ const runOnJs = useRunOnJS(faceDetectionCallback, [faceDetectionCallback]);
170
+
171
+ const processorIOS = useFrameProcessor(
172
+ (frame) => {
173
+ 'worklet';
174
+ runOnJs(detectFaces(frame), frame);
175
+ // runAsync(frame, () => {
176
+ // 'worklet';
177
+ // runOnJs(detectFaces(frame), frame);
178
+ // });
179
+ },
180
+ [runOnJs]
181
+ );
182
182
 
183
183
  return (
184
184
  <VisionCamera
185
185
  {...props}
186
186
  ref={ref}
187
- frameProcessor={cameraFrameProcessor}
188
- pixelFormat="yuv"
187
+ frameProcessor={
188
+ Platform.OS === 'android' ? processorAndroid : processorIOS
189
+ }
190
+ pixelFormat={'yuv'}
189
191
  />
190
192
  );
191
193
  }
@@ -25,7 +25,7 @@ export interface Face {
25
25
  smilingProbability: number;
26
26
  contours: Contours;
27
27
  landmarks: Landmarks;
28
- data: number[];
28
+ data: any;
29
29
  }
30
30
 
31
31
  export interface Bounds {
package/src/Tensor.ts CHANGED
@@ -22,6 +22,14 @@ export function initTensor(modelPath: string, count?: number): Promise<string> {
22
22
  return VisionCameraFaceDetectionModule.initTensor(modelPath, count);
23
23
  }
24
24
 
25
- export function detectFromBase64(imageString: string): Promise<any> {
25
+ export function detectFromBase64(
26
+ imageString: string
27
+ ): Promise<DetectBas64Type> {
26
28
  return VisionCameraFaceDetectionModule.detectFromBase64(imageString);
27
29
  }
30
+
31
+ export type DetectBas64Type = {
32
+ base64: string;
33
+ data: any;
34
+ message: string;
35
+ };