繁体   English   中英

执行 Firebase ML 任务时发生内部错误

[英]Internal error has occurred when executing Firebase ML tasks

我使用 firebase ml 套件通过自定义 tflite model 执行设备推理。model 期望输入格式为类型:float32[1,71,37] 和输入格式为类型:float32[1,1,2]。

我面临的问题是,当我在 firebase model 解释器上调用运行方法时,它失败并显示一条错误消息,提示“执行 Firebase ML 任务时发生内部错误”。

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.example.hack_ai_thon_android.R
import com.google.android.gms.tasks.Task
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions
import com.google.firebase.ml.common.modeldownload.FirebaseModelManager
import com.google.firebase.ml.custom.*


class DashboardActivity : AppCompatActivity() {
 lateinit var interpreter: FirebaseModelInterpreter
private lateinit var dashBoardViewModel: DashBoardViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dashboard)

        dashBoardViewModel = ViewModelProvider(this).get(DashBoardViewModel::class.java)

        val surveyData = dashBoardViewModel.surveyData
        var sem1 = surveyData.firstSem
        var sem2 = surveyData.firstSem
        var sem3 = surveyData.firstSem
        var sem4 = surveyData.firstSem
        var sem5 = surveyData.firstSem
        var sem6 = surveyData.firstSem
        var sem7 = surveyData.firstSem
        var sem8 = surveyData.firstSem

        var c = surveyData.c
        var cpp = surveyData.cpp
        var java = surveyData.java
        var javaScript = surveyData.javaScript
        var python = surveyData.python
        var kotlin = surveyData.kotlin
        var html = surveyData.htmlFive
        var css = surveyData.cssThree
        var php = surveyData.php
        var r = surveyData.r
        var db = surveyData.database
        var rest = surveyData.restApi

        var mobile = surveyData.mobile
        var mlAi = surveyData.mlAi
        var web = surveyData.web
        var uiux = surveyData.uiUx
        var cloud = surveyData.cloudComp
        var datasci = surveyData.dataSci
        var comp = surveyData.CompCoding
        var ds = surveyData.dataStruct
        var testing = surveyData.testing

        val hours = surveyData.hoursSpentOnAcademics
        var tech = surveyData.technicalClubsJoined
        var extraC = surveyData.extraCurricularActivities
        var video = surveyData.videoTutorials
        var documentation = surveyData.documentation
        var online = surveyData.onlineCourses
        var techBlogs = surveyData.technicalBlogs
        var softSkills = surveyData.softSkillsAndCommunication

val localModel = FirebaseCustomLocalModel.Builder()
            .setAssetFilePath("Placement_Detector.tflite")
            .build()

val interpreterOptions =
            FirebaseModelInterpreterOptions.Builder(localModel).build()
         interpreter = FirebaseModelInterpreter.getInstance(interpreterOptions)!!

 val inputOutputOptions = FirebaseModelInputOutputOptions.Builder()
            .setInputFormat(0, FirebaseModelDataType.FLOAT32, intArrayOf(1, 71, 37))
            .setOutputFormat(0, FirebaseModelDataType.INT32, intArrayOf(1, 1, 2))
            .build()

        val batchNum = 0
        val input = Array(1){
            Array(71){
                FloatArray(37)
            }
        }
//
       val x=0
            input[batchNum][x][0] = sem1.toFloat()
            input[batchNum][x][1] = sem2.toFloat()
            input[batchNum][x][2] = sem3.toFloat()
            input[batchNum][x][3] = sem4.toFloat()
            input[batchNum][x][4] = sem5.toFloat()
            input[batchNum][x][5] = sem6.toFloat()
            input[batchNum][x][6] = sem7.toFloat()
            input[batchNum][x][7] = sem8.toFloat()
            input[batchNum][x][8] = c.toFloat()
            input[batchNum][x][9] = cpp.toFloat()
            input[batchNum][x][10] = java.toFloat()
            input[batchNum][x][11] = javaScript.toFloat()
            input[batchNum][x][12] = python.toFloat()
            input[batchNum][x][13] = kotlin.toFloat()
            input[batchNum][x][14] = html.toFloat()
            input[batchNum][x][15] = css.toFloat()
            input[batchNum][x][16] = php.toFloat()
            input[batchNum][x][17] = r.toFloat()
            input[batchNum][x][18] = db.toFloat()
            input[batchNum][x][19] = rest.toFloat()
            input[batchNum][x][20] = mobile.toFloat()
            input[batchNum][x][21] = mlAi.toFloat()
            input[batchNum][x][22] = web.toFloat()
            input[batchNum][x][23] = uiux.toFloat()
            input[batchNum][x][24] = cloud.toFloat()
            input[batchNum][x][25] = datasci.toFloat()
            input[batchNum][x][26] = comp.toFloat()
            input[batchNum][x][27] = ds.toFloat()
            input[batchNum][x][28] = testing.toFloat()
            input[batchNum][x][29] = hours.toFloat()
            input[batchNum][x][30] = tech.toFloat()
            input[batchNum][x][31] = extraC.toFloat()
            input[batchNum][x][32] = video.toFloat()
            input[batchNum][x][33] = documentation.toFloat()
            input[batchNum][x][34] = online.toFloat()
            input[batchNum][x][35] = techBlogs.toFloat()
            input[batchNum][x][36] = softSkills.toFloat()
//
        val inputs = FirebaseModelInputs.Builder()
            .add(input) // add() as many input arrays as your model requires
            .build()

 val task: Task<FirebaseModelOutputs> = interpreter.run(inputs, inputOutputOptions);
        task.addOnSuccessListener{
            val output = it.getOutput<Array<FloatArray>>(0)
            val probabilities1 = output[0]
            Log.v("LOGTAG2", ""+probabilities1)
        }.addOnFailureListener{
            Log.v("LOGTAG2", "error: "+it.message)
        }.addOnCompleteListener {
            interpreter.close()
        }

}
}

最新的 Firebase 建议直接实例化一个 TensorFlow Lite Interpreter,而不是 Firebase 的 ModelInterpreter wrapper:

https://firebase.google.com/docs/ml/ios/migrate-from-legacy-api

请尝试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM