1 C++CTC解码算法后移除相邻重复和blank索引

在CTC Decode解码算法之后,比如说使用Greedy CTC Decode、Beam CTC decode、Prefix Beam CTC Decode算法之后,通常会得到包含blank索引的一个长序列,比如说

1,5,8,8,8,0,9,10,10,3,4

其中0表示blank,我们如果需要得到正确的结果,就需要将上述长序列中的blank和相邻的重复索引进行去除,比如说上述索引最终的正确结果如下

1,5,8,9,10,3,4

可以使用C++对上述功能进行实现,示例代码如下

#include <iostream>
#include <vector>


static std::vector<int> RemoveDuplicatesAndBlank(const std::vector<int>& hyp)
{
    std::vector<int> result;

    int current_index = 0;
    while (current_index < hyp.size())
    {
        if (hyp[current_index] != 0)
            result.emplace_back(hyp[current_index]);

        int prev_index = current_index;

        while (current_index < hyp.size() && hyp[current_index] == hyp[prev_index])
        {
            current_index += 1;
        }
    }


    return result;
}

int main()
{
    std::vector<int> a = {1,5,8,8,8,0,9,10,10,3,4 };
    std::vector<int> b = RemoveDuplicatesAndBlank(a);
}