Не могу понять ошибку при использовании Fritz для обнаружения объектов - PullRequest
0 голосов
/ 23 февраля 2020

Мне нужно устранить полученную ошибку и хочу успешно запустить это действие.

DetectionActivity.kt

package-name

import ai.fritz.core.Fritz
import ai.fritz.fritzvisionobjectmodel.FritzVisionObjectPredictor
import ai.fritz.vision.inputs.FritzVisionImage
import android.graphics.Bitmap
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.renderscript.Allocation
import android.renderscript.Element
import android.renderscript.RenderScript
import android.renderscript.ScriptIntrinsicYuvToRGB
import kotlinx.android.synthetic.main.activity_detection.*

class DetectionActivity : AppCompatActivity() {

    private lateinit var renderScript: RenderScript
    private lateinit var yuvToRGB: ScriptIntrinsicYuvToRGB
    private var yuvDataLength: Int = 0
    private lateinit var allocationIn: Allocation
    private lateinit var allocationOut: Allocation
    private lateinit var bitmapOut: Bitmap

    private val itemMap by lazy {
        hashMapOf<String, Int>()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Fritz.configure(this, "Fritz-token-key")

        //val onDeviceModel = ObjectDetectionOnDeviceModel()
        //val objectPredictor = FritzVision.ObjectDetection.getPredictor(onDeviceModel)
        val objectPredictor = FritzVisionObjectPredictor.getInstance(this)
        var fritzVisionImage: FritzVisionImage

        cameraView.addFrameProcessor {

            if (yuvDataLength == 0) {
                //Run this only once
                initializeData()
            }

            //Camera Preview returns NV21, so convert it to Bitmap :
            //https://stackoverflow.com/a/43551798/5471095
            allocationIn.copyFrom(it.data)
            yuvToRGB.forEach(allocationOut)
            allocationOut.copyTo(bitmapOut)
            fritzVisionImage = FritzVisionImage.fromBitmap(bitmapOut, it.rotation)
            //val visionResult = objectPredictor.predict(fritzVisionImage)
            val visionObjects = objectPredictor.predict(fritzVisionImage)

            //Clear the existing map
            itemMap.clear()

            //Convert the list of objects detected into a Map so that we can track count of similar items
            //visionResult.visionObjects.forEach { visionObject ->
            visionObjects.forEach{ visionObject ->
                if (itemMap.containsKey(visionObject.visionLabel.text))
                    itemMap[visionObject.visionLabel.text] = itemMap[visionObject.visionLabel.text]!! + 1
                itemMap[visionObject.visionLabel.text] = 1
            }

            //Print the detected items on the screen
            runOnUiThread {
                tvDetectedItem.text = ""
                itemMap.forEach { map ->
                    tvDetectedItem.append("Detected ${map.value} ${map.key}\n")
                }
            }
        }
    }

    private fun initializeData() {
        yuvDataLength = cameraView.previewSize?.height!! * cameraView.previewSize?.width!! * 3 / 2
        renderScript = RenderScript.create(baseContext)
        yuvToRGB = ScriptIntrinsicYuvToRGB.create(renderScript, Element.U8_4(renderScript))
        allocationIn = Allocation.createSized(renderScript, Element.U8(renderScript), yuvDataLength)
        bitmapOut = Bitmap.createBitmap(cameraView.previewSize?.width!!, cameraView.previewSize?.height!!, Bitmap.Config.ARGB_8888)
        allocationOut = Allocation.createFromBitmap(renderScript, bitmapOut)
        yuvToRGB.setInput(allocationIn)
    }

    override fun onStart() {
        super.onStart()
        cameraView.start()
    }

    override fun onStop() {
        super.onStop()
        cameraView.stop()
    }
}

action_detection. xml --Layout Файл для вышеупомянутого соответствующего действия

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.arca.DetectionActivity">

    <com.otaliastudios.cameraview.CameraView
            android:id="@+id/cameraView"
            android:keepScreenOn="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    <TextView
            android:layout_marginBottom="32dp"
            android:textSize="32sp"
            android:textStyle="bold"
            android:textColor="#B09954"
            android:id="@+id/tvDetectedItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_horizontal" />
</FrameLayout>

Я даже добавил необходимые зависимости и все, кроме получить эту ошибку во время выполнения.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: pakage-name, PID: pid-number
    java.lang.NoSuchMethodError: No static method isInitialized(Landroid/content/Context;)Z in class Lai/fritz/core/Fritz; or its super classes (declaration of 'ai.fritz.core.Fritz' appears in /data/app/pakage-name-79eLdVK0LI_fYwGGKlCPVQ==/base.apk)
        at com.example.arca.DetectionActivity.onCreate(DetectionActivity.kt:35)
D/GetRequestTask: Api Request: https://api.fritz.ai/sdk/v1/session/settings 

Скажите, пожалуйста, проблема, и как я могу это исправить ?? Пожалуйста, скажите мне подходящее решение, потому что я пытался и меня раздражало. Если нет, что я могу использовать для добавления функциональности обнаружения объектов в мое приложение android проекта, которое лучше использовать с бесплатными ресурсами и тому подобное? Сделайте шаги подробно для того же.

1 Ответ

0 голосов
/ 25 февраля 2020

Один из Android инженеров Fritz здесь. Похоже, вы используете довольно старую версию нашего SDK. Последний из них 5.1.1. Я бы попытался обновить вашу зависимость app / build.gradle, чтобы использовать ее, а затем попробовать указания здесь: https://docs.fritz.ai/develop/vision/object-detection/android.html.

...