| | |
| | | std::string wav_format, |
| | | FUNASR_HANDLE& tpass_online_handle) { |
| | | // lock for each connection |
| | | scoped_lock guard(thread_lock); |
| | | if(!tpass_online_handle){ |
| | | scoped_lock guard(thread_lock); |
| | | LOG(INFO) << "tpass_online_handle is free, return"; |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | hotwords_embedding, itn); |
| | | |
| | | } else { |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | | } |
| | | } catch (std::exception const& e) { |
| | | scoped_lock guard(thread_lock); |
| | | LOG(ERROR) << e.what(); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | wav_format, (ASR_TYPE)asr_mode_, |
| | | hotwords_embedding, itn); |
| | | } else { |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | | } |
| | | } catch (std::exception const& e) { |
| | | scoped_lock guard(thread_lock); |
| | | LOG(ERROR) << e.what(); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | } catch (std::exception const& e) { |
| | | std::cerr << "Error: " << e.what() << std::endl; |
| | | } |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | |
| | | } |
| | |
| | | auto it_data = data_map.find(hdl); |
| | | if (it_data != data_map.end()) { |
| | | msg_data = it_data->second; |
| | | if(msg_data->msg["is_eof"]){ |
| | | lock.unlock(); |
| | | return; |
| | | } |
| | | } else { |
| | | lock.unlock(); |
| | | return; |
| | |
| | | }catch (std::exception const &e) |
| | | { |
| | | LOG(ERROR)<<e.what(); |
| | | break; |
| | | msg_data->msg["is_eof"]=true; |
| | | guard_decoder.unlock(); |
| | | return; |
| | | } |
| | | |
| | | if (jsonresult.contains("wav_name")) { |
| | |
| | | nlohmann::json json_fst_hws; |
| | | try{ |
| | | json_fst_hws = nlohmann::json::parse(json_string); |
| | | if(json_fst_hws.type() == nlohmann::json::value_t::object){ |
| | | // fst |
| | | try{ |
| | | std::unordered_map<std::string, int> client_hws_map = json_fst_hws; |
| | | merged_hws_map.insert(client_hws_map.begin(), client_hws_map.end()); |
| | | } catch (const std::exception& e) { |
| | | LOG(INFO) << e.what(); |
| | | } |
| | | } |
| | | } catch (std::exception const &e) |
| | | { |
| | | LOG(ERROR)<<e.what(); |
| | | break; |
| | | } |
| | | |
| | | if(json_fst_hws.type() == nlohmann::json::value_t::object){ |
| | | // fst |
| | | try{ |
| | | std::unordered_map<std::string, int> client_hws_map = json_fst_hws; |
| | | merged_hws_map.insert(client_hws_map.begin(), client_hws_map.end()); |
| | | } catch (const std::exception& e) { |
| | | LOG(INFO) << e.what(); |
| | | } |
| | | }else{ |
| | | // nn |
| | | std::string client_nn_hws = jsonresult["hotwords"]; |
| | | nn_hotwords += " " + client_nn_hws; |
| | | LOG(INFO) << "nn hotwords: " << client_nn_hws; |
| | | // LOG(INFO) << "nn hotwords: " << client_nn_hws; |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | LOG(INFO) << "jsonresult=" << jsonresult |
| | | << ", msg_data->msg=" << msg_data->msg; |
| | | if (jsonresult["is_speaking"] == false || |
| | | jsonresult["is_finished"] == true) { |
| | | if ((jsonresult["is_speaking"] == false || |
| | | jsonresult["is_finished"] == true) && |
| | | msg_data->msg["is_eof"] != true && |
| | | msg_data->hotwords_embedding != NULL) { |
| | | LOG(INFO) << "client done"; |
| | | |
| | | // if it is in final message, post the sample_data to decode |
| | |
| | | |
| | | try{ |
| | | // post to decode |
| | | std::vector<std::vector<float>> hotwords_embedding_(*(msg_data->hotwords_embedding)); |
| | | msg_data->strand_->post( |
| | | std::bind(&WebSocketServer::do_decoder, this, |
| | | std::move(subvector), std::move(hdl), |
| | | std::ref(msg_data->msg), |
| | | std::ref(*(punc_cache_p.get())), |
| | | std::move(hotwords_embedding_), |
| | | std::ref(*thread_lock_p), std::move(false), |
| | | msg_data->msg["wav_name"], |
| | | msg_data->msg["mode"], |
| | | msg_data->msg["itn"], |
| | | msg_data->msg["audio_fs"], |
| | | msg_data->msg["wav_format"], |
| | | std::ref(msg_data->tpass_online_handle))); |
| | | msg_data->msg["access_num"]=(int)(msg_data->msg["access_num"])+1; |
| | | if (msg_data->msg["is_eof"] != true && msg_data->hotwords_embedding != NULL) { |
| | | std::vector<std::vector<float>> hotwords_embedding_(*(msg_data->hotwords_embedding)); |
| | | msg_data->strand_->post( |
| | | std::bind(&WebSocketServer::do_decoder, this, |
| | | std::move(subvector), std::move(hdl), |
| | | std::ref(msg_data->msg), |
| | | std::ref(*(punc_cache_p.get())), |
| | | std::move(hotwords_embedding_), |
| | | std::ref(*thread_lock_p), std::move(false), |
| | | msg_data->msg["wav_name"], |
| | | msg_data->msg["mode"], |
| | | msg_data->msg["itn"], |
| | | msg_data->msg["audio_fs"], |
| | | msg_data->msg["wav_format"], |
| | | std::ref(msg_data->tpass_online_handle))); |
| | | msg_data->msg["access_num"]=(int)(msg_data->msg["access_num"])+1; |
| | | } |
| | | } |
| | | catch (std::exception const &e) |
| | | { |