zhifu gao
2023-03-08 646edfbd91008d22ae59807ea0209f26cbb57871
Merge pull request #193 from RapidAI/main

Bugfix: correct RTF in tester
6个文件已修改
53 ■■■■■ 已修改文件
funasr/runtime/onnxruntime/include/Audio.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/include/librapidasrapi.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/src/Audio.cpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/src/commonfunc.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/src/librapidasrapi.cpp 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/tester/tester.cpp 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/onnxruntime/include/Audio.h
@@ -51,6 +51,7 @@
    int fetch(float *&dout, int &len, int &flag);
    void padding();
    void split();
    float get_time_len();
    int get_queue_size() { return (int)frame_queue.size(); }
};
funasr/runtime/onnxruntime/include/librapidasrapi.h
@@ -88,6 +88,7 @@
_RAPIDASRAPI void            RapidAsrUninit(RPASR_HANDLE Handle);
_RAPIDASRAPI const float    RapidAsrGetRetSnippetTime(RPASR_RESULT Result);
#ifdef __cplusplus 
funasr/runtime/onnxruntime/src/Audio.cpp
@@ -116,6 +116,12 @@
           speech_len);
}
float Audio::get_time_len()
{
    return (float)speech_len / 16000;
       //speech_len);
}
bool Audio::loadwav(const char *filename)
{
funasr/runtime/onnxruntime/src/commonfunc.h
@@ -4,7 +4,7 @@
typedef struct
{
    std::string msg;
    float  snippet_time;
}RPASR_RECOG_RESULT;
funasr/runtime/onnxruntime/src/librapidasrapi.cpp
@@ -1,9 +1,6 @@
#include "precomp.h"
#ifdef __cplusplus 
//  void __attribute__ ((visibility ("default"))) fun();
extern "C" {
#endif
@@ -12,12 +9,6 @@
    _RAPIDASRAPI RPASR_HANDLE  RapidAsrInit(const char* szModelDir, int nThreadNum)
    {
#ifdef NDEBUG
        QMLIC_BOOL bMatched = QmLicCheckValid(QLFM_ASR);
        if (!bMatched) {
            return nullptr;
        }
#endif
        Model* mm = create_model(szModelDir, nThreadNum); 
@@ -42,6 +33,7 @@
        int len;
        int flag=0;
        RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
        pResult->snippet_time = audio.get_time_len();
        int nStep = 0;
        int nTotal = audio.get_queue_size();
        while (audio.fetch(buff, len, flag) > 0) {
@@ -73,6 +65,7 @@
        int len;
        int flag = 0;
        RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
        pResult->snippet_time = audio.get_time_len();
        int nStep = 0;
        int nTotal = audio.get_queue_size();
        while (audio.fetch(buff, len, flag) > 0) {
@@ -105,6 +98,7 @@
        int len;
        int flag = 0;
        RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
        pResult->snippet_time = audio.get_time_len();
        int nStep = 0;
        int nTotal = audio.get_queue_size();
        while (audio.fetch(buff, len, flag) > 0) {
@@ -139,6 +133,7 @@
        int nStep = 0;
        int nTotal = audio.get_queue_size();
        RPASR_RECOG_RESULT* pResult = new RPASR_RECOG_RESULT;
        pResult->snippet_time = audio.get_time_len();
        while (audio.fetch(buff, len, flag) > 0) {
            pRecogObj->reset();
            string msg = pRecogObj->forward(buff, len, flag);
@@ -162,6 +157,17 @@
        return 1;
        
    }
    _RAPIDASRAPI const float RapidAsrGetRetSnippetTime(RPASR_RESULT Result)
    {
        if (!Result)
            return 0.0f;
        return ((RPASR_RECOG_RESULT*)Result)->snippet_time;
    }
    _RAPIDASRAPI const char* RapidAsrGetResult(RPASR_RESULT Result,int nIndex)
    {
        RPASR_RECOG_RESULT * pResult = (RPASR_RECOG_RESULT*)Result;
funasr/runtime/onnxruntime/tester/tester.cpp
@@ -34,21 +34,24 @@
    gettimeofday(&end, NULL);
    long seconds = (end.tv_sec - start.tv_sec);
    long micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec);
    printf("Model initialization takes %lfs.\n", (double)micros / 1000000);
    long modle_init_micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec);
    printf("Model initialization takes %lfs.\n", (double)modle_init_micros / 1000000);
    setbuf(stdout, NULL);
    cout << "Result: \"";
    gettimeofday(&start, NULL);
    RPASR_RESULT Result=RapidAsrRecogPCMFile(AsrHanlde, argv[2], RASR_NONE, NULL);
    gettimeofday(&end, NULL);
    float snippet_time = 0.0f;
    if (Result)
    {
        string msg = RapidAsrGetResult(Result, 0);
        setbuf(stdout, NULL);
        cout << "Result: \"";
        cout << msg << endl;
        cout << "\"." << endl;
        snippet_time = RapidAsrGetRetSnippetTime(Result);
        RapidAsrFreeResult(Result);
    }
    else
@@ -56,11 +59,13 @@
        cout <<("no return data!");
    }
  
    printf("Audio length %lfs.\n", (double)snippet_time);
    seconds = (end.tv_sec - start.tv_sec);
    long taking_micros = ((seconds * 1000000) + end.tv_usec) - (start.tv_usec);
    printf("Model inference takes %lfs.\n", (double)micros / 1000000);
    printf("Model inference takes %lfs.\n", (double)taking_micros / 1000000);
    printf("Model inference RTF: %04lf.\n", (double)taking_micros/micros );
    printf("Model inference RTF: %04lf.\n", (double)taking_micros/ (snippet_time*1000000));
    RapidAsrUninit(AsrHanlde);