vision-camera-face-detection 2.1.0 → 2.2.1
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/README.md +2 -2
- package/VisionCameraFaceDetection.podspec +1 -1
- package/android/build.gradle +0 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionPlugin.kt +100 -83
- package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectorOrientation.kt +57 -0
- package/ios/FaceHelper.swift +103 -220
- package/ios/VisionCameraFaceDetectionPlugin.swift +326 -306
- package/ios/VisionCameraFaceDetectorOrientation.swift +81 -0
- package/lib/commonjs/Camera.js +58 -34
- package/lib/commonjs/Camera.js.map +1 -1
- package/lib/commonjs/FaceDetector.js.map +1 -1
- package/lib/module/Camera.js +60 -34
- package/lib/module/Camera.js.map +1 -1
- package/lib/module/FaceDetector.js.map +1 -1
- package/lib/typescript/commonjs/src/Camera.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FaceDetector.d.ts +24 -6
- package/lib/typescript/commonjs/src/FaceDetector.d.ts.map +1 -1
- package/lib/typescript/module/src/Camera.d.ts.map +1 -1
- package/lib/typescript/module/src/FaceDetector.d.ts +24 -6
- package/lib/typescript/module/src/FaceDetector.d.ts.map +1 -1
- package/package.json +6 -7
- package/src/Camera.tsx +65 -33
- package/src/FaceDetector.ts +31 -6
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import VisionCamera
|
|
2
|
+
import AVFoundation
|
|
3
|
+
import CoreMotion
|
|
4
|
+
import Foundation
|
|
5
|
+
import UIKit
|
|
6
|
+
|
|
7
|
+
final class VisionCameraFaceDetectorOrientation {
|
|
8
|
+
private let motionManager = CMMotionManager()
|
|
9
|
+
private let operationQueue = OperationQueue()
|
|
10
|
+
|
|
11
|
+
// The orientation of the physical device's gyro sensor/accelerometer
|
|
12
|
+
var orientation: Orientation {
|
|
13
|
+
didSet {
|
|
14
|
+
if oldValue != orientation {
|
|
15
|
+
print("Device Orientation changed from \(oldValue) -> \(orientation)")
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
init() {
|
|
21
|
+
// default value
|
|
22
|
+
orientation = .portrait
|
|
23
|
+
startDeviceOrientationListener()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
deinit {
|
|
27
|
+
stopDeviceOrientationListener()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private func startDeviceOrientationListener() {
|
|
31
|
+
stopDeviceOrientationListener()
|
|
32
|
+
if motionManager.isAccelerometerAvailable {
|
|
33
|
+
motionManager.accelerometerUpdateInterval = 0.2
|
|
34
|
+
motionManager.startAccelerometerUpdates(to: operationQueue) { accelerometerData, error in
|
|
35
|
+
if let error {
|
|
36
|
+
print("Failed to get Accelerometer data! \(error)")
|
|
37
|
+
}
|
|
38
|
+
if let accelerometerData {
|
|
39
|
+
self.orientation = accelerometerData.deviceOrientation
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private func stopDeviceOrientationListener() {
|
|
46
|
+
if motionManager.isAccelerometerActive {
|
|
47
|
+
motionManager.stopAccelerometerUpdates()
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
extension CMAccelerometerData {
|
|
53
|
+
/**
|
|
54
|
+
Get the current device orientation from the given acceleration/gyro data.
|
|
55
|
+
*/
|
|
56
|
+
var deviceOrientation: Orientation {
|
|
57
|
+
let acceleration = acceleration
|
|
58
|
+
let xNorm = abs(acceleration.x)
|
|
59
|
+
let yNorm = abs(acceleration.y)
|
|
60
|
+
let zNorm = abs(acceleration.z)
|
|
61
|
+
|
|
62
|
+
// If the z-axis is greater than the other axes, the phone is flat.
|
|
63
|
+
if zNorm > xNorm && zNorm > yNorm {
|
|
64
|
+
return .portrait
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if xNorm > yNorm {
|
|
68
|
+
if acceleration.x > 0 {
|
|
69
|
+
return .landscapeRight
|
|
70
|
+
} else {
|
|
71
|
+
return .landscapeLeft
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
if acceleration.y > 0 {
|
|
75
|
+
return .portraitUpsideDown
|
|
76
|
+
} else {
|
|
77
|
+
return .portrait
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
package/lib/commonjs/Camera.js
CHANGED
|
@@ -4,13 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Camera = void 0;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var _reactNativeVisionCamera = require("react-native-vision-camera");
|
|
10
10
|
var _reactNativeWorkletsCore = require("react-native-worklets-core");
|
|
11
11
|
var _FaceDetector = require("./FaceDetector.js");
|
|
12
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
-
function
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
14
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
15
|
+
|
|
14
16
|
// types
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -22,10 +24,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
22
24
|
* @returns {UseWorkletType} A memoized Worklet
|
|
23
25
|
*/
|
|
24
26
|
function useWorklet(func, dependencyList) {
|
|
25
|
-
const worklet = _react.
|
|
27
|
+
const worklet = (0, _react.useMemo)(() => {
|
|
26
28
|
const context = _reactNativeWorkletsCore.Worklets.defaultContext;
|
|
27
29
|
return context.createRunAsync(func);
|
|
28
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
30
|
}, dependencyList);
|
|
30
31
|
return worklet;
|
|
31
32
|
}
|
|
@@ -39,8 +40,7 @@ function useWorklet(func, dependencyList) {
|
|
|
39
40
|
* @returns {UseRunInJSType} a memoized Worklet
|
|
40
41
|
*/
|
|
41
42
|
function useRunInJS(func, dependencyList) {
|
|
42
|
-
|
|
43
|
-
return _react.default.useMemo(() => _reactNativeWorkletsCore.Worklets.createRunOnJS(func), dependencyList);
|
|
43
|
+
return (0, _react.useMemo)(() => _reactNativeWorkletsCore.Worklets.createRunOnJS(func), dependencyList);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
@@ -52,6 +52,7 @@ function useRunInJS(func, dependencyList) {
|
|
|
52
52
|
const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
53
53
|
faceDetectionOptions,
|
|
54
54
|
faceDetectionCallback,
|
|
55
|
+
// skiaActions,
|
|
55
56
|
...props
|
|
56
57
|
}, ref) => {
|
|
57
58
|
const {
|
|
@@ -61,6 +62,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
61
62
|
* Is there an async task already running?
|
|
62
63
|
*/
|
|
63
64
|
const isAsyncContextBusy = (0, _reactNativeWorkletsCore.useSharedValue)(false);
|
|
65
|
+
const faces = (0, _reactNativeWorkletsCore.useSharedValue)('[]');
|
|
64
66
|
|
|
65
67
|
/**
|
|
66
68
|
* Throws logs/errors back on js thread
|
|
@@ -76,7 +78,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
76
78
|
/**
|
|
77
79
|
* Runs on detection callback on js thread
|
|
78
80
|
*/
|
|
79
|
-
const
|
|
81
|
+
const runOnJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
|
|
80
82
|
|
|
81
83
|
/**
|
|
82
84
|
* Async context that will handle face detection
|
|
@@ -85,11 +87,11 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
85
87
|
'worklet';
|
|
86
88
|
|
|
87
89
|
try {
|
|
88
|
-
|
|
90
|
+
faces.value = JSON.stringify(detectFaces(frame));
|
|
89
91
|
// increment frame count so we can use frame on
|
|
90
92
|
// js side without frame processor getting stuck
|
|
91
93
|
frame.incrementRefCount();
|
|
92
|
-
|
|
94
|
+
runOnJs(JSON.parse(faces.value), frame).finally(() => {
|
|
93
95
|
'worklet';
|
|
94
96
|
|
|
95
97
|
// finally decrement frame count so it can be dropped
|
|
@@ -101,7 +103,7 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
101
103
|
frame.decrementRefCount();
|
|
102
104
|
isAsyncContextBusy.value = false;
|
|
103
105
|
}
|
|
104
|
-
}, [detectFaces,
|
|
106
|
+
}, [detectFaces, runOnJs]);
|
|
105
107
|
|
|
106
108
|
/**
|
|
107
109
|
* Detect faces on frame on an async context without blocking camera preview
|
|
@@ -122,42 +124,64 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
/**
|
|
125
|
-
*
|
|
127
|
+
* Skia frame processor
|
|
128
|
+
*/
|
|
129
|
+
// NOTE - temporary without skia
|
|
130
|
+
// const skiaFrameProcessor = useSkiaFrameProcessor(
|
|
131
|
+
// (frame) => {
|
|
132
|
+
// 'worklet';
|
|
133
|
+
// frame.render();
|
|
134
|
+
// skiaActions!(JSON.parse(faces.value), frame);
|
|
135
|
+
// runAsync(frame);
|
|
136
|
+
// },
|
|
137
|
+
// [runOnAsyncContext, skiaActions]
|
|
138
|
+
// );
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Default frame processor
|
|
126
142
|
*/
|
|
127
|
-
const
|
|
143
|
+
const cameraFrameProcessor = (0, _reactNativeVisionCamera.useFrameProcessor)(frame => {
|
|
128
144
|
'worklet';
|
|
129
145
|
|
|
130
146
|
runAsync(frame);
|
|
131
147
|
}, [runOnAsyncContext]);
|
|
132
148
|
|
|
149
|
+
/**
|
|
150
|
+
* Camera frame processor
|
|
151
|
+
*/
|
|
152
|
+
const frameProcessor = (() => {
|
|
153
|
+
// const { autoMode } = faceDetectionOptions ?? {};
|
|
154
|
+
|
|
155
|
+
// if (!autoMode && !!skiaActions) return skiaFrameProcessor;
|
|
156
|
+
|
|
157
|
+
return cameraFrameProcessor;
|
|
158
|
+
})();
|
|
159
|
+
|
|
133
160
|
//
|
|
134
161
|
// use bellow when vision-camera's
|
|
135
162
|
// context creation issue is solved
|
|
136
163
|
//
|
|
137
|
-
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// const runOnJs = useRunOnJS(faceDetectionCallback, [
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
// )
|
|
164
|
+
// /**
|
|
165
|
+
// * Runs on detection callback on js thread
|
|
166
|
+
// */
|
|
167
|
+
// const runOnJs = useRunOnJS( faceDetectionCallback, [
|
|
168
|
+
// faceDetectionCallback
|
|
169
|
+
// ] )
|
|
170
|
+
|
|
171
|
+
// const cameraFrameProcessor = useFrameProcessor( ( frame ) => {
|
|
172
|
+
// 'worklet'
|
|
173
|
+
// runAsync( frame, () => {
|
|
174
|
+
// 'worklet'
|
|
175
|
+
// runOnJs(
|
|
176
|
+
// detectFaces( frame ),
|
|
177
|
+
// frame
|
|
178
|
+
// )
|
|
179
|
+
// } )
|
|
180
|
+
// }, [ runOnJs ] )
|
|
153
181
|
|
|
154
182
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeVisionCamera.Camera, {
|
|
155
|
-
ref: ref
|
|
156
|
-
|
|
157
|
-
// Platform.OS === 'android' ? processorAndroid : processorIOS
|
|
158
|
-
// }
|
|
159
|
-
,
|
|
160
|
-
frameProcessor: processorAndroid,
|
|
183
|
+
ref: ref,
|
|
184
|
+
frameProcessor: frameProcessor,
|
|
161
185
|
pixelFormat: _reactNative.Platform.OS === 'android' ? 'yuv' : 'rgb',
|
|
162
186
|
...props
|
|
163
187
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeVisionCamera","_reactNativeWorkletsCore","_FaceDetector","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useWorklet","func","dependencyList","worklet","useMemo","context","Worklets","defaultContext","createRunAsync","useRunInJS","createRunOnJS","Camera","exports","React","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","useFaceDetector","isAsyncContextBusy","useSharedValue","faces","logOnJs","log","error","console","message","JSON","stringify","runOnJs","runOnAsyncContext","frame","value","incrementRefCount","parse","finally","decrementRefCount","runAsync","internal","cameraFrameProcessor","useFrameProcessor","frameProcessor","jsx","pixelFormat","Platform","OS"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNativeVisionCamera","createFaceDetectorPlugin","options","plugin","VisionCameraProxy","initFrameProcessorPlugin","Error","detectFaces","frame","call","useFaceDetector","useMemo"],"sourceRoot":"../../src","sources":["FaceDetector.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeVisionCamera","createFaceDetectorPlugin","options","plugin","VisionCameraProxy","initFrameProcessorPlugin","Error","detectFaces","frame","call","useFaceDetector","useMemo"],"sourceRoot":"../../src","sources":["FaceDetector.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAwJA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,wBAAwBA,CAC/BC,OAA8B,EACV;EACpB,MAAMC,MAAM,GAAGC,0CAAiB,CAACC,wBAAwB,CAAC,aAAa,EAAE;IACvE,GAAGH;EACL,CAAC,CAAC;EAEF,IAAI,CAACC,MAAM,EAAE;IACX,MAAM,IAAIG,KAAK,CAAC,sDAAsD,CAAC;EACzE;EAEA,OAAO;IACLC,WAAW,EAAGC,KAAY,IAAa;MACrC,SAAS;;MACT;MACA,OAAOL,MAAM,CAACM,IAAI,CAACD,KAAK,CAAC;IAC3B;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,eAAeA,CAC7BR,OAA8B,EACV;EACpB,OAAO,IAAAS,cAAO,EAAC,MAAMV,wBAAwB,CAACC,OAAO,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;AACpE","ignoreList":[]}
|
package/lib/module/Camera.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
4
|
+
|
|
5
|
+
import React, { useMemo } from 'react';
|
|
4
6
|
import { Platform } from 'react-native';
|
|
5
|
-
import { Camera as VisionCamera, useFrameProcessor
|
|
7
|
+
import { Camera as VisionCamera, useFrameProcessor
|
|
8
|
+
// useSkiaFrameProcessor,
|
|
9
|
+
} from 'react-native-vision-camera';
|
|
6
10
|
import { Worklets,
|
|
7
11
|
// useRunOnJS,
|
|
8
12
|
useSharedValue } from 'react-native-worklets-core';
|
|
@@ -19,10 +23,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
19
23
|
* @returns {UseWorkletType} A memoized Worklet
|
|
20
24
|
*/
|
|
21
25
|
function useWorklet(func, dependencyList) {
|
|
22
|
-
const worklet =
|
|
26
|
+
const worklet = useMemo(() => {
|
|
23
27
|
const context = Worklets.defaultContext;
|
|
24
28
|
return context.createRunAsync(func);
|
|
25
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
29
|
}, dependencyList);
|
|
27
30
|
return worklet;
|
|
28
31
|
}
|
|
@@ -36,8 +39,7 @@ function useWorklet(func, dependencyList) {
|
|
|
36
39
|
* @returns {UseRunInJSType} a memoized Worklet
|
|
37
40
|
*/
|
|
38
41
|
function useRunInJS(func, dependencyList) {
|
|
39
|
-
|
|
40
|
-
return React.useMemo(() => Worklets.createRunOnJS(func), dependencyList);
|
|
42
|
+
return useMemo(() => Worklets.createRunOnJS(func), dependencyList);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
/**
|
|
@@ -49,6 +51,7 @@ function useRunInJS(func, dependencyList) {
|
|
|
49
51
|
export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
50
52
|
faceDetectionOptions,
|
|
51
53
|
faceDetectionCallback,
|
|
54
|
+
// skiaActions,
|
|
52
55
|
...props
|
|
53
56
|
}, ref) => {
|
|
54
57
|
const {
|
|
@@ -58,6 +61,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
58
61
|
* Is there an async task already running?
|
|
59
62
|
*/
|
|
60
63
|
const isAsyncContextBusy = useSharedValue(false);
|
|
64
|
+
const faces = useSharedValue('[]');
|
|
61
65
|
|
|
62
66
|
/**
|
|
63
67
|
* Throws logs/errors back on js thread
|
|
@@ -73,7 +77,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
73
77
|
/**
|
|
74
78
|
* Runs on detection callback on js thread
|
|
75
79
|
*/
|
|
76
|
-
const
|
|
80
|
+
const runOnJs = useRunInJS(faceDetectionCallback, [faceDetectionCallback]);
|
|
77
81
|
|
|
78
82
|
/**
|
|
79
83
|
* Async context that will handle face detection
|
|
@@ -82,11 +86,11 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
82
86
|
'worklet';
|
|
83
87
|
|
|
84
88
|
try {
|
|
85
|
-
|
|
89
|
+
faces.value = JSON.stringify(detectFaces(frame));
|
|
86
90
|
// increment frame count so we can use frame on
|
|
87
91
|
// js side without frame processor getting stuck
|
|
88
92
|
frame.incrementRefCount();
|
|
89
|
-
|
|
93
|
+
runOnJs(JSON.parse(faces.value), frame).finally(() => {
|
|
90
94
|
'worklet';
|
|
91
95
|
|
|
92
96
|
// finally decrement frame count so it can be dropped
|
|
@@ -98,7 +102,7 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
98
102
|
frame.decrementRefCount();
|
|
99
103
|
isAsyncContextBusy.value = false;
|
|
100
104
|
}
|
|
101
|
-
}, [detectFaces,
|
|
105
|
+
}, [detectFaces, runOnJs]);
|
|
102
106
|
|
|
103
107
|
/**
|
|
104
108
|
* Detect faces on frame on an async context without blocking camera preview
|
|
@@ -119,42 +123,64 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
119
123
|
}
|
|
120
124
|
|
|
121
125
|
/**
|
|
122
|
-
*
|
|
126
|
+
* Skia frame processor
|
|
127
|
+
*/
|
|
128
|
+
// NOTE - temporary without skia
|
|
129
|
+
// const skiaFrameProcessor = useSkiaFrameProcessor(
|
|
130
|
+
// (frame) => {
|
|
131
|
+
// 'worklet';
|
|
132
|
+
// frame.render();
|
|
133
|
+
// skiaActions!(JSON.parse(faces.value), frame);
|
|
134
|
+
// runAsync(frame);
|
|
135
|
+
// },
|
|
136
|
+
// [runOnAsyncContext, skiaActions]
|
|
137
|
+
// );
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Default frame processor
|
|
123
141
|
*/
|
|
124
|
-
const
|
|
142
|
+
const cameraFrameProcessor = useFrameProcessor(frame => {
|
|
125
143
|
'worklet';
|
|
126
144
|
|
|
127
145
|
runAsync(frame);
|
|
128
146
|
}, [runOnAsyncContext]);
|
|
129
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Camera frame processor
|
|
150
|
+
*/
|
|
151
|
+
const frameProcessor = (() => {
|
|
152
|
+
// const { autoMode } = faceDetectionOptions ?? {};
|
|
153
|
+
|
|
154
|
+
// if (!autoMode && !!skiaActions) return skiaFrameProcessor;
|
|
155
|
+
|
|
156
|
+
return cameraFrameProcessor;
|
|
157
|
+
})();
|
|
158
|
+
|
|
130
159
|
//
|
|
131
160
|
// use bellow when vision-camera's
|
|
132
161
|
// context creation issue is solved
|
|
133
162
|
//
|
|
134
|
-
/**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
// const runOnJs = useRunOnJS(faceDetectionCallback, [
|
|
138
|
-
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
//
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
// )
|
|
163
|
+
// /**
|
|
164
|
+
// * Runs on detection callback on js thread
|
|
165
|
+
// */
|
|
166
|
+
// const runOnJs = useRunOnJS( faceDetectionCallback, [
|
|
167
|
+
// faceDetectionCallback
|
|
168
|
+
// ] )
|
|
169
|
+
|
|
170
|
+
// const cameraFrameProcessor = useFrameProcessor( ( frame ) => {
|
|
171
|
+
// 'worklet'
|
|
172
|
+
// runAsync( frame, () => {
|
|
173
|
+
// 'worklet'
|
|
174
|
+
// runOnJs(
|
|
175
|
+
// detectFaces( frame ),
|
|
176
|
+
// frame
|
|
177
|
+
// )
|
|
178
|
+
// } )
|
|
179
|
+
// }, [ runOnJs ] )
|
|
150
180
|
|
|
151
181
|
return /*#__PURE__*/_jsx(VisionCamera, {
|
|
152
|
-
ref: ref
|
|
153
|
-
|
|
154
|
-
// Platform.OS === 'android' ? processorAndroid : processorIOS
|
|
155
|
-
// }
|
|
156
|
-
,
|
|
157
|
-
frameProcessor: processorAndroid,
|
|
182
|
+
ref: ref,
|
|
183
|
+
frameProcessor: frameProcessor,
|
|
158
184
|
pixelFormat: Platform.OS === 'android' ? 'yuv' : 'rgb',
|
|
159
185
|
...props
|
|
160
186
|
});
|
package/lib/module/Camera.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Platform","Camera","VisionCamera","useFrameProcessor","Worklets","useSharedValue","useFaceDetector","jsx","_jsx","useWorklet","func","dependencyList","worklet","
|
|
1
|
+
{"version":3,"names":["React","useMemo","Platform","Camera","VisionCamera","useFrameProcessor","Worklets","useSharedValue","useFaceDetector","jsx","_jsx","useWorklet","func","dependencyList","worklet","context","defaultContext","createRunAsync","useRunInJS","createRunOnJS","forwardRef","faceDetectionOptions","faceDetectionCallback","props","ref","detectFaces","isAsyncContextBusy","faces","logOnJs","log","error","console","message","JSON","stringify","runOnJs","runOnAsyncContext","frame","value","incrementRefCount","parse","finally","decrementRefCount","runAsync","internal","cameraFrameProcessor","frameProcessor","pixelFormat","OS"],"sourceRoot":"../../src","sources":["Camera.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","VisionCameraProxy","createFaceDetectorPlugin","options","plugin","initFrameProcessorPlugin","Error","detectFaces","frame","call","useFaceDetector"],"sourceRoot":"../../src","sources":["FaceDetector.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,
|
|
1
|
+
{"version":3,"names":["useMemo","VisionCameraProxy","createFaceDetectorPlugin","options","plugin","initFrameProcessorPlugin","Error","detectFaces","frame","call","useFaceDetector"],"sourceRoot":"../../src","sources":["FaceDetector.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SACEC,iBAAiB,QAGZ,4BAA4B;AAoJnC;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,wBAAwBA,CAC/BC,OAA8B,EACV;EACpB,MAAMC,MAAM,GAAGH,iBAAiB,CAACI,wBAAwB,CAAC,aAAa,EAAE;IACvE,GAAGF;EACL,CAAC,CAAC;EAEF,IAAI,CAACC,MAAM,EAAE;IACX,MAAM,IAAIE,KAAK,CAAC,sDAAsD,CAAC;EACzE;EAEA,OAAO;IACLC,WAAW,EAAGC,KAAY,IAAa;MACrC,SAAS;;MACT;MACA,OAAOJ,MAAM,CAACK,IAAI,CAACD,KAAK,CAAC;IAC3B;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAC7BP,OAA8B,EACV;EACpB,OAAOH,OAAO,CAAC,MAAME,wBAAwB,CAACC,OAAO,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;AACpE","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/Camera.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/Camera.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EACL,MAAM,IAAI,YAAY,EAGvB,MAAM,4BAA4B,CAAC;AAUpC,OAAO,KAAK,EACV,WAAW,EAEX,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;AA2C1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM;2BA9CM,oBAAoB;2BACpB,YAAY;oDA4LpC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Frame } from 'react-native-vision-camera';
|
|
1
|
+
import { type CameraPosition, type Frame } from 'react-native-vision-camera';
|
|
2
2
|
type FaceDetectorPlugin = {
|
|
3
3
|
/**
|
|
4
4
|
* Detect faces on frame
|
|
@@ -19,9 +19,9 @@ export interface Face {
|
|
|
19
19
|
leftEyeOpenProbability: number;
|
|
20
20
|
rightEyeOpenProbability: number;
|
|
21
21
|
smilingProbability: number;
|
|
22
|
-
contours
|
|
23
|
-
landmarks
|
|
24
|
-
data:
|
|
22
|
+
contours?: Contours;
|
|
23
|
+
landmarks?: Landmarks;
|
|
24
|
+
data: number[];
|
|
25
25
|
}
|
|
26
26
|
export interface Bounds {
|
|
27
27
|
width: number;
|
|
@@ -98,13 +98,31 @@ export interface FaceDetectionOptions {
|
|
|
98
98
|
*/
|
|
99
99
|
trackingEnabled?: boolean;
|
|
100
100
|
/**
|
|
101
|
-
* Should auto scale face bounds, contour and landmarks on native side?
|
|
101
|
+
* Should handle auto scale (face bounds, contour and landmarks) and rotation on native side?
|
|
102
102
|
* This option should be disabled if you want to draw on frame using `Skia Frame Processor`.
|
|
103
103
|
* See [this](https://github.com/luicfrr/react-native-vision-camera-face-detector/issues/30#issuecomment-2058805546) and [this](https://github.com/luicfrr/react-native-vision-camera-face-detector/issues/35) for more details.
|
|
104
104
|
*
|
|
105
105
|
* @default false
|
|
106
106
|
*/
|
|
107
|
-
|
|
107
|
+
autoMode?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Required if you want to use `autoMode`. You must handle your own logic to get screen sizes, with or without statusbar size, etc...
|
|
110
|
+
*
|
|
111
|
+
* @default 1.0
|
|
112
|
+
*/
|
|
113
|
+
windowWidth?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Required if you want to use `autoMode`. You must handle your own logic to get screen sizes, with or without statusbar size, etc...
|
|
116
|
+
*
|
|
117
|
+
* @default 1.0
|
|
118
|
+
*/
|
|
119
|
+
windowHeight?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Current active camera
|
|
122
|
+
*
|
|
123
|
+
* @default front
|
|
124
|
+
*/
|
|
125
|
+
cameraFacing?: CameraPosition;
|
|
108
126
|
/**
|
|
109
127
|
* for enable/disable tensorflow lite logic, just face detection
|
|
110
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/Camera.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../../src/Camera.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EACL,MAAM,IAAI,YAAY,EAGvB,MAAM,4BAA4B,CAAC;AAUpC,OAAO,KAAK,EACV,WAAW,EAEX,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;AA2C1E;;;;;GAKG;AACH,eAAO,MAAM,MAAM;2BA9CM,oBAAoB;2BACpB,YAAY;oDA4LpC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Frame } from 'react-native-vision-camera';
|
|
1
|
+
import { type CameraPosition, type Frame } from 'react-native-vision-camera';
|
|
2
2
|
type FaceDetectorPlugin = {
|
|
3
3
|
/**
|
|
4
4
|
* Detect faces on frame
|
|
@@ -19,9 +19,9 @@ export interface Face {
|
|
|
19
19
|
leftEyeOpenProbability: number;
|
|
20
20
|
rightEyeOpenProbability: number;
|
|
21
21
|
smilingProbability: number;
|
|
22
|
-
contours
|
|
23
|
-
landmarks
|
|
24
|
-
data:
|
|
22
|
+
contours?: Contours;
|
|
23
|
+
landmarks?: Landmarks;
|
|
24
|
+
data: number[];
|
|
25
25
|
}
|
|
26
26
|
export interface Bounds {
|
|
27
27
|
width: number;
|
|
@@ -98,13 +98,31 @@ export interface FaceDetectionOptions {
|
|
|
98
98
|
*/
|
|
99
99
|
trackingEnabled?: boolean;
|
|
100
100
|
/**
|
|
101
|
-
* Should auto scale face bounds, contour and landmarks on native side?
|
|
101
|
+
* Should handle auto scale (face bounds, contour and landmarks) and rotation on native side?
|
|
102
102
|
* This option should be disabled if you want to draw on frame using `Skia Frame Processor`.
|
|
103
103
|
* See [this](https://github.com/luicfrr/react-native-vision-camera-face-detector/issues/30#issuecomment-2058805546) and [this](https://github.com/luicfrr/react-native-vision-camera-face-detector/issues/35) for more details.
|
|
104
104
|
*
|
|
105
105
|
* @default false
|
|
106
106
|
*/
|
|
107
|
-
|
|
107
|
+
autoMode?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Required if you want to use `autoMode`. You must handle your own logic to get screen sizes, with or without statusbar size, etc...
|
|
110
|
+
*
|
|
111
|
+
* @default 1.0
|
|
112
|
+
*/
|
|
113
|
+
windowWidth?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Required if you want to use `autoMode`. You must handle your own logic to get screen sizes, with or without statusbar size, etc...
|
|
116
|
+
*
|
|
117
|
+
* @default 1.0
|
|
118
|
+
*/
|
|
119
|
+
windowHeight?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Current active camera
|
|
122
|
+
*
|
|
123
|
+
* @default front
|
|
124
|
+
*/
|
|
125
|
+
cameraFacing?: CameraPosition;
|
|
108
126
|
/**
|
|
109
127
|
* for enable/disable tensorflow lite logic, just face detection
|
|
110
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"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"}
|