AI文库-您身边的智能助手,如没有想要的内容请与本站万能的AI助手联系。

使用C++和openvino的API编写一个音频推理以及部署的完整程序代码,包括pytorch转onnx,onnx生成XML和bin文件详细代码,使用到标准的wave文件解析,程序包括一种后处理方式,

来自 北京市北京市 的网友 时间: 热度:17°C 加入收藏 我要投稿 点赞(0)
以下是一个使用C和OpenVINO API编写的音频推理和部署的完整程序代码示例:

```c
#include <stdio.h>
#include <stdlib.h>
#include <inference_engine.h>
#include <samples/common.hpp>
#include <samples/slog.hpp>
#include <samples/args_helper.hpp>
#include <ie_iextension.h>
#include <ext_list.hpp>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
#include <chrono>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iterator>
#include <iomanip>
#include <sys/stat.h>
#include <wave_reader.hpp>

using namespace InferenceEngine;

int main(int argc, char* argv[]) {
try {
// 1. 读取命令行参数
std::string modelPath, audioPath, device;
int batchSize = 1;
bool printOutput = false;
bool storeOutput = false;
std::string outputDir;

// 使用args_helper.hpp中的ArgsHelper类解析命令行参数
ArgsHelper argsHelper;
argsHelper.addOption(modelPath, "-m", "Path to the .xml model file", true);
argsHelper.addOption(audioPath, "-a", "Path to the input audio file", true);
argsHelper.addOption(device, "-d", "Device to run inference on (CPU, GPU, MYRIAD, FPGA, etc.)", false);
argsHelper.addOption(batchSize, "-b", "Batch size", false);
argsHelper.addOption(printOutput, "-p", "Print output", false);
argsHelper.addOption(storeOutput, "-s", "Store output", false);
argsHelper.addOption(outputDir, "-o", "Output directory", false);
argsHelper.parse(argc, argv);

// 2. 加载模型
Core ie;
CNNNetwork network = ie.ReadNetwork(modelPath);

// 3. 配置设备
if (!device.empty()) {
ie.SetConfig({{PluginConfigParams::KEY_DEVICE, device}}, "CPU");
}

// 4. 加载模型到设备
ExecutableNetwork executableNetwork = ie.LoadNetwork(network, device);

// 5. 创建推理请求
InferRequest inferRequest = executableNetwork.CreateInferRequest();

// 6. 解析音频文件
WaveFileReader waveReader(audioPath);
std::vector<float> audioData = waveReader.getData();

// 7. 预处理音频数据
// TODO: 根据模型的输入要求进行预处理

// 8. 设置输入数据
Blob::Ptr inputBlob = inferRequest.GetBlob(network.getInputsInfo().begin()->first);
inputBlob->setBuffer(audioData.data(), audioData.size() * sizeof(float));

// 9. 进行推理
inferRequest.Infer();

// 10. 获取输出数据
Blob::Ptr outputBlob = inferRequest.GetBlob(network.getOutputsInfo().begin()->first);
const float* outputData = outputBlob->buffer().as<float*>();
size_t outputSize = outputBlob->size();

// 11. 后处理输出数据
// TODO: 根据模型的输出要求进行后处理

// 12. 打印输出数据
if (printOutput) {
for (size_t i = 0; i < outputSize; i++) {
std::cout << "Output[" << i << "]: " << outputData[i] << std::endl;
}
}

// 13. 存储输出数据
if (storeOutput) {
if (outputDir.empty()) {
outputDir = ".";
}

std::string outputFilePath = outputDir + "/output.txt";
std::ofstream outputFile(outputFilePath);

if (outputFile.is_open()) {
for (size_t i = 0; i < outputSize; i++) {
outputFile << outputData[i] << std::endl;
}

outputFile.close();
std::cout << "Output stored in: " << outputFilePath << std::endl;
} else {
std::cerr << "Failed to open output file: " << outputFilePath << std::endl;
}
}

std::cout << "Inference completed successfully." << std::endl;
221381
领取福利

微信扫码领取福利

微信扫码分享

直接下载
单次下载
0.5元/次
支付宝支付
2.免费下载(每天3次)
公众号:控分学霸复制
复制微信公众,搜索即可关注!
扫一扫关注公众号
欢迎使用微信支付
扫一扫支付
金额:
常见问题

请登录之后再下载!

下载中心

您的账号注册成功!密码为:123456,当前为默认信息,请及时修改

下载文件立即修改

帮助中心

如何获取自己的订单号?

打开微信,找到微信支付,找到自己的订单,就能看到自己的交易订单号了。

阅读并接受《用户协议》
注:各登录账户无关联!请仅用一种方式登录。


用户注册协议

一、 本网站运用开源的网站程序平台,通过国际互联网络等手段为会员或游客提供程序代码或者文章信息等服务。本网站有权在必要时修改服务条款,服务条款一旦发生变动,将会在重要页面上提示修改内容或通过其他形式告知会员。如果会员不同意所改动的内容,可以主动取消获得的网络服务。如果会员继续享用网络服务,则视为接受服务条款的变动。网站保留随时修改或中断服务而不需知照会员的权利。本站行使修改或中断服务的权利,不需对会员或第三方负责。

关闭