| | |
| | | |
| | | try{ |
| | | YAML::Node frontend_conf = config["frontend_conf"]; |
| | | YAML::Node post_conf = config["vad_post_conf"]; |
| | | YAML::Node post_conf = config["model_conf"]; |
| | | |
| | | this->vad_sample_rate_ = frontend_conf["fs"].as<int>(); |
| | | this->vad_silence_duration_ = post_conf["max_end_silence_time"].as<int>(); |
| | |
| | | LOG(ERROR) << "Error when load vad onnx model: " << e.what(); |
| | | exit(-1); |
| | | } |
| | | GetInputOutputInfo(vad_session_, &vad_in_names_, &vad_out_names_); |
| | | GetInputOutputInfo(vad_session_, &vad_in_names_, &vad_out_names_, &vad_allocator); |
| | | } |
| | | |
| | | void FsmnVad::GetInputOutputInfo( |
| | | const std::shared_ptr<Ort::Session> &session, |
| | | std::vector<const char *> *in_names, std::vector<const char *> *out_names) { |
| | | std::vector<const char *> *in_names, std::vector<const char *> *out_names, |
| | | Ort::AllocatorWithDefaultOptions *allocator) { |
| | | Ort::AllocatorWithDefaultOptions allocator; |
| | | // Input info |
| | | int num_nodes = session->GetInputCount(); |
| | | in_names->resize(num_nodes); |
| | | for (int i = 0; i < num_nodes; ++i) { |
| | | std::unique_ptr<char, Ort::detail::AllocatedFree> name = session->GetInputNameAllocated(i, allocator); |
| | | std::unique_ptr<char, Ort::detail::AllocatedFree> name = session->GetInputNameAllocated(i, *allocator); |
| | | Ort::TypeInfo type_info = session->GetInputTypeInfo(i); |
| | | auto tensor_info = type_info.GetTensorTypeAndShapeInfo(); |
| | | ONNXTensorElementDataType type = tensor_info.GetElementType(); |
| | |
| | | num_nodes = session->GetOutputCount(); |
| | | out_names->resize(num_nodes); |
| | | for (int i = 0; i < num_nodes; ++i) { |
| | | std::unique_ptr<char, Ort::detail::AllocatedFree> name = session->GetOutputNameAllocated(i, allocator); |
| | | std::unique_ptr<char, Ort::detail::AllocatedFree> name = session->GetOutputNameAllocated(i, *allocator); |
| | | Ort::TypeInfo type_info = session->GetOutputTypeInfo(i); |
| | | auto tensor_info = type_info.GetTensorTypeAndShapeInfo(); |
| | | ONNXTensorElementDataType type = tensor_info.GetElementType(); |
| | |
| | | p.insert(p.end(), vad_feats[vad_feats.size() - 1].begin(), vad_feats[vad_feats.size() - 1].end()); |
| | | } |
| | | out_feats.emplace_back(p); |
| | | p.clear(); |
| | | } |
| | | } |
| | | // Apply cmvn |
| | |
| | | } |
| | | |
| | | FsmnVad::~FsmnVad() { |
| | | for (auto vad_in_name_item : vad_in_names_) vad_allocator.Free((void*)vad_in_name_item); |
| | | for (auto vad_out_name_item : vad_out_names_) vad_allocator.Free((void*)vad_out_name_item); |
| | | } |
| | | |
| | | FsmnVad::FsmnVad():env_(ORT_LOGGING_LEVEL_ERROR, ""),session_options_{} { |