Размер байтового буфера и форма не совпадают. TFLite/Kotlin

Я новичок в ML, но благодаря документации и сообществу я развиваюсь в этом направлении. Теперь я наткнулся на ошибку и в течение нескольких дней не могу ее решить, в чем проблема и как ее решить?

Я просмотрел туториалы, документацию и кажется, я ничего не забыл. На XML-макете есть картинка, текст, куда идут и берутся данные, их идентификаторы совпадают

Что мне нужно? Я хочу открыть камеру, сфотографировать объект, определить что это такое, основываясь на моей обученной модели

Проблема: приложение завершает работу в строке 194: inputFeature0.loadBuffer(byteBuffer)

полный текст ошибки: java.lang.IllegalArgumentException: The size of byte buffer and the shape do not match.

class SortingFragment : Fragment(), View.OnClickListener {
 
    //ML
    lateinit var bitmap: Bitmap
    lateinit var appCtx: Application
    lateinit var btnMLrn : Button
 
 
    @SuppressLint("WrongConstant")
    public fun checkandGetpermissions() {
        if (PermissionChecker.checkSelfPermission(
                requireActivity(),
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_DENIED
        ) {
            requestPermissions(arrayOf(Manifest.permission.CAMERA), 100)
        } else {
            requireActivity().showToast("Camera permission granted")
        }
    }
 
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 100) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                requireActivity().showToast("Camera permission granted")
            } else {
 
                requireActivity().showToast("Permission Denied")
            }
        }
    }
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.v(LOG_SORTING_FRAGMENT, "onCreate called")
 
        // handling permissions
        checkandGetpermissions()
 
        appCtx = requireActivity().application
 
    }
 
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        Log.v(LOG_SORTING_FRAGMENT, "onCreateView called")
        // Inflate the layout for this fragment
        val rootView = inflater.inflate(R.layout.fragment_sorting, container, false)
 
        btnMLrn = rootView.findViewById(R.id.btnMLrn) 
 
        fltNtf = rootView.findViewById(R.id.fltNtf)
        fltNtf.setOnClickListener(this)
 
        btnMLrn.setOnClickListener(View.OnClickListener {
 
            var camera : Intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
            startActivityForResult(camera, 200)
        })
        return rootView
    } 
 
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
 
        if(requestCode == 250){
 
            img_view.setImageURI(data?.data)
 
            var uri : Uri?= data?.data
            bitmap = MediaStore.Images.Media.getBitmap(requireActivity().contentResolver, uri)
        }
        else if(requestCode == 200 && resultCode == Activity.RESULT_OK){
            bitmap = data?.extras?.get("data") as Bitmap
            img_view.setImageBitmap(bitmap)
 
            var resized = Bitmap.createScaledBitmap(bitmap, 224, 224, true)
            val model = ModelUnquant.newInstance(requireActivity())
 
            var tbuffer = TensorImage.fromBitmap(resized)
            var byteBuffer = tbuffer.buffer
 
// Creates inputs for reference.
            val inputFeature0 = TensorBuffer.createFixedSize(intArrayOf(1, 224, 224, 3), DataType.FLOAT32)
            inputFeature0.loadBuffer(byteBuffer)
 
// Runs model inference and gets result.
            val outputs = model?.process(inputFeature0)
            val outputFeature0 = outputs?.outputFeature0AsTensorBuffer
 
            var max = outputFeature0?.let { it1 -> getMax(it1.floatArray) }
 
            val labels = appCtx.assets.open("labels.txt").bufferedReader().use { it.readText() }.split("\n")
 
            sorttext.setText(labels[max!!])
 
// Releases model resources if no longer used.
            if (model != null) {
                model.close()
            }
        }}
 
 
    fun getMax(arr: FloatArray): Int {
        var ind = 0;
        var min = 0.0f;
 
        for (i in 0..10) {
            if (arr[i] > min) {
                min = arr[i]
                ind = i;
            }
        }
        return ind
    }
} ```

Ответы (0 шт):