This commit is contained in:
dzc committed 2025-03-14 15:05:06 +08:00
1 parent aa39211aba
commit 76f97a2e7a
23 files changed
+226 -294

No files matched your search

+4 -4
View File
@@ -22,8 +22,8 @@
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:label="智慧食堂"
android:requestLegacyExternalStorage="true"
android:requestRawExternalStorageAccess="true">
android:largeHeap="true"
android:requestLegacyExternalStorage="true">
<activity
android:name=".MainActivity"
@@ -42,9 +42,9 @@
<activity
android:name="io.flutter.plugins.facediscern.ui.FaceDiscern"
android:exported="false"
android:hardwareAccelerated="true"
android:hardwareAccelerated="false"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.NoActionBar" />
android:theme="@style/Theme.AppCompat.NoActionBar" />
<meta-data
android:name="flutterEmbedding"
@@ -13,7 +13,7 @@ import java.io.File;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "DatabaseHelper";
private static final String DATABASE_PATH = "pj/database";
private static final String DATABASE_PATH = "pj_cashier/database";
private static final String DATABASE_NAME = "cash_register.db";
private static final int DATABASE_VERSION = 1;
@@ -5,6 +5,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
@@ -74,10 +76,15 @@ public class FlutterFaceDiscernPlugin implements FlutterPlugin, MethodChannel.Me
switch (method) {
case "jumpFaceDiscern":
try {
// Intent intent = new Intent(context, FaceDiscern.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// context.startActivity(intent);
Intent intent = new Intent(context, FaceDiscern.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
context.startActivity(intent);
new Handler(Looper.getMainLooper()).post(() -> context.startActivity(intent));
result.success(true);
} catch (Exception e) {
result.success(false);
@@ -4,7 +4,10 @@ import android.Manifest;
import android.content.Intent;
import android.graphics.Point;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
@@ -15,10 +18,12 @@ import androidx.core.app.ActivityCompat;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProvider;
import com.example.pj_supermarket_cloud.MainActivity;
import com.example.pj_supermarket_cloud.R;
import com.example.pj_supermarket_cloud.databinding.ActivityFaceDiscernBinding;
import io.flutter.Log;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugins.facediscern.flutter.FlutterFaceDiscernPlugin;
import io.flutter.plugins.facediscern.tool.camera.DualCameraHelper;
import io.flutter.plugins.facediscern.tool.camera.callback.CameraListener;
@@ -40,10 +45,7 @@ public class FaceDiscern extends BaseActivity implements ViewTreeObserver.OnGlob
private static final String TAG = "人脸识别页面";
private static final String[] NEEDED_PERMISSIONS = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE
};
private static final String[] NEEDED_PERMISSIONS = new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE};
private FaceRectTransformer rgbFaceRectTransformer;
@@ -131,13 +133,10 @@ public class FaceDiscern extends BaseActivity implements ViewTreeObserver.OnGlob
if (Objects.nonNull(channel)) {
channel.invokeMethod("faceDiscernPageInit", null);
}
if (rgbCameraHelper != null) {
rgbCameraHelper.resumePreview();
}
scheduler.schedule(() -> {
try {
if (viewModel != null) {
viewModel.stop();
if (rgbCameraHelper != null) {
rgbCameraHelper.resumePreview();
previewLock = false;
Log.i(TAG, "相机开始识别");
}
@@ -156,17 +155,26 @@ public class FaceDiscern extends BaseActivity implements ViewTreeObserver.OnGlob
}
}
// 以前的方式
// intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// 推荐的方式
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
// 手机返回按钮
@Override
public void onBackPressed() {
Log.e(TAG, "相机onBackPressed");
MethodChannel channel = FlutterFaceDiscernPlugin.staticChannel;
if (Objects.nonNull(channel)) {
channel.invokeMethod("faceDiscernBack", null);
}
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(this.getPackageName(), this.getPackageName() + ".MainActivity");
this.startActivity(intent);
MethodChannel channel = FlutterFaceDiscernPlugin.staticChannel;
if (Objects.isNull(channel)) return;
channel.invokeMethod("faceDiscernBack", null);
}
@@ -187,25 +195,8 @@ public class FaceDiscern extends BaseActivity implements ViewTreeObserver.OnGlob
public void onCameraOpened(Camera camera, int cameraId, int displayOrientation, boolean isMirror) {
runOnUiThread(() -> {
Camera.Size previewSizeRgb = camera.getParameters().getPreviewSize();
ViewGroup.LayoutParams layoutParams = adjustPreviewViewSize(
binding.dualCameraTexturePreviewRgb,
binding.dualCameraTexturePreviewRgb,
binding.dualCameraFaceRectView,
previewSizeRgb,
displayOrientation,
1.0f
);
rgbFaceRectTransformer = new FaceRectTransformer(
previewSizeRgb.width,
previewSizeRgb.height,
layoutParams.width,
layoutParams.height,
displayOrientation,
cameraId,
isMirror,
true,
true
);
ViewGroup.LayoutParams layoutParams = adjustPreviewViewSize(binding.dualCameraTexturePreviewRgb, binding.dualCameraTexturePreviewRgb, binding.dualCameraFaceRectView, previewSizeRgb, displayOrientation, 1.0f);
rgbFaceRectTransformer = new FaceRectTransformer(previewSizeRgb.width, previewSizeRgb.height, layoutParams.width, layoutParams.height, displayOrientation, cameraId, isMirror, true, true);
viewModel.onRgbCameraOpened(camera);
viewModel.setRgbFaceRectTransformer(rgbFaceRectTransformer);
Log.e(TAG, "相机打开,宽:" + previewSizeRgb.width + ",高:" + previewSizeRgb.height + ";layout宽:" + layoutParams.width + ",layout高:" + layoutParams.height + ";");
@@ -249,16 +240,7 @@ public class FaceDiscern extends BaseActivity implements ViewTreeObserver.OnGlob
}
}
Point previewSize = new Point(binding.dualCameraTexturePreviewRgb.getMeasuredWidth(), binding.dualCameraTexturePreviewRgb.getMeasuredHeight());
rgbCameraHelper = new DualCameraHelper.Builder()
.previewViewSize(previewSize)
.previewSize(previewSize)
.rotation(getWindowManager().getDefaultDisplay().getRotation())
.additionalRotation(0)
.specificCameraId(mCameraId)
.isMirror(false)
.previewOn(binding.dualCameraTexturePreviewRgb)
.cameraListener(cameraListener)
.build();
rgbCameraHelper = new DualCameraHelper.Builder().previewViewSize(previewSize).previewSize(previewSize).rotation(getWindowManager().getDefaultDisplay().getRotation()).additionalRotation(0).specificCameraId(mCameraId).isMirror(false).previewOn(binding.dualCameraTexturePreviewRgb).cameraListener(cameraListener).build();
rgbCameraHelper.init();
rgbCameraHelper.start();
viewModel.setRgbCameraHelper(rgbCameraHelper);
@@ -20,8 +20,10 @@ import com.arcsoft.face.LivenessInfo;
import com.arcsoft.face.LivenessParam;
import com.arcsoft.face.enums.DetectFaceOrientPriority;
import com.arcsoft.face.enums.DetectMode;
import com.example.pj_supermarket_cloud.MainActivity;
import com.google.gson.Gson;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugins.facediscern.tool.camera.DualCameraHelper;
import io.flutter.plugins.facediscern.tool.camera.config.PreviewConfig;
import io.flutter.plugins.facediscern.tool.face.constants.FaceBrodConstant;
@@ -36,6 +38,7 @@ import io.flutter.plugins.facediscern.tool.face.model.FaceEntity;
import io.flutter.plugins.facediscern.tool.face.model.FacePreviewInfo;
import io.flutter.plugins.facediscern.tool.face.model.RecognizeConfiguration;
import io.flutter.plugins.facediscern.tool.face.widget.FaceRectView;
import io.flutter.plugins.facediscern.ui.FaceDiscern;
import java.util.ArrayList;
import java.util.HashMap;
@@ -290,17 +293,15 @@ public class FaceDiscernViewModel extends ViewModel implements RecognizeCallback
if (flutterFaceCallbackIntent == null) {
flutterFaceCallbackIntent = new Intent(FaceBrodConstant.FACE_GLOBAL_INTENT);
}
Log.i(TAG, "人脸识别成功json:" + new Gson().toJson(faceDiscern));
flutterFaceCallbackIntent.putExtra("json", new Gson().toJson(faceDiscern));
context.sendBroadcast(flutterFaceCallbackIntent);
faceDiscern = null;
Log.i(TAG, "人脸识别成功json:" + new Gson().toJson(faceDiscern));
if (context instanceof Activity) {
Thread.sleep(500);
String packageName = context.getPackageName();
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(packageName, packageName + ".MainActivity");
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
context.startActivity(intent);
context.sendBroadcast(flutterFaceCallbackIntent);
faceDiscern = null;
}
} catch (Exception e) {
Log.e(TAG, "提示文字变更的回调,错误error:" + e.getMessage(), e);
@@ -2,13 +2,19 @@ package com.example.pj_supermarket_cloud
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.facediscern.flutter.FlutterFaceDiscernPlugin
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
// 人脸识别插件
val flutterFaceDiscernPlugin = FlutterFaceDiscernPlugin()
flutterEngine.plugins.add(flutterFaceDiscernPlugin)
GeneratedPluginRegistrant.registerWith(flutterEngine)
}
}