File size: 1,313 Bytes
37c4768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "diarizen_segmenter.h"

#include <cstdio>
#include <vector>

int main(int argc, char* argv[]) {
    if (argc < 4) {
        std::fprintf(stderr, "Usage: %s <cnn.axmodel> <backend.onnx> <audio.raw>\n", argv[0]);
        std::fprintf(stderr, "  audio.raw: 64000 float32 samples, 16kHz mono\n");
        return 1;
    }

    // Load raw audio
    std::vector<float> audio(64000);
    FILE* f = std::fopen(argv[3], "rb");
    if (!f) {
        std::fprintf(stderr, "Cannot open %s\n", argv[3]);
        return 1;
    }
    std::fread(audio.data(), sizeof(float), 64000, f);
    std::fclose(f);

    diarizen::DiarizenSegmenter segmenter(argv[1], argv[2]);
    auto result = segmenter.run(audio.data(), 64000);

    std::printf("Segmentation: %d frames x %d classes\n",
                result.num_frames, result.num_classes);

    // Show top class for a few frames
    for (int f : {0, 50, 100, 150, 198}) {
        int best_class = 0;
        float best_val = result.log_probs[f * result.num_classes];
        for (int c = 1; c < result.num_classes; ++c) {
            float v = result.log_probs[f * result.num_classes + c];
            if (v > best_val) { best_val = v; best_class = c; }
        }
        std::printf("  Frame %3d: top class %2d (%.4f)\n", f, best_class, best_val);
    }

    return 0;
}