vision-camera-face-detection 1.2.3 → 1.2.5
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/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionPlugin.kt +35 -23
- package/ios/FaceHelper.swift +109 -89
- package/ios/VisionCameraFaceDetectionModule.swift +2 -8
- package/ios/VisionCameraFaceDetectionPlugin.swift +25 -20
- package/lib/commonjs/{Camera.cjs → Camera.js} +4 -4
- package/lib/commonjs/{Camera.cjs.map → Camera.js.map} +1 -1
- package/lib/commonjs/{FaceDetector.cjs → FaceDetector.js} +1 -1
- package/lib/commonjs/{FaceDetector.cjs.map → FaceDetector.js.map} +1 -1
- package/lib/commonjs/{Tensor.cjs → Tensor.js} +1 -1
- package/lib/commonjs/{index.cjs → index.js} +4 -4
- package/lib/commonjs/package.json +1 -0
- package/lib/module/{Camera.mjs → Camera.js} +6 -4
- package/lib/module/Camera.js.map +1 -0
- package/lib/module/{FaceDetector.mjs → FaceDetector.js} +3 -1
- package/lib/module/FaceDetector.js.map +1 -0
- package/lib/module/{Tensor.mjs → Tensor.js} +3 -1
- package/lib/module/Tensor.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/Camera.d.ts.map +1 -0
- package/lib/typescript/{src → commonjs/src}/FaceDetector.d.ts +4 -0
- package/lib/typescript/commonjs/src/FaceDetector.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/Tensor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/Camera.d.ts +17 -0
- package/lib/typescript/module/src/Camera.d.ts.map +1 -0
- package/lib/typescript/module/src/FaceDetector.d.ts +122 -0
- package/lib/typescript/module/src/FaceDetector.d.ts.map +1 -0
- package/lib/typescript/module/src/Tensor.d.ts +8 -0
- package/lib/typescript/module/src/Tensor.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +4 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/package.json +18 -13
- package/src/Camera.tsx +1 -1
- package/src/FaceDetector.ts +5 -0
- package/lib/module/Camera.mjs.map +0 -1
- package/lib/module/FaceDetector.mjs.map +0 -1
- package/lib/module/Tensor.mjs.map +0 -1
- package/lib/module/index.mjs +0 -4
- package/lib/module/index.mjs.map +0 -1
- package/lib/typescript/src/Camera.d.ts.map +0 -1
- package/lib/typescript/src/FaceDetector.d.ts.map +0 -1
- package/lib/typescript/src/Tensor.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts.map +0 -1
- /package/lib/commonjs/{Tensor.cjs.map → Tensor.js.map} +0 -0
- /package/lib/commonjs/{index.cjs.map → index.js.map} +0 -0
- /package/lib/typescript/{src → commonjs/src}/Camera.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/Tensor.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/index.d.ts +0 -0
package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionPlugin.kt
CHANGED
|
@@ -42,11 +42,15 @@ class VisionCameraFaceDetectionPlugin(
|
|
|
42
42
|
private var runClassifications = false
|
|
43
43
|
private var runContours = false
|
|
44
44
|
private var trackingEnabled = false
|
|
45
|
+
private var enableTensor = false
|
|
45
46
|
|
|
46
47
|
init {
|
|
47
48
|
// handle auto scaling
|
|
48
49
|
autoScale = options?.get("autoScale").toString() == "true"
|
|
49
50
|
|
|
51
|
+
// handle enable/disable tensor
|
|
52
|
+
enableTensor = options?.get("enableTensor").toString() == "true"
|
|
53
|
+
|
|
50
54
|
// initializes faceDetector on creation
|
|
51
55
|
var performanceModeValue = FaceDetectorOptions.PERFORMANCE_MODE_FAST
|
|
52
56
|
var landmarkModeValue = FaceDetectorOptions.LANDMARK_MODE_NONE
|
|
@@ -117,16 +121,19 @@ class VisionCameraFaceDetectionPlugin(
|
|
|
117
121
|
bounds["x"] = (-y + sourceWidth * scaleX) - width
|
|
118
122
|
bounds["y"] = (-x + sourceHeight * scaleY) - height
|
|
119
123
|
}
|
|
124
|
+
|
|
120
125
|
Orientation.LANDSCAPE_LEFT -> {
|
|
121
126
|
// device is portrait
|
|
122
127
|
bounds["x"] = (-x + sourceWidth * scaleX) - width
|
|
123
128
|
bounds["y"] = y
|
|
124
129
|
}
|
|
130
|
+
|
|
125
131
|
Orientation.PORTRAIT_UPSIDE_DOWN -> {
|
|
126
132
|
// device is landscape right
|
|
127
133
|
bounds["x"] = y
|
|
128
134
|
bounds["y"] = x
|
|
129
135
|
}
|
|
136
|
+
|
|
130
137
|
Orientation.LANDSCAPE_RIGHT -> {
|
|
131
138
|
// device is upside down
|
|
132
139
|
bounds["x"] = x
|
|
@@ -289,30 +296,36 @@ class VisionCameraFaceDetectionPlugin(
|
|
|
289
296
|
val task = faceDetector!!.process(image)
|
|
290
297
|
val faces = Tasks.await(task)
|
|
291
298
|
faces.forEach { face ->
|
|
292
|
-
val
|
|
293
|
-
val bmpFaceResult =
|
|
294
|
-
Bitmap.createBitmap(
|
|
295
|
-
TF_OD_API_INPUT_SIZE,
|
|
296
|
-
TF_OD_API_INPUT_SIZE,
|
|
297
|
-
Bitmap.Config.ARGB_8888
|
|
298
|
-
)
|
|
299
|
-
val faceBB = RectF(face.boundingBox)
|
|
300
|
-
val cvFace = Canvas(bmpFaceResult)
|
|
301
|
-
val sx = TF_OD_API_INPUT_SIZE.toFloat() / faceBB.width()
|
|
302
|
-
val sy = TF_OD_API_INPUT_SIZE.toFloat() / faceBB.height()
|
|
303
|
-
val matrix = Matrix()
|
|
304
|
-
matrix.postTranslate(-faceBB.left, -faceBB.top)
|
|
305
|
-
matrix.postScale(sx, sy)
|
|
306
|
-
cvFace.drawBitmap(bmpFrameResult, matrix, null)
|
|
307
|
-
val input: ByteBuffer = FaceHelper().bitmap2ByteBuffer(bmpFaceResult)
|
|
308
|
-
val output: FloatBuffer = FloatBuffer.allocate(192)
|
|
309
|
-
interpreter?.run(input, output)
|
|
310
|
-
|
|
299
|
+
val map: MutableMap<String, Any> = HashMap()
|
|
311
300
|
val arrayData: MutableList<Any> = ArrayList()
|
|
312
|
-
|
|
313
|
-
|
|
301
|
+
if (enableTensor) {
|
|
302
|
+
val bmpFrameResult = ImageConvertUtils.getInstance().getUpRightBitmap(image)
|
|
303
|
+
val bmpFaceResult =
|
|
304
|
+
Bitmap.createBitmap(
|
|
305
|
+
TF_OD_API_INPUT_SIZE,
|
|
306
|
+
TF_OD_API_INPUT_SIZE,
|
|
307
|
+
Bitmap.Config.ARGB_8888
|
|
308
|
+
)
|
|
309
|
+
val faceBB = RectF(face.boundingBox)
|
|
310
|
+
val cvFace = Canvas(bmpFaceResult)
|
|
311
|
+
val sx = TF_OD_API_INPUT_SIZE.toFloat() / faceBB.width()
|
|
312
|
+
val sy = TF_OD_API_INPUT_SIZE.toFloat() / faceBB.height()
|
|
313
|
+
val matrix = Matrix()
|
|
314
|
+
matrix.postTranslate(-faceBB.left, -faceBB.top)
|
|
315
|
+
matrix.postScale(sx, sy)
|
|
316
|
+
cvFace.drawBitmap(bmpFrameResult, matrix, null)
|
|
317
|
+
val input: ByteBuffer = FaceHelper().bitmap2ByteBuffer(bmpFaceResult)
|
|
318
|
+
val output: FloatBuffer = FloatBuffer.allocate(192)
|
|
319
|
+
interpreter?.run(input, output)
|
|
320
|
+
|
|
321
|
+
for (i: Float in output.array()) {
|
|
322
|
+
arrayData.add(i.toDouble())
|
|
323
|
+
}
|
|
324
|
+
map["data"] = arrayData
|
|
325
|
+
} else {
|
|
326
|
+
map["data"] = arrayData
|
|
314
327
|
}
|
|
315
|
-
|
|
328
|
+
|
|
316
329
|
if (runLandmarks) {
|
|
317
330
|
map["landmarks"] = processLandmarks(
|
|
318
331
|
face,
|
|
@@ -346,7 +359,6 @@ class VisionCameraFaceDetectionPlugin(
|
|
|
346
359
|
scaleX,
|
|
347
360
|
scaleY
|
|
348
361
|
)
|
|
349
|
-
map["data"] = arrayData
|
|
350
362
|
result.add(map)
|
|
351
363
|
}
|
|
352
364
|
} catch (e: Exception) {
|
package/ios/FaceHelper.swift
CHANGED
|
@@ -16,85 +16,85 @@ let inputHeight = 112
|
|
|
16
16
|
var interpreter: Interpreter? = nil
|
|
17
17
|
|
|
18
18
|
class FaceHelper {
|
|
19
|
-
static func processContours(from face: Face) -> [String:[[String:CGFloat]]] {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
let faceContoursTypesStrings = [
|
|
39
|
-
"FACE",
|
|
40
|
-
"LEFT_EYEBROW_TOP",
|
|
41
|
-
"LEFT_EYEBROW_BOTTOM",
|
|
42
|
-
"RIGHT_EYEBROW_TOP",
|
|
43
|
-
"RIGHT_EYEBROW_BOTTOM",
|
|
44
|
-
"LEFT_EYE",
|
|
45
|
-
"RIGHT_EYE",
|
|
46
|
-
"UPPER_LIP_TOP",
|
|
47
|
-
"UPPER_LIP_BOTTOM",
|
|
48
|
-
"LOWER_LIP_TOP",
|
|
49
|
-
"LOWER_LIP_BOTTOM",
|
|
50
|
-
"NOSE_BRIDGE",
|
|
51
|
-
"NOSE_BOTTOM",
|
|
52
|
-
"LEFT_CHEEK",
|
|
53
|
-
"RIGHT_CHEEK",
|
|
54
|
-
];
|
|
55
|
-
|
|
56
|
-
var faceContoursTypesMap: [String:[[String:CGFloat]]] = [:]
|
|
57
|
-
|
|
58
|
-
for i in 0..<faceContoursTypes.count {
|
|
59
|
-
let contour = face.contour(ofType: faceContoursTypes[i]);
|
|
60
|
-
|
|
61
|
-
var pointsArray: [[String:CGFloat]] = []
|
|
62
|
-
|
|
63
|
-
if let points = contour?.points {
|
|
64
|
-
for point in points {
|
|
65
|
-
let currentPointsMap = [
|
|
66
|
-
"x": point.x,
|
|
67
|
-
"y": point.y,
|
|
68
|
-
]
|
|
69
|
-
|
|
70
|
-
pointsArray.append(currentPointsMap)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
faceContoursTypesMap[faceContoursTypesStrings[i]] = pointsArray
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return faceContoursTypesMap
|
|
78
|
-
}
|
|
19
|
+
// static func processContours(from face: Face) -> [String:[[String:CGFloat]]] {
|
|
20
|
+
// let faceContoursTypes = [
|
|
21
|
+
// FaceContourType.face,
|
|
22
|
+
// FaceContourType.leftEyebrowTop,
|
|
23
|
+
// FaceContourType.leftEyebrowBottom,
|
|
24
|
+
// FaceContourType.rightEyebrowTop,
|
|
25
|
+
// FaceContourType.rightEyebrowBottom,
|
|
26
|
+
// FaceContourType.leftEye,
|
|
27
|
+
// FaceContourType.rightEye,
|
|
28
|
+
// FaceContourType.upperLipTop,
|
|
29
|
+
// FaceContourType.upperLipBottom,
|
|
30
|
+
// FaceContourType.lowerLipTop,
|
|
31
|
+
// FaceContourType.lowerLipBottom,
|
|
32
|
+
// FaceContourType.noseBridge,
|
|
33
|
+
// FaceContourType.noseBottom,
|
|
34
|
+
// FaceContourType.leftCheek,
|
|
35
|
+
// FaceContourType.rightCheek,
|
|
36
|
+
// ]
|
|
79
37
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
38
|
+
// let faceContoursTypesStrings = [
|
|
39
|
+
// "FACE",
|
|
40
|
+
// "LEFT_EYEBROW_TOP",
|
|
41
|
+
// "LEFT_EYEBROW_BOTTOM",
|
|
42
|
+
// "RIGHT_EYEBROW_TOP",
|
|
43
|
+
// "RIGHT_EYEBROW_BOTTOM",
|
|
44
|
+
// "LEFT_EYE",
|
|
45
|
+
// "RIGHT_EYE",
|
|
46
|
+
// "UPPER_LIP_TOP",
|
|
47
|
+
// "UPPER_LIP_BOTTOM",
|
|
48
|
+
// "LOWER_LIP_TOP",
|
|
49
|
+
// "LOWER_LIP_BOTTOM",
|
|
50
|
+
// "NOSE_BRIDGE",
|
|
51
|
+
// "NOSE_BOTTOM",
|
|
52
|
+
// "LEFT_CHEEK",
|
|
53
|
+
// "RIGHT_CHEEK",
|
|
54
|
+
// ];
|
|
55
|
+
|
|
56
|
+
// var faceContoursTypesMap: [String:[[String:CGFloat]]] = [:]
|
|
57
|
+
|
|
58
|
+
// for i in 0..<faceContoursTypes.count {
|
|
59
|
+
// let contour = face.contour(ofType: faceContoursTypes[i]);
|
|
60
|
+
|
|
61
|
+
// var pointsArray: [[String:CGFloat]] = []
|
|
62
|
+
|
|
63
|
+
// if let points = contour?.points {
|
|
64
|
+
// for point in points {
|
|
65
|
+
// let currentPointsMap = [
|
|
66
|
+
// "x": point.x,
|
|
67
|
+
// "y": point.y,
|
|
68
|
+
// ]
|
|
69
|
+
|
|
70
|
+
// pointsArray.append(currentPointsMap)
|
|
71
|
+
// }
|
|
72
|
+
|
|
73
|
+
// faceContoursTypesMap[faceContoursTypesStrings[i]] = pointsArray
|
|
74
|
+
// }
|
|
75
|
+
// }
|
|
76
|
+
|
|
77
|
+
// return faceContoursTypesMap
|
|
78
|
+
// }
|
|
79
|
+
|
|
80
|
+
// static func processBoundingBox(from face: Face) -> [String:Any] {
|
|
81
|
+
// let frameRect = face.frame
|
|
82
|
+
|
|
83
|
+
// let offsetX = (frameRect.midX - ceil(frameRect.width)) / 2.0
|
|
84
|
+
// let offsetY = (frameRect.midY - ceil(frameRect.height)) / 2.0
|
|
85
|
+
|
|
86
|
+
// let x = frameRect.maxX + offsetX
|
|
87
|
+
// let y = frameRect.minY + offsetY
|
|
88
|
+
|
|
89
|
+
// return [
|
|
90
|
+
// "x": frameRect.midX + (frameRect.midX - x),
|
|
91
|
+
// "y": frameRect.midY + (y - frameRect.midY),
|
|
92
|
+
// "width": frameRect.width,
|
|
93
|
+
// "height": frameRect.height,
|
|
94
|
+
// "boundingCenterX": frameRect.midX,
|
|
95
|
+
// "boundingCenterY": frameRect.midY
|
|
96
|
+
// ]
|
|
97
|
+
// }
|
|
98
98
|
|
|
99
99
|
static func getImageFaceFromUIImage(from image: UIImage, rectImage: CGRect) -> UIImage? {
|
|
100
100
|
let imageRef: CGImage = (image.cgImage?.cropping(to: rectImage)!)!
|
|
@@ -107,11 +107,8 @@ class FaceHelper {
|
|
|
107
107
|
return imageData.base64EncodedString()
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
static func rgbDataFromBuffer(
|
|
111
|
-
|
|
112
|
-
byteCount: Int,
|
|
113
|
-
isModelQuantized: Bool
|
|
114
|
-
) -> Data? {
|
|
110
|
+
static func rgbDataFromBuffer(_ buffer: CVPixelBuffer) -> Data? {
|
|
111
|
+
let byteCount = batchSize * inputWidth * inputHeight * inputChannels
|
|
115
112
|
CVPixelBufferLockBaseAddress(buffer, .readOnly)
|
|
116
113
|
defer {
|
|
117
114
|
CVPixelBufferUnlockBaseAddress(buffer, .readOnly)
|
|
@@ -160,11 +157,6 @@ class FaceHelper {
|
|
|
160
157
|
}
|
|
161
158
|
|
|
162
159
|
let byteData = Data(bytes: destinationBuffer.data, count: destinationBuffer.rowBytes * height)
|
|
163
|
-
if isModelQuantized {
|
|
164
|
-
return byteData
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Not quantized, convert to floats
|
|
168
160
|
let bytes = Array<UInt8>(unsafeData: byteData)!
|
|
169
161
|
var floats = [Float]()
|
|
170
162
|
for i in 0..<bytes.count {
|
|
@@ -218,6 +210,35 @@ class FaceHelper {
|
|
|
218
210
|
return nil
|
|
219
211
|
}
|
|
220
212
|
}
|
|
213
|
+
|
|
214
|
+
// static func getDataFromPixel(pixelBuffer: CVPixelBuffer) -> Data {
|
|
215
|
+
// CVPixelBufferLockBaseAddress(pixelBuffer, [.readOnly])
|
|
216
|
+
// defer { CVPixelBufferUnlockBaseAddress(pixelBuffer, [.readOnly]) }
|
|
217
|
+
//
|
|
218
|
+
// // Calculate sum of planes' size
|
|
219
|
+
// var totalSize = 0
|
|
220
|
+
// for plane in 0 ..< CVPixelBufferGetPlaneCount(pixelBuffer) {
|
|
221
|
+
// let height = CVPixelBufferGetHeightOfPlane(pixelBuffer, plane)
|
|
222
|
+
// let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, plane)
|
|
223
|
+
// let planeSize = height * bytesPerRow
|
|
224
|
+
// totalSize += planeSize
|
|
225
|
+
// }
|
|
226
|
+
//
|
|
227
|
+
// guard let rawFrame = malloc(totalSize) else { fatalError() }
|
|
228
|
+
// var dest = rawFrame
|
|
229
|
+
//
|
|
230
|
+
// for plane in 0 ..< CVPixelBufferGetPlaneCount(pixelBuffer) {
|
|
231
|
+
// let source = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, plane)
|
|
232
|
+
// let height = CVPixelBufferGetHeightOfPlane(pixelBuffer, plane)
|
|
233
|
+
// let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, plane)
|
|
234
|
+
// let planeSize = height * bytesPerRow
|
|
235
|
+
//
|
|
236
|
+
// memcpy(dest, source, planeSize)
|
|
237
|
+
// dest += planeSize
|
|
238
|
+
// }
|
|
239
|
+
//
|
|
240
|
+
// return Data(bytesNoCopy: rawFrame, count: totalSize, deallocator: .free)
|
|
241
|
+
// }
|
|
221
242
|
}
|
|
222
243
|
|
|
223
244
|
// MARK: - Extensions
|
|
@@ -235,4 +256,3 @@ extension Array {
|
|
|
235
256
|
self = unsafeData.withUnsafeBytes { .init($0.bindMemory(to: Element.self)) }
|
|
236
257
|
}
|
|
237
258
|
}
|
|
238
|
-
|
|
@@ -66,19 +66,13 @@ class VisionCameraFaceDetectionModule: NSObject {
|
|
|
66
66
|
reject("Failed to get pixelBuffer", nil, nil)
|
|
67
67
|
return
|
|
68
68
|
}
|
|
69
|
-
guard let rgbData = FaceHelper.rgbDataFromBuffer(
|
|
70
|
-
pixelBuffer,
|
|
71
|
-
byteCount: batchSize * inputWidth * inputHeight * inputChannels,
|
|
72
|
-
isModelQuantized: false
|
|
73
|
-
) else {
|
|
69
|
+
guard let rgbData = FaceHelper.rgbDataFromBuffer(pixelBuffer) else {
|
|
74
70
|
reject("Failed to convert the image buffer to RGB data.", nil, nil)
|
|
75
71
|
return
|
|
76
72
|
}
|
|
77
|
-
// Copy the RGB data to the input `Tensor`.
|
|
78
73
|
try interpreter?.copy(rgbData, toInputAt: 0)
|
|
79
|
-
// Run inference by invoking the `Interpreter`.
|
|
80
74
|
try interpreter?.invoke()
|
|
81
|
-
|
|
75
|
+
|
|
82
76
|
let outputTensor: Tensor? = try interpreter?.output(at: 0)
|
|
83
77
|
if ((outputTensor?.data) != nil) {
|
|
84
78
|
let result: [Float] = [Float32](unsafeData: outputTensor!.data) ?? []
|
|
@@ -20,6 +20,7 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
|
|
|
20
20
|
private var runClassifications = false
|
|
21
21
|
private var runContours = false
|
|
22
22
|
private var trackingEnabled = false
|
|
23
|
+
private var enableTensor = false
|
|
23
24
|
|
|
24
25
|
public override init(
|
|
25
26
|
proxy: VisionCameraProxyHolder,
|
|
@@ -30,6 +31,9 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
|
|
|
30
31
|
|
|
31
32
|
// handle auto scaling
|
|
32
33
|
autoScale = config?["autoScale"] as? Bool == true
|
|
34
|
+
|
|
35
|
+
// handle enable/disable tensor
|
|
36
|
+
enableTensor = config?["enableTensor"] as? Bool == true
|
|
33
37
|
|
|
34
38
|
// initializes faceDetector on creation
|
|
35
39
|
let minFaceSize = 0.15
|
|
@@ -268,26 +272,27 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
|
|
|
268
272
|
let faces: [Face] = try faceDetector!.results(in: image)
|
|
269
273
|
for face in faces {
|
|
270
274
|
var map: [String: Any] = [:]
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
pixelBuffer
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
275
|
+
if enableTensor {
|
|
276
|
+
guard let imageCrop = FaceHelper.getImageFaceFromBuffer(from: frame.buffer, rectImage: face.frame, orientation: orientation) else {
|
|
277
|
+
return nil
|
|
278
|
+
}
|
|
279
|
+
guard let pixelBuffer = FaceHelper.uiImageToPixelBuffer(image: imageCrop, size: inputWidth) else {
|
|
280
|
+
return nil
|
|
281
|
+
}
|
|
282
|
+
guard let rgbData = FaceHelper.rgbDataFromBuffer(pixelBuffer) else {
|
|
283
|
+
return nil
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
try interpreter?.copy(rgbData, toInputAt: 0)
|
|
287
|
+
try interpreter?.invoke()
|
|
288
|
+
let outputTensor: Tensor? = try interpreter?.output(at: 0)
|
|
289
|
+
|
|
290
|
+
if ((outputTensor?.data) != nil) {
|
|
291
|
+
let result: [Float] = [Float32](unsafeData: outputTensor!.data) ?? []
|
|
292
|
+
map["data"] = result
|
|
293
|
+
} else {
|
|
294
|
+
map["data"] = []
|
|
295
|
+
}
|
|
291
296
|
} else {
|
|
292
297
|
map["data"] = []
|
|
293
298
|
}
|
|
@@ -8,7 +8,7 @@ var _react = _interopRequireDefault(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
|
-
var _FaceDetector = require("./FaceDetector.
|
|
11
|
+
var _FaceDetector = require("./FaceDetector.js");
|
|
12
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
// types
|
|
@@ -148,10 +148,10 @@ const Camera = exports.Camera = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
148
148
|
// });
|
|
149
149
|
}, [runOnJs]);
|
|
150
150
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeVisionCamera.Camera, {
|
|
151
|
-
...props,
|
|
152
151
|
ref: ref,
|
|
153
152
|
frameProcessor: _reactNative.Platform.OS === 'android' ? processorAndroid : processorIOS,
|
|
154
|
-
pixelFormat: _reactNative.Platform.OS === 'android' ? 'yuv' : 'rgb'
|
|
153
|
+
pixelFormat: _reactNative.Platform.OS === 'android' ? 'yuv' : 'rgb',
|
|
154
|
+
...props
|
|
155
155
|
});
|
|
156
156
|
});
|
|
157
|
-
//# sourceMappingURL=Camera.
|
|
157
|
+
//# sourceMappingURL=Camera.js.map
|
|
@@ -1 +1 @@
|
|
|
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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
|
|
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":["_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;AA+HA;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":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
var _Camera = require("./Camera.
|
|
6
|
+
var _Camera = require("./Camera.js");
|
|
7
7
|
Object.keys(_Camera).forEach(function (key) {
|
|
8
8
|
if (key === "default" || key === "__esModule") return;
|
|
9
9
|
if (key in exports && exports[key] === _Camera[key]) return;
|
|
@@ -14,7 +14,7 @@ Object.keys(_Camera).forEach(function (key) {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
-
var _FaceDetector = require("./FaceDetector.
|
|
17
|
+
var _FaceDetector = require("./FaceDetector.js");
|
|
18
18
|
Object.keys(_FaceDetector).forEach(function (key) {
|
|
19
19
|
if (key === "default" || key === "__esModule") return;
|
|
20
20
|
if (key in exports && exports[key] === _FaceDetector[key]) return;
|
|
@@ -25,7 +25,7 @@ Object.keys(_FaceDetector).forEach(function (key) {
|
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
|
-
var _Tensor = require("./Tensor.
|
|
28
|
+
var _Tensor = require("./Tensor.js");
|
|
29
29
|
Object.keys(_Tensor).forEach(function (key) {
|
|
30
30
|
if (key === "default" || key === "__esModule") return;
|
|
31
31
|
if (key in exports && exports[key] === _Tensor[key]) return;
|
|
@@ -36,4 +36,4 @@ Object.keys(_Tensor).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
-
//# sourceMappingURL=index.
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import React from 'react';
|
|
2
4
|
import { Platform } from 'react-native';
|
|
3
5
|
import { Camera as VisionCamera,
|
|
4
6
|
// runAsync,
|
|
5
7
|
useFrameProcessor } from 'react-native-vision-camera';
|
|
6
8
|
import { Worklets, useRunOnJS, useSharedValue } from 'react-native-worklets-core';
|
|
7
|
-
import { useFaceDetector } from "./FaceDetector.
|
|
9
|
+
import { useFaceDetector } from "./FaceDetector.js";
|
|
8
10
|
|
|
9
11
|
// types
|
|
10
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -143,10 +145,10 @@ export const Camera = /*#__PURE__*/React.forwardRef(({
|
|
|
143
145
|
// });
|
|
144
146
|
}, [runOnJs]);
|
|
145
147
|
return /*#__PURE__*/_jsx(VisionCamera, {
|
|
146
|
-
...props,
|
|
147
148
|
ref: ref,
|
|
148
149
|
frameProcessor: Platform.OS === 'android' ? processorAndroid : processorIOS,
|
|
149
|
-
pixelFormat: Platform.OS === 'android' ? 'yuv' : 'rgb'
|
|
150
|
+
pixelFormat: Platform.OS === 'android' ? 'yuv' : 'rgb',
|
|
151
|
+
...props
|
|
150
152
|
});
|
|
151
153
|
});
|
|
152
|
-
//# sourceMappingURL=Camera.
|
|
154
|
+
//# sourceMappingURL=Camera.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,3 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import { useMemo } from 'react';
|
|
2
4
|
import { VisionCameraProxy } from 'react-native-vision-camera';
|
|
3
5
|
/**
|
|
@@ -33,4 +35,4 @@ function createFaceDetectorPlugin(options) {
|
|
|
33
35
|
export function useFaceDetector(options) {
|
|
34
36
|
return useMemo(() => createFaceDetectorPlugin(options), [options]);
|
|
35
37
|
}
|
|
36
|
-
//# sourceMappingURL=FaceDetector.
|
|
38
|
+
//# sourceMappingURL=FaceDetector.js.map
|
|
@@ -0,0 +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,SAASC,iBAAiB,QAAoB,4BAA4B;AA+H1E;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,3 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
1
3
|
import { NativeModules, Platform } from 'react-native';
|
|
2
4
|
const LINKING_ERROR = `The package 'vision-camera-face-detection' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
|
|
3
5
|
ios: "- You have run 'pod install'\n",
|
|
@@ -14,4 +16,4 @@ export function initTensor(modelPath, count) {
|
|
|
14
16
|
export function detectFromBase64(imageString) {
|
|
15
17
|
return VisionCameraFaceDetectionModule.detectFromBase64(imageString);
|
|
16
18
|
}
|
|
17
|
-
//# sourceMappingURL=Tensor.
|
|
19
|
+
//# sourceMappingURL=Tensor.js.map
|
|
@@ -0,0 +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,CAC9BC,WAAmB,EACO;EAC1B,OAAOR,+BAA+B,CAACO,gBAAgB,CAACC,WAAW,CAAC;AACtE","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,cAAc,aAAU;AACxB,cAAc,mBAAgB;AAC9B,cAAc,aAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -105,6 +105,10 @@ export interface FaceDetectionOptions {
|
|
|
105
105
|
* @default false
|
|
106
106
|
*/
|
|
107
107
|
autoScale?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* for enable/disable tensorflow lite logic, just face detection
|
|
110
|
+
*/
|
|
111
|
+
enableTensor?: boolean;
|
|
108
112
|
}
|
|
109
113
|
/**
|
|
110
114
|
* Use an instance of face detector plugin.
|
|
@@ -0,0 +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,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;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAEpB"}
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Camera as VisionCamera } from 'react-native-vision-camera';
|
|
3
|
+
import type { CameraProps, Frame } from 'react-native-vision-camera';
|
|
4
|
+
import type { Face, FaceDetectionOptions } from './FaceDetector';
|
|
5
|
+
type CallbackType = (faces: Face[], frame: Frame) => void | Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Vision camera wrapper
|
|
8
|
+
*
|
|
9
|
+
* @param {ComponentType} props Camera + face detection props
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare const Camera: React.ForwardRefExoticComponent<{
|
|
13
|
+
faceDetectionOptions?: FaceDetectionOptions;
|
|
14
|
+
faceDetectionCallback: CallbackType;
|
|
15
|
+
} & CameraProps & React.RefAttributes<VisionCamera>>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=Camera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { type Frame } from 'react-native-vision-camera';
|
|
2
|
+
type FaceDetectorPlugin = {
|
|
3
|
+
/**
|
|
4
|
+
* Detect faces on frame
|
|
5
|
+
*
|
|
6
|
+
* @param {Frame} frame Frame to detect faces
|
|
7
|
+
*/
|
|
8
|
+
detectFaces: (frame: Frame) => Face[];
|
|
9
|
+
};
|
|
10
|
+
type Point = {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
};
|
|
14
|
+
export interface Face {
|
|
15
|
+
pitchAngle: number;
|
|
16
|
+
rollAngle: number;
|
|
17
|
+
yawAngle: number;
|
|
18
|
+
bounds: Bounds;
|
|
19
|
+
leftEyeOpenProbability: number;
|
|
20
|
+
rightEyeOpenProbability: number;
|
|
21
|
+
smilingProbability: number;
|
|
22
|
+
contours: Contours;
|
|
23
|
+
landmarks: Landmarks;
|
|
24
|
+
data: any;
|
|
25
|
+
}
|
|
26
|
+
export interface Bounds {
|
|
27
|
+
width: number;
|
|
28
|
+
height: number;
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}
|
|
32
|
+
export interface Contours {
|
|
33
|
+
FACE: Point[];
|
|
34
|
+
LEFT_EYEBROW_TOP: Point[];
|
|
35
|
+
LEFT_EYEBROW_BOTTOM: Point[];
|
|
36
|
+
RIGHT_EYEBROW_TOP: Point[];
|
|
37
|
+
RIGHT_EYEBROW_BOTTOM: Point[];
|
|
38
|
+
LEFT_EYE: Point[];
|
|
39
|
+
RIGHT_EYE: Point[];
|
|
40
|
+
UPPER_LIP_TOP: Point[];
|
|
41
|
+
UPPER_LIP_BOTTOM: Point[];
|
|
42
|
+
LOWER_LIP_TOP: Point[];
|
|
43
|
+
LOWER_LIP_BOTTOM: Point[];
|
|
44
|
+
NOSE_BRIDGE: Point[];
|
|
45
|
+
NOSE_BOTTOM: Point[];
|
|
46
|
+
LEFT_CHEEK: Point[];
|
|
47
|
+
RIGHT_CHEEK: Point[];
|
|
48
|
+
}
|
|
49
|
+
export interface Landmarks {
|
|
50
|
+
LEFT_CHEEK: Point;
|
|
51
|
+
LEFT_EAR: Point;
|
|
52
|
+
LEFT_EYE: Point;
|
|
53
|
+
MOUTH_BOTTOM: Point;
|
|
54
|
+
MOUTH_LEFT: Point;
|
|
55
|
+
MOUTH_RIGHT: Point;
|
|
56
|
+
NOSE_BASE: Point;
|
|
57
|
+
RIGHT_CHEEK: Point;
|
|
58
|
+
RIGHT_EAR: Point;
|
|
59
|
+
RIGHT_EYE: Point;
|
|
60
|
+
}
|
|
61
|
+
export interface FaceDetectionOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Favor speed or accuracy when detecting faces.
|
|
64
|
+
*
|
|
65
|
+
* @default 'fast'
|
|
66
|
+
*/
|
|
67
|
+
performanceMode?: 'fast' | 'accurate';
|
|
68
|
+
/**
|
|
69
|
+
* Whether to attempt to identify facial 'landmarks': eyes, ears, nose, cheeks, mouth, and so on.
|
|
70
|
+
*
|
|
71
|
+
* @default 'none'
|
|
72
|
+
*/
|
|
73
|
+
landmarkMode?: 'none' | 'all';
|
|
74
|
+
/**
|
|
75
|
+
* Whether to detect the contours of facial features. Contours are detected for only the most prominent face in an image.
|
|
76
|
+
*
|
|
77
|
+
* @default 'none'
|
|
78
|
+
*/
|
|
79
|
+
contourMode?: 'none' | 'all';
|
|
80
|
+
/**
|
|
81
|
+
* Whether or not to classify faces into categories such as 'smiling', and 'eyes open'.
|
|
82
|
+
*
|
|
83
|
+
* @default 'none'
|
|
84
|
+
*/
|
|
85
|
+
classificationMode?: 'none' | 'all';
|
|
86
|
+
/**
|
|
87
|
+
* Sets the smallest desired face size, expressed as the ratio of the width of the head to width of the image.
|
|
88
|
+
*
|
|
89
|
+
* @default 0.15
|
|
90
|
+
*/
|
|
91
|
+
minFaceSize?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Whether or not to assign faces an ID, which can be used to track faces across images.
|
|
94
|
+
*
|
|
95
|
+
* Note that when contour detection is enabled, only one face is detected, so face tracking doesn't produce useful results. For this reason, and to improve detection speed, don't enable both contour detection and face tracking.
|
|
96
|
+
*
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
99
|
+
trackingEnabled?: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Should auto scale face bounds, contour and landmarks on native side?
|
|
102
|
+
* This option should be disabled if you want to draw on frame using `Skia Frame Processor`.
|
|
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
|
+
*
|
|
105
|
+
* @default false
|
|
106
|
+
*/
|
|
107
|
+
autoScale?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* for enable/disable tensorflow lite logic, just face detection
|
|
110
|
+
*/
|
|
111
|
+
enableTensor?: boolean;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Use an instance of face detector plugin.
|
|
115
|
+
*
|
|
116
|
+
* @param {FaceDetectionOptions | undefined} options Detection options
|
|
117
|
+
* @returns {FaceDetectorPlugin} Memoized plugin instance that will be
|
|
118
|
+
* destroyed once the component using `useFaceDetector()` unmounts.
|
|
119
|
+
*/
|
|
120
|
+
export declare function useFaceDetector(options?: FaceDetectionOptions): FaceDetectorPlugin;
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=FaceDetector.d.ts.map
|
|
@@ -0,0 +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,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;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4BD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function initTensor(modelPath: string, count?: number): Promise<string>;
|
|
2
|
+
export declare function detectFromBase64(imageString: string): Promise<DetectBas64Type>;
|
|
3
|
+
export type DetectBas64Type = {
|
|
4
|
+
base64: string;
|
|
5
|
+
data: any;
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=Tensor.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vision-camera-face-detection",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Plugin Face Detection for Vision Camera 4",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
|
-
"main": "./lib/commonjs/index.
|
|
7
|
-
"module": "./lib/module/index.
|
|
8
|
-
"types": "./lib/typescript/src/index.d.ts",
|
|
6
|
+
"main": "./lib/commonjs/index.js",
|
|
7
|
+
"module": "./lib/module/index.js",
|
|
9
8
|
"exports": {
|
|
10
9
|
".": {
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./lib/typescript/module/src/index.d.ts",
|
|
12
|
+
"default": "./lib/module/index.js"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./lib/typescript/commonjs/src/index.d.ts",
|
|
16
|
+
"default": "./lib/commonjs/index.js"
|
|
17
|
+
}
|
|
14
18
|
}
|
|
15
19
|
},
|
|
16
20
|
"files": [
|
|
@@ -34,7 +38,7 @@
|
|
|
34
38
|
"scripts": {
|
|
35
39
|
"example": "yarn workspace vision-camera-face-detection-example",
|
|
36
40
|
"test": "jest",
|
|
37
|
-
"typecheck": "tsc
|
|
41
|
+
"typecheck": "tsc",
|
|
38
42
|
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
39
43
|
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
40
44
|
"prepare": "bob build",
|
|
@@ -73,9 +77,9 @@
|
|
|
73
77
|
"jest": "^29.7.0",
|
|
74
78
|
"prettier": "^3.0.3",
|
|
75
79
|
"react": "18.2.0",
|
|
76
|
-
"react-native": "0.74.
|
|
77
|
-
"react-native-builder-bob": "^0.
|
|
78
|
-
"react-native-vision-camera": "4.5.
|
|
80
|
+
"react-native": "0.74.5",
|
|
81
|
+
"react-native-builder-bob": "^0.29.1",
|
|
82
|
+
"react-native-vision-camera": "4.5.1",
|
|
79
83
|
"react-native-worklets-core": "1.3.3",
|
|
80
84
|
"release-it": "^15.0.0",
|
|
81
85
|
"turbo": "^1.10.7",
|
|
@@ -173,7 +177,8 @@
|
|
|
173
177
|
[
|
|
174
178
|
"typescript",
|
|
175
179
|
{
|
|
176
|
-
"project": "tsconfig.build.json"
|
|
180
|
+
"project": "tsconfig.build.json",
|
|
181
|
+
"esm": true
|
|
177
182
|
}
|
|
178
183
|
]
|
|
179
184
|
]
|
|
@@ -181,6 +186,6 @@
|
|
|
181
186
|
"create-react-native-library": {
|
|
182
187
|
"type": "module-legacy",
|
|
183
188
|
"languages": "kotlin-swift",
|
|
184
|
-
"version": "0.
|
|
189
|
+
"version": "0.40.0"
|
|
185
190
|
}
|
|
186
191
|
}
|
package/src/Camera.tsx
CHANGED
|
@@ -182,12 +182,12 @@ export const Camera = React.forwardRef(
|
|
|
182
182
|
|
|
183
183
|
return (
|
|
184
184
|
<VisionCamera
|
|
185
|
-
{...props}
|
|
186
185
|
ref={ref}
|
|
187
186
|
frameProcessor={
|
|
188
187
|
Platform.OS === 'android' ? processorAndroid : processorIOS
|
|
189
188
|
}
|
|
190
189
|
pixelFormat={Platform.OS === 'android' ? 'yuv' : 'rgb'}
|
|
190
|
+
{...props}
|
|
191
191
|
/>
|
|
192
192
|
);
|
|
193
193
|
}
|
package/src/FaceDetector.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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,SAASC,iBAAiB,QAAoB,4BAA4B;AA0H1E;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 +0,0 @@
|
|
|
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":[]}
|
package/lib/module/index.mjs
DELETED
package/lib/module/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,cAAc,cAAU;AACxB,cAAc,oBAAgB;AAC9B,cAAc,cAAU","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|