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.
- package/ios/FaceHelper.swift +2 -2
- package/ios/VisionCameraFaceDetectionPlugin.swift +2 -9
- package/lib/commonjs/Camera.cjs +19 -23
- package/lib/commonjs/Camera.cjs.map +1 -1
- package/lib/commonjs/Tensor.cjs.map +1 -1
- package/lib/module/Camera.mjs +20 -26
- package/lib/module/Camera.mjs.map +1 -1
- package/lib/module/Tensor.mjs.map +1 -1
- package/lib/typescript/src/Camera.d.ts.map +1 -1
- package/lib/typescript/src/FaceDetector.d.ts +1 -1
- package/lib/typescript/src/FaceDetector.d.ts.map +1 -1
- package/lib/typescript/src/Tensor.d.ts +6 -1
- package/lib/typescript/src/Tensor.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Camera.tsx +26 -24
- package/src/FaceDetector.ts +1 -1
- package/src/Tensor.ts +9 -1
package/ios/FaceHelper.swift
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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
|
}
|
package/lib/commonjs/Camera.cjs
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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:
|
|
158
|
-
pixelFormat:
|
|
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","
|
|
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,
|
|
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":[]}
|
package/lib/module/Camera.mjs
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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:
|
|
155
|
-
pixelFormat:
|
|
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","
|
|
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,
|
|
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;
|
|
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"}
|
|
@@ -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,
|
|
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<
|
|
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,
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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={
|
|
188
|
-
|
|
187
|
+
frameProcessor={
|
|
188
|
+
Platform.OS === 'android' ? processorAndroid : processorIOS
|
|
189
|
+
}
|
|
190
|
+
pixelFormat={'yuv'}
|
|
189
191
|
/>
|
|
190
192
|
);
|
|
191
193
|
}
|
package/src/FaceDetector.ts
CHANGED
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(
|
|
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
|
+
};
|