Open XinyeYang opened 5 months ago
private void dynamicLoadModel(String modelPath, String yamlPath) { predictButton.setText("正在加载模型"); predictButton.setEnabled(false); radioGroup.setEnabled(false); tvOutputResult.setText(""); tvInferenceTime.setText("模型预测耗时: -- 毫秒");
// 由于切换过程中加载模型UI会卡住,使用线程保证用户体验,创建后台单线程池 ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.submit(new Runnable() { @Override public void run() { // 执行耗时操作 SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); int cpuThreadNum = Integer.parseInt(sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY), getString(R.string.CPU_THREAD_NUM_DEFAULT))); String cpuPowerMode = sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY), getString(R.string.CPU_POWER_MODE_DEFAULT)); try { String realModelPath = modelPath; if (!modelPath.substring(0, 1).equals("/")) { String modelFileName = Utils.getFileNameFromString(modelPath); realModelPath = MainActivity.this.getCacheDir() + File.separator + modelFileName; Utils.copyFileFromAssets(MainActivity.this, modelPath, realModelPath); } String realYamlPath = yamlPath; if (!yamlPath.substring(0, 1).equals("/")) { String yamlFileName = Utils.getFileNameFromString(yamlPath); realYamlPath = MainActivity.this.getCacheDir() + File.separator + yamlFileName; Utils.copyFileFromAssets(MainActivity.this, yamlPath, realYamlPath); } configParser.init(realModelPath, realYamlPath, cpuThreadNum, cpuPowerMode); visualize.init(configParser.getNumClasses()); } catch (Exception e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "配置加载失败!", Toast.LENGTH_SHORT).show(); } runOnUiThread(new Runnable() { @Override public void run() { // reload model if configure has been changed loadModel(); } }); } }); // 关闭线程池 executorService.shutdown();
}
已收到您的issue,等内部同学看一下
建议先用CPP Demo跑一下 (参考 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/arm_cpu.html#yunxingtuxiangfenleishilichengxu ),脱离 APP 确认下二次加载是否有问题,先排除一下APP集成本身的问题,在SHELL Demo中运行确认下。
private void dynamicLoadModel(String modelPath, String yamlPath) { predictButton.setText("正在加载模型"); predictButton.setEnabled(false); radioGroup.setEnabled(false); tvOutputResult.setText(""); tvInferenceTime.setText("模型预测耗时: -- 毫秒");
}