在Kotlin中集成TFLite模型:30×126浮点数组转ByteBuffer
将30×126浮点二维数组转换为ByteBuffer的解决方案
针对你的TFLite模型输入需求,这里提供Kotlin下的具体实现代码,直接将二维浮点数组转成符合要求的ByteBuffer:
// 假设你的30×126二维浮点数组是这个变量 val floatArray2D: Array<FloatArray> = Array(30) { FloatArray(126) { /* 这里填充你的业务数据 */ } } // 1. 初始化ByteBuffer:容量为元素总数 × 4(每个float占4字节),使用native字节顺序匹配TFLite要求 val byteBuffer = ByteBuffer.allocateDirect(30 * 126 * 4) byteBuffer.order(ByteOrder.nativeOrder()) // 2. 将二维数组的每个元素写入ByteBuffer floatArray2D.forEach { floatArray -> floatArray.forEach { value -> byteBuffer.putFloat(value) } } // 3. 重置ByteBuffer的读取位置到起始处,确保loadBuffer能正确读取数据 byteBuffer.flip() // 接下来就可以用这个byteBuffer加载到TensorBuffer里,和你原代码衔接 val inputFeature0 = TensorBuffer.createFixedSize(intArrayOf(1, 30, 126), DataType.FLOAT32) inputFeature0.loadBuffer(byteBuffer)
关键细节说明:
allocateDirect:使用直接内存分配,避免额外内存拷贝,提升TFLite处理效率。ByteOrder.nativeOrder():必须和TFLite模型的字节顺序一致,否则会出现数据解析错误。flip():写完数据后重置缓冲区位置到起始点,否则loadBuffer会从缓冲区末尾开始读取,导致数据异常。
内容的提问来源于stack exchange,提问作者Minhaaz
相关产品推荐
相关产品推荐

