DecodeFile.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright (c) 2023 Xiaomi Corporation (authors: Fangjun Kuang)
  2. using System;
  3. class DecodeFile {
  4. public static void Main(String[] args) {
  5. String usage = @"
  6. ./DecodeFile.exe \
  7. /path/to/tokens.txt \
  8. /path/to/encoder.ncnn.param \
  9. /path/to/encoder.ncnn.bin \
  10. /path/to/decoder.ncnn.param \
  11. /path/to/decoder.ncnn.bin \
  12. /path/to/joiner.ncnn.param \
  13. /path/to/joiner.ncnn.bin \
  14. /path/to/foo.wav [<num_threads> [decode_method]]
  15. num_threads: Default to 2
  16. decoding_method: greedy_search (default), or modified_beam_search
  17. Please refer to
  18. https://k2-fsa.github.io/sherpa/ncnn/pretrained_models/index.html
  19. for a list of pre-trained models to download.
  20. ";
  21. if (args.Length < 8 || args.Length > 10) {
  22. Console.WriteLine(usage);
  23. return;
  24. }
  25. String waveFilename = args[7];
  26. SherpaNcnn.WaveReader waveReader = new SherpaNcnn.WaveReader(waveFilename);
  27. SherpaNcnn.OnlineRecognizerConfig config = new SherpaNcnn.OnlineRecognizerConfig();
  28. config.FeatConfig.SampleRate = 16000;
  29. config.FeatConfig.FeatureDim = 80;
  30. config.ModelConfig.Tokens = args[0];
  31. config.ModelConfig.EncoderParam = args[1];
  32. config.ModelConfig.EncoderBin = args[2];
  33. config.ModelConfig.DecoderParam = args[3];
  34. config.ModelConfig.DecoderBin = args[4];
  35. config.ModelConfig.JoinerParam = args[5];
  36. config.ModelConfig.JoinerBin = args[6];
  37. config.ModelConfig.UseVulkanCompute = 0;
  38. config.ModelConfig.NumThreads = 1;
  39. if (args.Length >= 9) {
  40. config.ModelConfig.NumThreads = Int32.Parse(args[8]);
  41. if (config.ModelConfig.NumThreads > 1) {
  42. Console.WriteLine($"Use num_threads: {config.ModelConfig.NumThreads}");
  43. }
  44. }
  45. config.DecoderConfig.DecodingMethod = "greedy_search";
  46. if (args.Length == 10 && args[9] != "greedy_search") {
  47. Console.WriteLine($"Use decoding_method {args[9]}");
  48. config.DecoderConfig.DecodingMethod = args[9];
  49. }
  50. config.DecoderConfig.NumActivePaths = 4;
  51. SherpaNcnn.OnlineRecognizer recognizer = new SherpaNcnn.OnlineRecognizer(config);
  52. SherpaNcnn.OnlineStream stream = recognizer.CreateStream();
  53. stream.AcceptWaveform(waveReader.SampleRate, waveReader.Samples);
  54. float[] tailPadding = new float[(int)(waveReader.SampleRate * 0.3)];
  55. stream.AcceptWaveform(waveReader.SampleRate, tailPadding);
  56. stream.InputFinished();
  57. while(recognizer.IsReady(stream)) {
  58. recognizer.Decode(stream);
  59. }
  60. SherpaNcnn.OnlineRecognizerResult result = recognizer.GetResult(stream);
  61. Console.WriteLine(result.Text);
  62. }
  63. }