vision-camera-face-detection 2.2.5 → 2.2.7
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/build.gradle +2 -1
- package/android/src/main/java/com/visioncamerafacedetection/FaceHelper.kt +12 -60
- package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionModule.kt +1 -1
- package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionPlugin.kt +2 -1
- package/ios/FaceHelper.swift +6 -22
- package/ios/VisionCameraFaceDetectionModule.swift +2 -5
- package/ios/VisionCameraFaceDetectionPlugin.swift +9 -28
- package/lib/commonjs/FaceDetector.js.map +1 -1
- package/lib/module/FaceDetector.js.map +1 -1
- package/lib/typescript/commonjs/src/FaceDetector.d.ts +0 -1
- package/lib/typescript/commonjs/src/FaceDetector.d.ts.map +1 -1
- package/lib/typescript/module/src/FaceDetector.d.ts +0 -1
- package/lib/typescript/module/src/FaceDetector.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/FaceDetector.ts +0 -1
package/android/build.gradle
CHANGED
|
@@ -88,6 +88,7 @@ dependencies {
|
|
|
88
88
|
implementation "androidx.annotation:annotation:1.9.1"
|
|
89
89
|
implementation "androidx.camera:camera-core:1.5.2"
|
|
90
90
|
implementation "com.google.mlkit:face-detection:16.1.7"
|
|
91
|
-
implementation 'com.google.ai.edge.litert:litert:
|
|
91
|
+
implementation 'com.google.ai.edge.litert:litert:1.4.1'
|
|
92
|
+
implementation 'com.google.ai.edge.litert:litert-support:1.4.1'
|
|
92
93
|
}
|
|
93
94
|
|
|
@@ -6,75 +6,27 @@ import android.util.Base64
|
|
|
6
6
|
import com.google.mlkit.vision.face.Face
|
|
7
7
|
import com.google.mlkit.vision.face.FaceContour
|
|
8
8
|
import org.tensorflow.lite.Interpreter
|
|
9
|
-
|
|
9
|
+
import org.tensorflow.lite.support.common.ops.NormalizeOp
|
|
10
|
+
import org.tensorflow.lite.support.image.ImageProcessor
|
|
11
|
+
import org.tensorflow.lite.support.image.TensorImage
|
|
12
|
+
import org.tensorflow.lite.support.image.ops.ResizeOp
|
|
10
13
|
import java.io.ByteArrayOutputStream
|
|
11
14
|
import java.nio.ByteBuffer
|
|
12
|
-
import java.nio.ByteOrder
|
|
13
15
|
import kotlin.math.ceil
|
|
14
16
|
|
|
15
17
|
var interpreter: Interpreter? = null
|
|
16
|
-
const val TF_OD_API_INPUT_SIZE =
|
|
18
|
+
const val TF_OD_API_INPUT_SIZE = 160
|
|
17
19
|
|
|
18
20
|
class FaceHelper {
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
* The bitmap is resized to TF_OD_API_INPUT_SIZE x TF_OD_API_INPUT_SIZE and
|
|
25
|
-
* normalized using the formula: (pixel - 127.5) / 127.5
|
|
26
|
-
*/
|
|
27
|
-
fun bitmap2ByteBuffer(bitmap: Bitmap?): ByteBuffer {
|
|
28
|
-
if (bitmap == null) {
|
|
29
|
-
// Return an empty buffer if bitmap is null
|
|
30
|
-
val emptyBuffer = ByteBuffer.allocateDirect(TF_OD_API_INPUT_SIZE * TF_OD_API_INPUT_SIZE * 3 * 4)
|
|
31
|
-
emptyBuffer.order(ByteOrder.nativeOrder())
|
|
32
|
-
return emptyBuffer
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Resize bitmap to the required input size using bilinear filtering
|
|
36
|
-
val resizedBitmap = Bitmap.createScaledBitmap(
|
|
37
|
-
bitmap,
|
|
38
|
-
TF_OD_API_INPUT_SIZE,
|
|
39
|
-
TF_OD_API_INPUT_SIZE,
|
|
40
|
-
true
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
// Allocate ByteBuffer for float values (3 channels * 4 bytes per float)
|
|
44
|
-
val byteBuffer = ByteBuffer.allocateDirect(TF_OD_API_INPUT_SIZE * TF_OD_API_INPUT_SIZE * 3 * 4)
|
|
45
|
-
byteBuffer.order(ByteOrder.nativeOrder())
|
|
46
|
-
|
|
47
|
-
// Extract pixel values and normalize
|
|
48
|
-
val intValues = IntArray(TF_OD_API_INPUT_SIZE * TF_OD_API_INPUT_SIZE)
|
|
49
|
-
resizedBitmap.getPixels(
|
|
50
|
-
intValues,
|
|
51
|
-
0,
|
|
52
|
-
TF_OD_API_INPUT_SIZE,
|
|
53
|
-
0,
|
|
54
|
-
0,
|
|
55
|
-
TF_OD_API_INPUT_SIZE,
|
|
56
|
-
TF_OD_API_INPUT_SIZE
|
|
57
|
-
)
|
|
22
|
+
private val imageTensorProcessor: ImageProcessor = ImageProcessor.Builder()
|
|
23
|
+
.add(ResizeOp(TF_OD_API_INPUT_SIZE, TF_OD_API_INPUT_SIZE, ResizeOp.ResizeMethod.BILINEAR))
|
|
24
|
+
.add(NormalizeOp(127.5f, 127.5f))
|
|
25
|
+
.build()
|
|
58
26
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
val r = (pixelValue shr 16 and 0xFF)
|
|
63
|
-
val g = (pixelValue shr 8 and 0xFF)
|
|
64
|
-
val b = (pixelValue and 0xFF)
|
|
65
|
-
|
|
66
|
-
byteBuffer.putFloat((r - 127.5f) / 127.5f)
|
|
67
|
-
byteBuffer.putFloat((g - 127.5f) / 127.5f)
|
|
68
|
-
byteBuffer.putFloat((b - 127.5f) / 127.5f)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Clean up resized bitmap if it's different from the original
|
|
72
|
-
if (resizedBitmap != bitmap) {
|
|
73
|
-
resizedBitmap.recycle()
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
byteBuffer.rewind()
|
|
77
|
-
return byteBuffer
|
|
27
|
+
fun bitmap2ByteBuffer(bitmap: Bitmap?): ByteBuffer {
|
|
28
|
+
val imageTensor: TensorImage = imageTensorProcessor.process(TensorImage.fromBitmap(bitmap))
|
|
29
|
+
return imageTensor.buffer
|
|
78
30
|
}
|
|
79
31
|
|
|
80
32
|
fun processBoundingBox(boundingBox: Rect): MutableMap<String, Any> {
|
package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionModule.kt
CHANGED
|
@@ -86,7 +86,7 @@ class VisionCameraFaceDetectionModule(private val reactContext: ReactApplication
|
|
|
86
86
|
matrix.postScale(sx, sy)
|
|
87
87
|
cvFace.drawBitmap(bmpStorageResult, matrix, null)
|
|
88
88
|
val input: ByteBuffer = FaceHelper().bitmap2ByteBuffer(bmpFaceStorage)
|
|
89
|
-
val output: FloatBuffer = FloatBuffer.allocate(
|
|
89
|
+
val output: FloatBuffer = FloatBuffer.allocate(512)
|
|
90
90
|
interpreter?.run(input, output)
|
|
91
91
|
val arrayData = Arguments.createArray()
|
|
92
92
|
for (i: Float in output.array()) {
|
package/android/src/main/java/com/visioncamerafacedetection/VisionCameraFaceDetectionPlugin.kt
CHANGED
|
@@ -17,6 +17,7 @@ import com.google.mlkit.vision.face.FaceDetector
|
|
|
17
17
|
import com.google.mlkit.vision.face.FaceDetectorOptions
|
|
18
18
|
import com.google.mlkit.vision.face.FaceLandmark
|
|
19
19
|
import com.mrousavy.camera.core.FrameInvalidError
|
|
20
|
+
import com.mrousavy.camera.core.types.Orientation
|
|
20
21
|
import com.mrousavy.camera.core.types.Position
|
|
21
22
|
import com.mrousavy.camera.frameprocessors.Frame
|
|
22
23
|
import com.mrousavy.camera.frameprocessors.FrameProcessorPlugin
|
|
@@ -327,7 +328,7 @@ class VisionCameraFaceDetectionPlugin(
|
|
|
327
328
|
matrix.postScale(sx, sy)
|
|
328
329
|
cvFace.drawBitmap(bmpFrameResult, matrix, null)
|
|
329
330
|
val input: ByteBuffer = FaceHelper().bitmap2ByteBuffer(bmpFaceResult)
|
|
330
|
-
val output: FloatBuffer = FloatBuffer.allocate(
|
|
331
|
+
val output: FloatBuffer = FloatBuffer.allocate(512)
|
|
331
332
|
interpreter?.run(input, output)
|
|
332
333
|
|
|
333
334
|
for (i: Float in output.array()) {
|
package/ios/FaceHelper.swift
CHANGED
|
@@ -9,8 +9,8 @@ import TensorFlowLite
|
|
|
9
9
|
|
|
10
10
|
let batchSize = 1
|
|
11
11
|
let inputChannels = 1
|
|
12
|
-
let inputWidth =
|
|
13
|
-
let inputHeight =
|
|
12
|
+
let inputWidth = 160
|
|
13
|
+
let inputHeight = 160
|
|
14
14
|
|
|
15
15
|
// TensorFlow Lite `Interpreter` object for performing inference on a given model.
|
|
16
16
|
var interpreter: Interpreter? = nil
|
|
@@ -112,28 +112,12 @@ class FaceHelper {
|
|
|
112
112
|
|
|
113
113
|
static func getImageFaceFromBuffer(from sampleBuffer: CMSampleBuffer, rectImage: CGRect, orientation: UIImage.Orientation) -> CVPixelBuffer? {
|
|
114
114
|
autoreleasepool {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return nil
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
let ciimage = CIImage(cvPixelBuffer: imageBuffer)
|
|
115
|
+
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
|
|
116
|
+
let ciimage = CIImage(cvPixelBuffer: imageBuffer!)
|
|
121
117
|
let context = CIContext(options: nil)
|
|
118
|
+
let cgImage = context.createCGImage(ciimage, from: ciimage.extent)!
|
|
122
119
|
|
|
123
|
-
|
|
124
|
-
print("Error: Failed to create CGImage from CIImage")
|
|
125
|
-
return nil
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Ensure rectImage is within bounds of the image
|
|
129
|
-
let imageRect = CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height)
|
|
130
|
-
let clampedRect = rectImage.intersection(imageRect)
|
|
131
|
-
|
|
132
|
-
guard !clampedRect.isEmpty, let imageRef = cgImage.cropping(to: clampedRect) else {
|
|
133
|
-
print("Error: Failed to crop image. Face rect: \(rectImage), Image bounds: \(imageRect)")
|
|
134
|
-
return nil
|
|
135
|
-
}
|
|
136
|
-
|
|
120
|
+
let imageRef: CGImage = cgImage.cropping(to: rectImage)!
|
|
137
121
|
let imageCrop: UIImage = UIImage(cgImage: imageRef, scale: 0.5, orientation: orientation)
|
|
138
122
|
return uiImageToPixelBuffer(image: imageCrop, size: inputWidth)
|
|
139
123
|
}
|
|
@@ -24,9 +24,7 @@ class VisionCameraFaceDetectionModule: NSObject {
|
|
|
24
24
|
forResource: modelName,
|
|
25
25
|
ofType: "tflite"
|
|
26
26
|
) else {
|
|
27
|
-
|
|
28
|
-
print(errorMessage)
|
|
29
|
-
reject("MODEL_NOT_FOUND", errorMessage, nil)
|
|
27
|
+
print("Failed to load the model file with name: \(modelName).")
|
|
30
28
|
return
|
|
31
29
|
}
|
|
32
30
|
do {
|
|
@@ -34,11 +32,10 @@ class VisionCameraFaceDetectionModule: NSObject {
|
|
|
34
32
|
options.threadCount = count
|
|
35
33
|
interpreter = try Interpreter(modelPath: modelPath, options: options)
|
|
36
34
|
try interpreter?.allocateTensors()
|
|
37
|
-
print("TensorFlow Lite interpreter initialized successfully with model: \(modelName)")
|
|
38
35
|
resolve("initialization tflite success")
|
|
39
36
|
} catch let error {
|
|
40
37
|
print("Failed to create the interpreter with error: \(error.localizedDescription)")
|
|
41
|
-
reject("
|
|
38
|
+
reject("Error", "tflite error", error)
|
|
42
39
|
return
|
|
43
40
|
}
|
|
44
41
|
}
|
|
@@ -291,40 +291,21 @@ public class VisionCameraFaceDetectionPlugin: FrameProcessorPlugin {
|
|
|
291
291
|
for face in faces {
|
|
292
292
|
var map: [String: Any] = [:]
|
|
293
293
|
if enableTensor {
|
|
294
|
-
// Check if interpreter is initialized
|
|
295
|
-
guard let tfliteInterpreter = interpreter else {
|
|
296
|
-
print("Error: TensorFlow Lite interpreter is not initialized. Call initTensor() first.")
|
|
297
|
-
map["data"] = []
|
|
298
|
-
map["error"] = "Interpreter not initialized"
|
|
299
|
-
result.append(map)
|
|
300
|
-
continue
|
|
301
|
-
}
|
|
302
|
-
|
|
303
294
|
guard let imageCrop = FaceHelper.getImageFaceFromBuffer(from: frame.buffer, rectImage: face.frame, orientation: image.orientation) else {
|
|
304
|
-
|
|
305
|
-
map["data"] = []
|
|
306
|
-
map["error"] = "Failed to crop face image"
|
|
307
|
-
result.append(map)
|
|
308
|
-
continue
|
|
295
|
+
return nil
|
|
309
296
|
}
|
|
310
297
|
guard let rgbData = FaceHelper.rgbDataFromBuffer(imageCrop) else {
|
|
311
|
-
|
|
312
|
-
map["data"] = []
|
|
313
|
-
map["error"] = "Failed to convert to RGB"
|
|
314
|
-
result.append(map)
|
|
315
|
-
continue
|
|
298
|
+
return nil
|
|
316
299
|
}
|
|
300
|
+
try interpreter?.copy(rgbData, toInputAt: 0)
|
|
301
|
+
try interpreter?.invoke()
|
|
302
|
+
let outputTensor: Tensor? = try interpreter?.output(at: 0)
|
|
317
303
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
let embeddingData: [Float] = [Float32](unsafeData: outputTensor.data) ?? []
|
|
323
|
-
map["data"] = embeddingData
|
|
324
|
-
} catch let tensorError {
|
|
325
|
-
print("Error running TensorFlow inference: \(tensorError.localizedDescription)")
|
|
304
|
+
if ((outputTensor?.data) != nil) {
|
|
305
|
+
let result: [Float] = [Float32](unsafeData: outputTensor!.data) ?? []
|
|
306
|
+
map["data"] = result
|
|
307
|
+
} else {
|
|
326
308
|
map["data"] = []
|
|
327
|
-
map["error"] = "TensorFlow inference failed: \(tensorError.localizedDescription)"
|
|
328
309
|
}
|
|
329
310
|
} else {
|
|
330
311
|
map["data"] = []
|
|
@@ -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":[]}
|
|
@@ -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,SACEC,iBAAiB,QAGZ,4BAA4B;
|
|
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":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,4BAA4B,CAAC;AAEpC,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,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,KAAK,EACX,MAAM,4BAA4B,CAAC;AAEpC,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,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../../src/FaceDetector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED