| #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; |
| } |
|
|
| |
| 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); |
|
|
| |
| 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; |
| } |
|
|