From 5b8ffdd1fb6956da7e1c1acfd7337f07d621d019 Mon Sep 17 00:00:00 2001
From: justin200914 <125717930+justin200914@users.noreply.github.com>
Date: Tue, 18 Jul 2023 09:09:55 +0800
Subject: [PATCH] fixed issue
---
.../FaceRecognitionSdkViewManager.kt | 2 +
.../com/facerecognitionsdk/FaceSDKModule.kt | 6 +-
.../main/java/com/facerecognitionsdk/Utils.kt | 49 +++++++-----
example/src/FaceRecognitionPage.tsx | 79 ++++++++++++++-----
4 files changed, 96 insertions(+), 40 deletions(-)
diff --git a/android/src/main/java/com/facerecognitionsdk/FaceRecognitionSdkViewManager.kt b/android/src/main/java/com/facerecognitionsdk/FaceRecognitionSdkViewManager.kt
index b823ef2..76a48a4 100644
--- a/android/src/main/java/com/facerecognitionsdk/FaceRecognitionSdkViewManager.kt
+++ b/android/src/main/java/com/facerecognitionsdk/FaceRecognitionSdkViewManager.kt
@@ -98,6 +98,8 @@ class FaceRecognitionSdkViewManager(private val reactContext: ReactApplicationCo
fun setLivenessLevel(view: View, livenessLevel: Int) {
Log.e("TestEngine", "setLivenessLevel " + livenessLevel)
this.checkLivenessLevel = livenessLevel
+
+ startCamera()
}
@ReactProp(name = "cameraLens")
diff --git a/android/src/main/java/com/facerecognitionsdk/FaceSDKModule.kt b/android/src/main/java/com/facerecognitionsdk/FaceSDKModule.kt
index 5f86f7b..1cafc9c 100644
--- a/android/src/main/java/com/facerecognitionsdk/FaceSDKModule.kt
+++ b/android/src/main/java/com/facerecognitionsdk/FaceSDKModule.kt
@@ -111,20 +111,20 @@ class FaceSDKModule(reactContext: ReactApplicationContext) : ReactContextBaseJav
@ReactMethod
fun similarityCalculation(templates1: String, templates2: String, promise: Promise) {
val similarity = FaceSDK.similarityCalculation(Utils.base64ToByteArray(templates1), Utils.base64ToByteArray(templates2))
- Log.e("TestEngine", "similarityCalculation" + similarity)
+ Log.e("KBY", "similarityCalculation" + similarity)
promise.resolve(similarity)
}
@ReactMethod
fun startCamera(promise: Promise) {
- Log.e("TestEngine", "start camera" + faceRecognitionSdkViewManager);
+ Log.e("KBY", "start camera" + faceRecognitionSdkViewManager);
faceRecognitionSdkViewManager?.startCamera()
promise.resolve(0)
}
@ReactMethod
fun stopCamera(promise: Promise) {
- Log.e("TestEngine", "stop camera");
+ Log.e("KBY", "stop camera");
faceRecognitionSdkViewManager?.stopCamera()
promise.resolve(0)
}
diff --git a/android/src/main/java/com/facerecognitionsdk/Utils.kt b/android/src/main/java/com/facerecognitionsdk/Utils.kt
index aa7e03b..85e7737 100644
--- a/android/src/main/java/com/facerecognitionsdk/Utils.kt
+++ b/android/src/main/java/com/facerecognitionsdk/Utils.kt
@@ -8,9 +8,9 @@ import android.graphics.Matrix
import android.net.Uri
import android.provider.MediaStore
import android.util.Base64
-
+import android.util.Log
import com.kbyai.facesdk.FaceBox
-
+import android.media.ExifInterface
import java.io.IOException
import java.io.InputStream
@@ -59,28 +59,39 @@ object Utils {
@Throws(IOException::class)
fun getCorrectlyOrientedImage(context: Context, photoUri: Uri): Bitmap {
- var isStream: InputStream? = context.contentResolver.openInputStream(photoUri)
- val dbo = BitmapFactory.Options()
- dbo.inJustDecodeBounds = true
- BitmapFactory.decodeStream(isStream, null, dbo)
- isStream?.close()
-
- val orientation = getOrientation(context, photoUri)
+ var rotate = 0
+ val inputStream: InputStream? = context.contentResolver.openInputStream(photoUri)
+ inputStream?.let {
+ val exif = ExifInterface(it)
+ val orientation = exif.getAttributeInt(
+ ExifInterface.TAG_ORIENTATION,
+ ExifInterface.ORIENTATION_NORMAL
+ )
+ rotate = when (orientation) {
+ ExifInterface.ORIENTATION_ROTATE_270 -> 270
+ ExifInterface.ORIENTATION_ROTATE_180 -> 180
+ ExifInterface.ORIENTATION_ROTATE_90 -> 90
+ else -> 0
+ }
+ it.close()
+ }
var srcBitmap: Bitmap
- isStream = context.contentResolver.openInputStream(photoUri)
+ val isStream = context.contentResolver.openInputStream(photoUri)
srcBitmap = BitmapFactory.decodeStream(isStream)
isStream?.close()
- if (orientation > 0) {
- val matrix = Matrix()
- matrix.postRotate(orientation.toFloat())
-
- srcBitmap = Bitmap.createBitmap(srcBitmap, 0, 0, srcBitmap.width,
- srcBitmap.height, matrix, true)
- }
-
- return srcBitmap
+ val matrix = Matrix()
+ matrix.postRotate(rotate.toFloat())
+ return Bitmap.createBitmap(
+ srcBitmap,
+ 0,
+ 0,
+ srcBitmap.width,
+ srcBitmap.height,
+ matrix,
+ true
+ )
}
fun byteArrayToBase64(byteArray: ByteArray): String {
diff --git a/example/src/FaceRecognitionPage.tsx b/example/src/FaceRecognitionPage.tsx
index 795481a..8539b63 100644
--- a/example/src/FaceRecognitionPage.tsx
+++ b/example/src/FaceRecognitionPage.tsx
@@ -1,5 +1,5 @@
// FaceRecognitionPage.js
-import React, { useEffect, useState } from 'react';
+import React, { useEffect, useState, useRef } from 'react';
import { View, Text, StyleSheet, TouchableOpacity, Image, } from 'react-native';
import { FaceRecognitionSdkView, FaceSDKModule } from 'face-recognition-sdk';
import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions'
@@ -13,10 +13,57 @@ const cameraPermission = Platform.select({
android: PERMISSIONS.ANDROID.CAMERA,
})
+const FaceRecognitionView = () => {
+ const isFocused = useIsFocused();
+ const sdkViewRef = useRef(null);
+
+ useEffect(() => {
+ if (isFocused) {
+ startCamera();
+ } else {
+ stopCamera();
+ }
+
+ return () => {
+ stopCamera();
+ };
+ }, [isFocused]);
+
+ const startCamera = async () => {
+ await FaceSDKModule.startCamera();
+ };
+
+ const stopCamera = async () => {
+ await FaceSDKModule.stopCamera();
+ };
+
+ const handleViewLayout = () => {
+ if (isFocused && sdkViewRef.current) {
+ startCamera();
+ } else {
+ stopCamera();
+ }
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
const FaceRecognitionPage = ({ navigation, route }) => {
const { persons } = route.params;
const [faces, setFaces] = useState([]);
+ const [cameraShow, setCameraShow] = useState(false);
const isFocused = useIsFocused();
var recognized = false;
@@ -26,7 +73,6 @@ const FaceRecognitionPage = ({ navigation, route }) => {
};
useEffect(() => {
- console.log("isFocused", isFocused);
checkPermission();
const eventEmitter = new NativeEventEmitter(FaceSDKModule);
@@ -37,11 +83,12 @@ const FaceRecognitionPage = ({ navigation, route }) => {
}
});
- return () => {
- stopCamera();
- // AppState.removeEventListener('change', handleAppStateChange);
- // BackHandler.removeEventListener('hardwareBackPress', handleBackButton);
+ if(isFocused)
+ recognized = false;
+ else
+ recognized = true;
+ return () => {
eventListener.remove();
};
@@ -96,15 +143,6 @@ const FaceRecognitionPage = ({ navigation, route }) => {
}
};
-
- const startCamera = async () => {
- await FaceSDKModule.startCamera();
- }
-
- const stopCamera = async () => {
- await FaceSDKModule.stopCamera();
- }
-
const checkPermission = async () => {
const permissionStatus = await check(cameraPermission);
handlePermissionStatus(permissionStatus);
@@ -124,7 +162,7 @@ const FaceRecognitionPage = ({ navigation, route }) => {
requestPermission();
break;
case RESULTS.GRANTED:
- startCamera();
+ setCameraShow(true);
break;
case RESULTS.BLOCKED:
break;
@@ -146,8 +184,13 @@ const FaceRecognitionPage = ({ navigation, route }) => {
-
-
+ {cameraShow ? (
+
+ ) : (
+
+ Camera permission issue.
+
+ )}