如何在Flutter中实现LogisticRegressionCv模型的加载调用
Flutter端使用.pkl格式LogisticRegressionCV模型的完整方案
你手里的.pkl格式模型是Python特有的序列化产物,无法直接在Dart环境下解析运行,必须先做格式转换再部署,具体步骤如下:
第一步:模型格式转换
优先选择转成ONNX通用模型格式,适配性更高、转换流程更简单:
- 先在Python环境安装依赖:
pip install scikit-learn onnx skl2onnx - 运行转换代码,注意输入维度要和你训练时的图片输入维度对齐:
import pickle from skl2onnx import convert_sklearn from skl2onnx.common.data_types import FloatTensorType # 加载本地pkl模型文件 with open("your_model.pkl", "rb") as f: lr_model = pickle.load(f) # 此处以单张28*28灰度图拉平为784维向量为例,替换为你模型的实际输入维度 input_shape = [("float_input", FloatTensorType([None, 784]))] onnx_model = convert_sklearn(lr_model, initial_types=input_shape) # 导出转换后的ONNX模型 with open("lr_model.onnx", "wb") as f: f.write(onnx_model.SerializeToString())
第二步:Flutter端部署
使用ONNX Runtime官方Flutter插件完成推理:
- 在
pubspec.yaml中添加依赖和模型资源声明:
dependencies: flutter: sdk: flutter onnxruntime_flutter: ^1.16.0 # 可替换为最新稳定版本 flutter: assets: - assets/lr_model.onnx
- 图片预处理:必须和训练时的预处理逻辑完全一致,包括灰度转换、尺寸缩放、像素值归一化、维度拉平等所有步骤,这是推理结果准确的核心前提。
- 模型加载与推理示例代码:
import 'package:onnxruntime/onnxruntime.dart'; import 'dart:typed_data'; OrtEnv? _ortEnv; OrtSession? _modelSession; // 初始化模型,建议在应用启动时调用 Future<void> initModel() async { _ortEnv = OrtEnv(); final sessionOpts = OrtSessionOptions(); _modelSession = await OrtSession.fromAsset("assets/lr_model.onnx", sessionOpts); } // 执行推理,inputData为预处理后的图片一维浮点数组 List<double> runInference(Float32List inputData) { if (_modelSession == null) throw Exception("模型未初始化"); // 输入维度替换为你模型的实际输入维度,示例为1张784维的输入 final inputTensor = OrtValueTensor.createTensorWithDataList(inputData, [1, 784]); final runOpts = OrtRunOptions(); final outputs = _modelSession!.run(runOpts, {"float_input": inputTensor}); return outputs[0].value as List<double>; }
注意事项
- 如果模型输入为多通道彩色图片,转换时的输入维度要对应调整,比如3通道224*224的图片拉平后维度为150528
- 若你的模型输出是分类概率,可直接取最大值对应的索引作为分类结果
内容的提问来源于stack exchange,提问作者zeewa42
相关产品推荐
相关产品推荐

