Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "flag"
  5.  
  6. "github.com/asticode/go-astibob"
  7. "github.com/asticode/go-astibob/abilities/audio_input"
  8. "github.com/asticode/go-astibob/abilities/speech_to_text"
  9. "github.com/asticode/go-astibob/abilities/speech_to_text/deepspeech"
  10. "github.com/asticode/go-astibob/abilities/text_to_speech"
  11. "github.com/asticode/go-astibob/worker"
  12. "github.com/asticode/go-astilog"
  13. "github.com/pkg/errors"
  14. )
  15.  
  16. const wd = "/path/to/deepspeech"
  17.  
  18. func main() {
  19. // Parse flags
  20. flag.Parse()
  21. astilog.FlagInit()
  22.  
  23. // Create worker
  24. w := worker.New("Worker #3", worker.Options{
  25. Index: astibob.ServerOptions{
  26. Addr: "127.0.0.1:4000",
  27. Password: "admin",
  28. Username: "admin",
  29. },
  30. Server: astibob.ServerOptions{Addr: "127.0.0.1:4003"},
  31. })
  32. defer w.Close()
  33.  
  34. // Create deepspeech
  35. mp := wd + "/model/en"
  36. d := deepspeech.New(deepspeech.Options{
  37. AlphabetPath: mp + "/alphabet.txt",
  38. BeamWidth: 1024,
  39. ClientPath: wd + "/DeepSpeech/DeepSpeech.py",
  40. LMPath: mp + "/lm.binary",
  41. LMWeight: 0.75,
  42. ModelPath: mp + "/output_graph.pb",
  43. NCep: 26,
  44. NContext: 9,
  45. PrepareDirPath: wd + "/prepare",
  46. TrainingArgs: map[string]string{
  47. "checkpoint_dir": wd + "/model/custom/checkpoints",
  48. "dev_batch_size": "1",
  49. "export_dir": wd + "/model/custom",
  50. "noearly_stop": "",
  51. "test_batch_size": "1",
  52. "train_batch_size": "1",
  53.  
  54. // Mozilla values
  55. "learning_rate": "0.0001",
  56. "dropout_rate": "0.15",
  57. "lm_alpha": "0.75",
  58. "lm_beta": "1.85",
  59. },
  60. TriePath: mp + "/trie",
  61. ValidWordCountWeight: 1.85,
  62. })
  63. defer d.Close()
  64.  
  65. // Initialize deepspeech
  66. if err := d.Init(); err != nil {
  67. astilog.Fatal(errors.Wrap(err, "main: initializing deepspeech failed"))
  68. }
  69.  
  70. // Create runnable
  71. r := speech_to_text.NewRunnable("Speech to Text", d, speech_to_text.RunnableOptions{
  72. SpeechesDirPath: wd + "/speeches",
  73. })
  74.  
  75. // Initialize runnable
  76. if err := r.Init(); err != nil {
  77. astilog.Fatal(errors.Wrap(err, "main: initializing runnable failed"))
  78. }
  79. defer r.Close()
  80.  
  81. // Register runnables
  82. w.RegisterRunnables(worker.Runnable{
  83. AutoStart: true,
  84. Runnable: r,
  85. })
  86.  
  87. // Register listenables
  88. w.RegisterListenables(
  89. // Forwards audio samples to the "Speech to Text" ability
  90. worker.Listenable{
  91. Listenable: audio_input.NewListenable(audio_input.ListenableOptions{
  92. OnSamples: func(from astibob.Identifier, samples []int, bitDepth, numChannels, sampleRate int, maxSilenceAudioLevel float64) (err error) {
  93. // Send message
  94. if err = w.SendMessage(worker.MessageOptions{
  95. Message: speech_to_text.NewSamplesMessage(
  96. from,
  97. samples,
  98. bitDepth,
  99. numChannels,
  100. sampleRate,
  101. maxSilenceAudioLevel,
  102. ),
  103. Runnable: "Speech to Text",
  104. Worker: "Worker #3",
  105. }); err != nil {
  106. err = errors.Wrap(err, "main: sending message failed")
  107. return
  108. }
  109. return
  110. },
  111. }),
  112. Runnable: "Audio input",
  113. Worker: "Worker #2",
  114. },
  115. worker.Listenable{
  116. // Say detected words out loud
  117. Listenable: speech_to_text.NewListenable(speech_to_text.ListenableOptions{
  118. OnText: func(from astibob.Identifier, text string) (err error) {
  119. // Send message
  120. if err = w.SendMessage(worker.MessageOptions{
  121. Message: text_to_speech.NewSayMessage(text),
  122. Runnable: "Text to Speech",
  123. Worker: "Worker #1",
  124. }); err != nil {
  125. err = errors.Wrap(err, "main: sending message failed")
  126. return
  127. }
  128. return
  129. },
  130. }),
  131. Runnable: "Speech to Text",
  132. Worker: "Worker #3",
  133. },
  134. )
  135.  
  136. // Handle signals
  137. w.HandleSignals()
  138.  
  139. // Serve
  140. w.Serve()
  141.  
  142. // Register to index
  143. w.RegisterToIndex()
  144.  
  145. // Blocking pattern
  146. w.Wait()
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement