如何将TensorFlow AI模型对象识别放入Android APP中?

问题描述

我将模型训练为: https://www.google.com.au/amp/s/blog.roboflow.com/training-a-tensorflow-object-detection-model-with-a-custom-dataset/amp/ 并将其转换为tflite。然后,我尝试将AI模型放入android APP。我跟着: https://developers.google.com/ml-kit/vision/object-detection/custom-models/android?fbclid=IwAR07uNgzQ2c5PTp13TiPVeKGQsXaJnJR9jzyvtviXCRegFFJlM-_G799TlY 将位图转换为Inputimage对象。并进行所有配置。 我转换了图像,然后加载模型以尝试打印结果:

    // getting bitmap of the image
    Bitmap photo = (Bitmap) data.getExtras().get("data");
    //convert image
    Inputimage image = Inputimage.fromBitmap(photo,0);
//load local model
LocalModel localModel =
                    new LocalModel.Builder()
                            .setAssetFilePath("mobilenet_v1_1.0_224_quant.tflite")
                            // or .setAbsoluteFilePath(absolute file path to tflite model)
                            .build();

            // Multiple object detection in static images
            CustomObjectDetectorOptions customObjectDetectorOptions =
                    new CustomObjectDetectorOptions.Builder(localModel)
                            .setDetectorMode(CustomObjectDetectorOptions.SINGLE_IMAGE_MODE)
                            .enableMultipleObjects()
                            .enableClassification()
                            .setClassificationConfidenceThreshold(0.5f)
                            .setMaxPerObjectLabelCount(3)
                            .build();

            ObjectDetector objectDetector =
                    ObjectDetection.getClient(customObjectDetectorOptions);

            objectDetector
                    .process(image)
                    .addOnFailureListener(e -> {System.out.println(e.getMessage());})
                    .addOnSuccessListener(results -> {
                        for (Detectedobject detectedobject : results) {
                            Rect boundingBox = detectedobject.getBoundingBox();
                            Integer trackingId = detectedobject.getTrackingId();
                            for (Detectedobject.Label label : detectedobject.getLabels()) {
                                String text = label.getText();
                                int index = label.getIndex();
                                float confidence = label.getConfidence();
                                System.out.println(text);
                                System.out.println(index);
                                System.out.println(confidence);
                            }

                            System.out.println(boundingBox);
                            System.out.println(trackingId);
                        }
                    });

但是我遇到了错误

“无法初始化检测器。的尺寸意外 输出索引0:具有3D,预期为2D。“

你有什么主意吗 关于这个问题?非常感谢,如果您能给我一些解决方案。

完整错误

E/native: calculator_graph.cc:776 INVALID_ARGUMENT: Calculatorgraph::Run() Failed in Run:
    Calculator::open() for node "[BoxClassifierCalculator,BoxClassifierCalculator with output stream: detection_results0]" Failed: #vk Unexpected number of dimensions for output index 0: got 3D,expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1,W=1,H=1).
    pipeline_jni.cc:62 Calculatorgraph::Run() Failed in Run:
    Calculator::open() for node "[BoxClassifierCalculator,H=1).
E/native: pipeline_jni.cc:209 Graph has errors:
    Calculator::open() for node "[BoxClassifierCalculator,H=1).
E/MobileVisionBase: Error preloading model resource
    com.google.mlkit.common.MlKitException: Failed to initialize detector. Unexpected number of dimensions for output index 0: got 3D,H=1).
        at com.google.mlkit.vision.vkp.PipelineManager.start(com.google.mlkit:vision-internal-vkp@@16.0.0:68)
        at com.google.mlkit.vision.objects.custom.internal.zzd.load(com.google.mlkit:object-detection-custom@@16.0.0:79)
        at com.google.mlkit.common.sdkinternal.ModelResource.zza(com.google.mlkit:common@@16.0.0:22)
        at com.google.mlkit.common.sdkinternal.zzn.call(com.google.mlkit:common@@16.0.0)
        at com.google.mlkit.common.sdkinternal.zzm.run(com.google.mlkit:common@@16.0.0:5)
        at com.google.mlkit.common.sdkinternal.zzq.run(com.google.mlkit:common@@16.0.0:3)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at com.google.android.gms.internal.mlkit_common.zzb.dispatchMessage(com.google.mlkit:common@@16.0.0:6)
        at android.os.Looper.loop(Looper.java:154)
        at android.os.HandlerThread.run(HandlerThread.java:61)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)