语音增强TFLite模型的安卓java部署
TF官网对于关于图像的深度学习模型部署提供了较多的demo,但是对于语音特别是语音增强的示例较少。本文对使用java在安卓部署语音增强模型进行详细记录。
语音增强模型(降噪)使用的是DTLN模型,DTLN是两个模型串联在一起的模型,一个频域的LSTM,一个时域的LSTM。
1. 官网关于模型加载的函数
private MappedByteBuffer loadModelFile(String model) throws IOException {
AssetFileDescriptor fileDescriptor = getApplicationContext().getAssets().openFd(model + ".tflite");
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
FileChannel fileChannel = inputStream.getChannel();
long startOffset = fileDescriptor.getStartOffset();
long declaredLength = fileDescriptor.getDeclaredLength();
return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}
2. 调用模型infer函数
private void loadModule1() {
String model1 = "model_1";
try {
Interpreter.Options options = new Interpreter.Options();
options.setNumThreads(4);
options.setUseNNAPI(true);
// 加载模型文件
tflite1 = new Interpreter(loadModelFile(model1), options);
Toast.makeText(MainActivity.this, model1 + " model load success", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
3.模型infer函数
public float[][][] model1_infer(double [] spec){
float [] spec_f = new float[spec.length];
for (int i=0; i<spec.length; i++){
spec_f[i] = (float) spec[i];
}
float[][][] input1 =new float[1][1][257];
//input1赋初值
//System.out.println(input1[0][0][i]);
System.arraycopy(spec_f, 0, input1[0][0], 0, 257);
// for (int i = 0; i < 257; i++) {
// System.out.println(input1[0][0][i]);
// }
float[][][] output1 = new float[1][1][257];
//System.out.println(output1[0][0][0]); //自动给定初值0.0
float[][][]