{"id":18658896,"url":"https://github.com/dusty-nv/jetson-voice","last_synced_at":"2025-04-03T02:09:38.938Z","repository":{"id":46109185,"uuid":"262353614","full_name":"dusty-nv/jetson-voice","owner":"dusty-nv","description":"ASR/NLP/TTS deep learning inference library for NVIDIA Jetson using PyTorch and TensorRT","archived":false,"fork":false,"pushed_at":"2024-02-09T12:19:26.000Z","size":1463,"stargazers_count":203,"open_issues_count":23,"forks_count":50,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-24T08:23:14.601Z","etag":null,"topics":["deep-learning","jetson","jetson-nano","nlp","pytorch","speech-recognition","tensorrt","text-to-speech"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dusty-nv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-08T15:03:26.000Z","updated_at":"2025-03-14T02:11:22.000Z","dependencies_parsed_at":"2025-01-10T07:16:09.065Z","dependency_job_id":null,"html_url":"https://github.com/dusty-nv/jetson-voice","commit_stats":{"total_commits":95,"total_committers":1,"mean_commits":95.0,"dds":0.0,"last_synced_commit":"c6a8c9552c7011b31dddef8ed546b02e581f6af6"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusty-nv%2Fjetson-voice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusty-nv%2Fjetson-voice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusty-nv%2Fjetson-voice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusty-nv%2Fjetson-voice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dusty-nv","download_url":"https://codeload.github.com/dusty-nv/jetson-voice/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246922247,"owners_count":20855345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deep-learning","jetson","jetson-nano","nlp","pytorch","speech-recognition","tensorrt","text-to-speech"],"created_at":"2024-11-07T07:34:51.296Z","updated_at":"2025-04-03T02:09:38.916Z","avatar_url":"https://github.com/dusty-nv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jetson-voice\r\n\r\njetson-voice is an ASR/NLP/TTS deep learning inference library for Jetson Nano, TX1/TX2, Xavier NX, and AGX Xavier.  It supports Python and JetPack 4.4.1 or newer.  The DNN models were trained with [NeMo](https://github.com/NVIDIA/NeMo) and deployed with [TensorRT](https://developer.nvidia.com/tensorrt) for optimized performance.  All computation is performed using the onboard GPU.\r\n\r\nCurrently the following capabilities are included:\r\n\r\n* [Automatic Speech Recognition (ASR)](#automatic-speech-recognition-asr)\r\n\t* [Streaming ASR (QuartzNet)](#automatic-speech-recognition-asr) \r\n\t* [Command/Keyword Recognition (MatchboxNet)](#commandkeyword-recognition)\r\n\t* [Voice Activity Detection (VAD Marblenet)](#voice-activity-detection-vad)\r\n* [Natural Language Processing (NLP)](#natural-language-processing-nlp)\r\n\t* [Joint Intent/Slot Classification](#joint-intentslot-classification)\r\n\t* [Text Classification (Sentiment Analysis)](#text-classification)\r\n\t* [Token Classification (Named Entity Recognition)](#token-classification)\r\n\t* [Question/Answering (QA)](#questionanswering)\r\n* [Text-to-Speech (TTS)](#text-to-speech-tts)\r\n\t\r\nThe NLP models are using the [DistilBERT](https://arxiv.org/abs/1910.01108) transformer architecture for reduced memory usage and increased performance.  For samples of the text-to-speech output, see the [TTS Audio Samples](#tts-audio-samples) section below.\r\n\r\n## Running the Container\r\n\r\njetson-voice is distributed as a Docker container due to the number of dependencies.  There are pre-built containers images available on DockerHub for JetPack 4.4.1 and newer:\r\n\r\n```\r\ndustynv/jetson-voice:r32.4.4    # JetPack 4.4.1 (L4T R32.4.4)\r\ndustynv/jetson-voice:r32.5.0    # JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1)\r\ndustynv/jetson-voice:r32.6.1    # JetPack 4.6 (L4T R32.6.1)\r\ndustynv/jetson-voice:r32.7.1    # JetPack 4.6.1 (L4T R32.7.1)\r\n```\r\n\r\nTo download and run the container, you can simply clone this repo and use the `docker/run.sh` script:\r\n\r\n``` bash\r\n$ git clone --branch dev https://github.com/dusty-nv/jetson-voice\r\n$ cd jetson-voice\r\n$ docker/run.sh\r\n```\r\n\r\n\u003e **note**:  if you want to use a USB microphone or speaker, plug it in *before* you start the container\r\n\r\nThere are some optional arguments to `docker/run.sh` that you can use:\r\n\r\n* `-r` (`--run`) specifies a run command, otherwise the container will start in an interactive shell.\r\n* `-v` (`--volume`) mount a directory from the host into the container (`/host/path:/container/path`)\r\n* `--dev` starts the container in development mode, where all the source files are mounted for easy editing\r\n\r\nThe run script will automatically mount the `data/` directory into the container, which stores the models and other data files.  If you save files from the container there, they will also show up under `data/` on the host.\r\n\r\n## Automatic Speech Recognition (ASR)\r\n\r\nThe speech recognition in jetson-voice is a streaming service, so it's intended to be used on live sources and transcribes the audio in 1-second chunks.  It uses a [QuartzNet-15x5](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#quartznet) model followed by a CTC beamsearch decoder and language model, to further refine the raw output of the network.  It detects breaks in the audio to determine the end of sentences.  For information about using the ASR APIs, please refer to [`jetson_voice/asr.py`](jetson_voice/asr.py) and see [`examples/asr.py`](examples/asr.py)\r\n\r\nAfter you start the container, first run a test audio file (wav/ogg/flac) through [`examples/asr.py`](examples/asr.py) to verify that the system is functional.  Run this command (and all subsequent commands) inside the container:\r\n\r\n``` bash\r\n$ examples/asr.py --wav data/audio/dusty.wav\r\n\r\nhi\r\nhi hi this is dust\r\nhi hi this is dusty check\r\nhi hi this is dusty check one two\r\nhi hi this is dusty check one two three\r\nhi hi this is dusty check one two three.\r\n\r\nwhat's the weather or\r\nwhat's the weather going to be tomorrow\r\nwhat's the weather going to be tomorrow in pittsburgh\r\nwhat's the weather going to be tomorrow in pittsburgh.\r\n\r\ntoday is\r\ntoday is wednesday\r\ntoday is wednesday tomorrow is thursday\r\ntoday is wednesday tomorrow is thursday.\r\n\r\ni would like\r\ni would like to order a large\r\ni would like to order a large pepperoni pizza\r\ni would like to order a large pepperoni pizza.\r\n\r\nis it going to be\r\nis it going to be cloudy tomorrow.\r\n```\r\n\r\n\u003e The first time you run each model, TensorRT will take a few minutes to optimize it.  \r\n\u003e This optimized model is then cached to disk, so the next time you run the model it will load faster.\r\n\r\n#### Live Microphone\r\n\r\nTo test the ASR on a mic, first list the audio devices in your system to get the audio device ID's:\r\n\r\n``` bash\r\n$ scripts/list_audio_devices.sh\r\n\r\n----------------------------------------------------\r\n Audio Input Devices\r\n----------------------------------------------------\r\nInput Device ID 1 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,0)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 2 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,1)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 3 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,2)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 4 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,3)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 5 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,4)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 6 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,5)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 7 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,6)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 8 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,7)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 9 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,8)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 10 - 'tegra-snd-t210ref-mobile-rt565x: - (hw:1,9)' (inputs=16) (sample_rate=44100)\r\nInput Device ID 11 - 'Logitech H570e Mono: USB Audio (hw:2,0)' (inputs=2) (sample_rate=44100)\r\nInput Device ID 12 - 'Samson Meteor Mic: USB Audio (hw:3,0)' (inputs=2) (sample_rate=44100)\r\n```\r\n\r\n\u003e If you don't see your audio device listed, exit and restart the container.  \r\n\u003e USB devices should be attached *before* the container is started.\r\n\r\nThen run the ASR example with the `--mic \u003cDEVICE\u003e` option, and specify either the device ID or name:\r\n\r\n``` bash\r\n$ examples/asr.py --mic 11\r\n\r\nhey\r\nhey how are you guys\r\nhey how are you guys.\r\n\r\n# (Press Ctrl+C to exit)\r\n```\r\n\r\n## ASR Classification\r\n\r\nThere are other ASR models included for command/keyword recognition ([MatchboxNet](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/speech_classification/models.html#matchboxnet-speech-commands)) and voice activity detection ([VAD MarbleNet](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/speech_classification/models.html#marblenet-vad)).  These models are smaller and faster, and classify chunks of audio as opposed to transcribing text.  \r\n\r\n### Command/Keyword Recognition\r\n\r\nThe [MatchboxNet](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/speech_classification/models.html#matchboxnet-speech-commands) model was trained on 12 keywords from the [Google Speech Commands](https://ai.googleblog.com/2017/08/launching-speech-commands-dataset.html) dataset:\r\n\r\n```\r\n# MatchboxNet classes\r\n\"yes\",\r\n\"no\",\r\n\"up\",\r\n\"down\",\r\n\"left\",\r\n\"right\",\r\n\"on\",\r\n\"off\",\r\n\"stop\",\r\n\"go\",\r\n\"unknown\",\r\n\"silence\"\r\n```\r\n\r\nYou can run it through the same ASR example as above by specifying the `--model matchboxnet` argument:\r\n\r\n``` bash\r\n$ examples/asr.py --model matchboxnet --wav data/audio/commands.wav\r\n\r\nclass 'unknown' (0.384)\r\nclass 'yes' (1.000)\r\nclass 'no' (1.000)\r\nclass 'up' (1.000)\r\nclass 'down' (1.000)\r\nclass 'left' (1.000)\r\nclass 'left' (1.000)\r\nclass 'right' (1.000)\r\nclass 'on' (1.000)\r\nclass 'off' (1.000)\r\nclass 'stop' (1.000)\r\nclass 'go' (1.000)\r\nclass 'go' (1.000)\r\nclass 'silence' (0.639)\r\nclass 'silence' (0.576)\r\n```\r\n\r\nThe numbers printed on the right are the classification probabilities between 0 and 1.\r\n\r\n### Voice Activity Detection (VAD)\r\n\r\nThe voice activity model ([VAD MarbleNet](https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/speech_classification/models.html#marblenet-vad)) is a binary model that outputs `background` or `speech`:\r\n\r\n``` bash\r\n$ examples/asr.py --model vad_marblenet --wav data/audio/commands.wav\r\n\r\nclass 'background' (0.969)\r\nclass 'background' (0.984)\r\nclass 'background' (0.987)\r\nclass 'speech' (0.997)\r\nclass 'speech' (1.000)\r\nclass 'speech' (1.000)\r\nclass 'speech' (0.998)\r\nclass 'background' (0.987)\r\nclass 'speech' (1.000)\r\nclass 'speech' (1.000)\r\nclass 'speech' (1.000)\r\nclass 'background' (0.988)\r\nclass 'background' (0.784)\r\n```\r\n\r\n## Natural Language Processing (NLP)\r\n\r\nThere are two samples included for NLP:\r\n\r\n* [`examples/nlp.py`](examples/nlp.py) (intent/slot, text classification, token classification)\r\n* [`examples/nlp_qa.py`](examples/nlp_qa.py) (question/answering)\r\n\r\nThese each use a [DistilBERT](https://arxiv.org/abs/1910.01108) model which has been fined-tuned for it's particular task.  For information about using the NLP APIs, please refer to [`jetson_voice/nlp.py`](jetson_voice/nlp.py) and see the samples above.\r\n\r\n### Joint Intent/Slot Classification\r\n\r\nJoint Intent and Slot classification is a task of classifying an Intent and detecting all relevant Slots (Entities) for this Intent in a query. For example, in the query: `What is the weather in Santa Clara tomorrow morning?`, we would like to classify the query as a `weather` Intent, and detect `Santa Clara` as a location slot and `tomorrow morning` as a date_time slot. \r\n\r\nIntents and Slots names are usually task specific and defined as labels in the training data.  The included intent/slot model was trained on the [NLU-Evaluation-Data](https://github.com/xliuhw/NLU-Evaluation-Data) dataset - you can find the various intent and slot classes that it supports [here](https://gist.github.com/dusty-nv/119474dfcf3bfccfbb8428951a64cd23).  They are common things that you might ask a virtual assistant:\r\n\r\n```\r\n$ examples/nlp.py --model distilbert_intent\r\n\r\nEnter intent_slot query, or Q to quit:\r\n\r\n\u003e What is the weather in Santa Clara tomorrow morning?\r\n\r\n{'intent': 'weather_query',\r\n 'score': 0.7165476,\r\n 'slots': [{'score': 0.6280392, 'slot': 'place_name', 'text': 'Santa'},\r\n           {'score': 0.61760694, 'slot': 'place_name', 'text': 'Clara'},\r\n           {'score': 0.5439486, 'slot': 'date', 'text': 'tomorrow'},\r\n           {'score': 0.4520608, 'slot': 'date', 'text': 'morning'}]}\r\n\r\n\u003e Set an alarm for 730am\r\n\r\n{'intent': 'alarm_set',\r\n 'score': 0.5713072,\r\n 'slots': [{'score': 0.40017933, 'slot': 'time', 'text': '730am'}]}\r\n\r\n\u003e Turn up the volume\r\n\r\n{'intent': 'audio_volume_up', 'score': 0.33523008, 'slots': []}\r\n\r\n\u003e What is my schedule for tomorrow?\r\n\r\n{'intent': 'calendar_query',\r\n 'score': 0.37434494,\r\n 'slots': [{'score': 0.5732627, 'slot': 'date', 'text': 'tomorrow'}]}\r\n\r\n\u003e Order a pepperoni pizza from domino's\r\n\r\n{'intent': 'takeaway_order',\r\n 'score': 0.50629586,\r\n 'slots': [{'score': 0.27558547, 'slot': 'food_type', 'text': 'pepperoni'},\r\n           {'score': 0.2778827, 'slot': 'food_type', 'text': 'pizza'},\r\n           {'score': 0.21785143, 'slot': 'business_name', 'text': 'dominos'}]}\r\n\t\r\n\u003e Where's the closest Starbucks?\r\n\r\n{'intent': 'recommendation_locations',\r\n 'score': 0.5438984,\r\n 'slots': [{'score': 0.1604197, 'slot': 'place_name', 'text': 'Starbucks'}]}\r\n\r\n```\r\n\r\n### Text Classification\r\n\r\nIn this text classification example, we'll use the included sentiment analysis model that was trained on the [Standford Sentiment Treebank (SST-2)](https://nlp.stanford.edu/sentiment/index.html) dataset.  It will label queries as either positive or negative, along with their probability:\r\n\r\n```\r\n$ examples/nlp.py --model distilbert_sentiment\r\n\r\nEnter text_classification query, or Q to quit:\r\n\r\n\u003e today was warm, sunny and beautiful out\r\n\r\n{'class': 1, 'label': '1', 'score': 0.9985898}\r\n\r\n\u003e today was cold and rainy and not very nice\r\n\r\n{'class': 0, 'label': '0', 'score': 0.99136007}\r\n```\r\n\r\n(class 0 is negative sentiment and class 1 is positive sentiment)\r\n\r\n### Token Classification\r\n\r\nWhereas text classification classifies entire queries, token classification classifies individual tokens (or words).  In this example, we'll be performing Named Entity Recognition (NER), which is the task of detecting and classifying key information (entities) in text. For example, in a sentence: `Mary lives in Santa Clara and works at NVIDIA`, we should detect that `Mary` is a person, `Santa Clara` is a location and `NVIDIA` is a company.\r\n\r\nThe included token classification model for NER was trained on the [Groningen Meaning Bank (GMB)](http://www.let.rug.nl/bjerva/gmb/about.php) and supports the following annotations in [IOB format](https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)) (short for inside, outside, beginning)\r\n\r\n* LOC = Geographical Entity\r\n* ORG = Organization\r\n* PER = Person\r\n* GPE = Geopolitical Entity\r\n* TIME = Time indicator\r\n* MISC = Artifact, Event, or Natural Phenomenon\r\n\r\n``` bash\r\n$ examples/nlp.py --model distilbert_ner\r\n\r\nEnter token_classification query, or Q to quit:\r\n\u003e Mary lives in Santa Clara and works at NVIDIA\r\n\r\nMary[B-PER 0.989] lives in Santa[B-LOC 0.998] Clara[I-LOC 0.996] and works at NVIDIA[B-ORG 0.967]\r\n\r\n\u003e Lisa's favorite place to climb in the summer is El Capitan in Yosemite National Park in California, U.S.\r\n\r\nLisa's[B-PER 0.995] favorite place to climb in the summer[B-TIME 0.996] is El[B-PER 0.577] Capitan[I-PER 0.483] \r\nin Yosemite[B-LOC 0.987] National[I-LOC 0.988] Park[I-LOC 0.98] in California[B-LOC 0.998], U.S[B-LOC 0.997].\r\n```\r\n\r\n### Question/Answering\r\n\r\nQuestion/Answering (QA) works by supplying a context paragraph which the model then queries the best answer from.  The [`nlp_qa.py`](examples/nlp_qa.py) example allows you to select from several built-in context paragraphs (or supply your own) and to ask questions about these topics.  \r\n\r\nThe QA model is flexible and doesn't need re-trained on different topics, as it was trained on the [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) question/answering dataset which allows it to extract answers from a variety of contexts.  It essentially learns to identify the information most relevant to your query from the context passage, as opposed to learning the content itself.\r\n\r\n``` bash\r\n$ examples/nlp_qa.py \r\n\r\nContext:\r\nThe Amazon rainforest is a moist broadleaf forest that covers most of the Amazon basin of South America. \r\nThis basin encompasses 7,000,000 square kilometres (2,700,000 sq mi), of which 5,500,000 square kilometres \r\n(2,100,000 sq mi) are covered by the rainforest. The majority of the forest is contained within Brazil, \r\nwith 60% of the rainforest, followed by Peru with 13%, and Colombia with 10%.\r\n\r\nEnter a question, C to change context, P to print context, or Q to quit:\r\n\r\n\u003e How big is the Amazon?\r\n\r\nAnswer: 7,000,000 square kilometres\r\nScore:  0.24993503093719482\r\n\r\n\u003e which country has the most?\r\n\r\nAnswer: Brazil\r\nScore:  0.5964332222938538\r\n```\r\n\r\nTo change the topic or create one of your own, enter `C`:\r\n\r\n```\r\nEnter a question, C to change context, P to print context, or Q to quit:\r\n\u003e C\r\n\r\nSelect from one of the following topics, or enter your own context paragraph:\r\n   1. Amazon\r\n   2. Geology\r\n   3. Moon Landing\r\n   4. Pi\r\n   5. Super Bowl 55\r\n\u003e 3\r\n\r\nContext:\r\nThe first manned Moon landing was Apollo 11 on July, 20 1969. The first human to step on the Moon was \r\nastronaut Neil Armstrong followed second by Buzz Aldrin. They landed in the Sea of Tranquility with their \r\nlunar module the Eagle. They were on the lunar surface for 2.25 hours and collected 50 pounds of moon rocks.\r\n\r\nEnter a question, C to change context, P to print context, or Q to quit:\r\n\r\n\u003e Who was the first man on the moon?\r\n\r\nAnswer: Neil Armstrong\r\nScore:  0.39105066657066345\r\n```\r\n\r\n## Text-to-Speech (TTS)\r\n\r\nThe text-to-speech service uses an ensemble of two models:  FastPitch to generate MEL spectrograms from text, and HiFiGAN as the vocoder (female English voice).  For information about using the TTS APIs, please refer to [`jetson_voice/tts.py`](jetson_voice/tts.py) and see [`examples/tts.py`](examples/tts.py)\r\n\r\nThe [`examples/tts.py`](examples/tts.py) app can output the audio to a speaker, wav file, or sequence of wav files.  Run it with `--list-devices` to get a list of your audio devices.\r\n\r\n``` bash\r\n$ examples/tts.py --output-device 11 --output-wav data/audio/tts_test\r\n\r\n\u003e The weather tomorrow is forecast to be warm and sunny with a high of 83 degrees.\r\n\r\nRun 0 -- Time to first audio: 1.820s. Generated 5.36s of audio. RTFx=2.95.\r\nRun 1 -- Time to first audio: 0.232s. Generated 5.36s of audio. RTFx=23.15.\r\nRun 2 -- Time to first audio: 0.230s. Generated 5.36s of audio. RTFx=23.31.\r\nRun 3 -- Time to first audio: 0.231s. Generated 5.36s of audio. RTFx=23.25.\r\nRun 4 -- Time to first audio: 0.230s. Generated 5.36s of audio. RTFx=23.36.\r\nRun 5 -- Time to first audio: 0.230s. Generated 5.36s of audio. RTFx=23.35.\r\n\r\nWrote audio to data/audio/tts_test/0.wav\r\n\r\nEnter text, or Q to quit:\r\n\u003e Sally sells seashells by the seashore.\r\n\r\nRun 0 -- Time to first audio: 0.316s. Generated 2.73s of audio. RTFx=8.63.\r\nRun 1 -- Time to first audio: 0.126s. Generated 2.73s of audio. RTFx=21.61.\r\nRun 2 -- Time to first audio: 0.127s. Generated 2.73s of audio. RTFx=21.51.\r\nRun 3 -- Time to first audio: 0.126s. Generated 2.73s of audio. RTFx=21.68.\r\nRun 4 -- Time to first audio: 0.126s. Generated 2.73s of audio. RTFx=21.68.\r\nRun 5 -- Time to first audio: 0.126s. Generated 2.73s of audio. RTFx=21.61.\r\n\r\nWrote audio to data/audio/tts_test/1.wav\r\n```\r\n\r\n#### TTS Audio Samples\r\n\r\n* [Weather forecast](data/audio/tts_examples/0.wav) (wav)\r\n* [Sally sells seashells](data/audio/tts_examples/1.wav) (wav)\r\n\r\n\r\n## Tests\r\n\r\nThere is an automated test suite included that will verify all of the models are working properly.  You can run it with the `tests/run_tests.py` script:\r\n\r\n``` bash\r\n$ tests/run_tests.py\r\n\r\n----------------------------------------------------\r\n TEST SUMMARY\r\n----------------------------------------------------\r\ntest_asr.py (quartznet)                  PASSED\r\ntest_asr.py (quartznet_greedy)           PASSED\r\ntest_asr.py (matchboxnet)                PASSED\r\ntest_asr.py (vad_marblenet)              PASSED\r\ntest_nlp.py (distilbert_qa_128)          PASSED\r\ntest_nlp.py (distilbert_qa_384)          PASSED\r\ntest_nlp.py (distilbert_intent)          PASSED\r\ntest_nlp.py (distilbert_sentiment)       PASSED\r\ntest_nlp.py (distilbert_ner)             PASSED\r\ntest_tts.py (fastpitch_hifigan)          PASSED\r\n\r\npassed 10 of 10 tests\r\nsaved logs to data/tests/logs/20210610_1512\r\n```\r\n\r\nThe logs of the individual tests are printed to the screen and saved to a timestamped directory.\r\n\r\n\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusty-nv%2Fjetson-voice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdusty-nv%2Fjetson-voice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusty-nv%2Fjetson-voice/lists"}