此儲存庫包含在桌面或無頭智慧揚聲器上與 SUSI.AI 伺服器一起執行 SUSI.AI 的元件。這裡實現的功能包括使用麥克風收集語音命令、使用 Deep Speech、Flite、Pocket Sphinx、IBM Watson 等組件將語音轉換為文字 (STT)、使用語音命令控制音量以及提供簡單的 GTK 介面。為了使用 SUSI.AI 伺服器(以 Java 編寫)的 JSON 輸出,我們使用 SUSI.AI API Python 包裝器。該專案的最終目標是讓用戶能夠在物聯網設備、汽車系統、洗衣機等設備上安裝 SUSI.AI,除了桌上型電腦和智慧揚聲器。
此項目提供的功能如下:
SUSI.AI生態係由以下部分組成:
* Web Client and Content Management System for the SUSI.AI Skills - Home of the SUSI.AI community
|_ susi.ai (React Application, User Account Management for the CMS, a client for the susi_server at https://api.susi.ai the content management system for susi skills)
* server back-end
|_ susi_server (the brain of the infrastructure, a server which computes answers from queries)
|_ susi_skill_data (the knowledge of the brain, a large collection of skills provided by the SUSI.AI community)
* android front-end
|_ susi_android (Android application which is a client for the susi_server at https://api.susi.ai)
* iOS front-end
|_ susi_iOS (iOS application which is a client for the susi_server at https://api.susi.ai)
* Smart Speaker - Software to turn a Raspberry Pi into a Personal Assistant
| Several sub-projects come together in this device
|_ susi_installer (Framework which can install all parts on a RPi and Desktops, and also is able to create SUSIbian disk images)
|_ susi_python (Python API for the susi_server at https://api.susi.ai or local instance)
|_ susi_server (The same server as on api.susi.ai, hosted locally for maximum privacy. No cloud needed)
|_ susi_skill_data (The skills as provided by susi_server on api.susi.ai; pulled from the git repository automatically)
|_ susi_linux (a state machine in python which uses susi_python, Speech-to-text and Text-to-speech functions)
|_ susi.ai (React Application, the local web front-end with User Account Management, a client for the local deployment of the susi_server, the content management system for susi skills)
susi_linux
通常透過 SUSI 安裝程式安裝。在這種情況下, $HOME/SUSI.AI/bin
中有用於設定和啟動的二進位檔案以及其他可用的二進位檔案(在預設安裝設定下)。
如果是手動安裝,則需要將wrapper
目錄中的包裝器配置為指向對應的安裝目錄和config.json
檔案的位置。
配置是透過檔案 config.json 完成的,該檔案通常位於$HOME/.config/SUSI.AI/config.json
中。
腳本$HOME/SUSI.AI/bin/susi-config
最適合用於查詢、設定和更改susi_linux
的配置。 $HOME/SUSI.AI/bin/susi-linux-configure
中還有一個用於設定的 GUI 介面。
可能的鍵和值透過執行$HOME/SUSI.AI/bin/susi-config keys
給出
一些重要的鍵和可能的值:
- `stt` is the speech to text service, one of the following choices:
- `google` - use Google STT service
- `watson` - IBM/Watson STT
- `bing` - MS Bing STT
- `pocketsphinx` - PocketSphinx STT system, working offline
- `deepspeech-local` - DeepSpeech STT system, offline, WORK IN PROGRESS
- `tts` is the text to speech service, one of the following choices:
- `google` - use Google TTS
- `watson` - IBM/Watson TTS (login credential necessary)
- `flite` - flite TTS service working offline
- `hotword.engine` is the choice if you want to use snowboy detector as the hotword detection or not
- `Snowboy` to use snowboy
- `PocketSphinx` to use Pocket Sphinx
- `wakebutton` is the choice if you want to use an external wake button or not
- `enabled` to use an external wake button
- `disabled` to disable the external wake button
- `not available` for systems without dedicated wake button
Other interfaces for configuration are available for Android and iOS.
Manual configuration is possible, the allowed keys in [`config.json`](config.json) are currently
- `device`: the name of the current device
- `wakebutton`: whether a wake button is available or not
- `stt`: see above for possible settings
- `tts`: see above for possible settings
- `language': language for STT and TTS processing
- `path.base`: directory where support files are installed
- `path.sound.detection`: sound file that is played when detection starts, relative to `data_base_dir`
- `path.sound.problem`: sound file that is played on general errors, relative to `data_base_dir`
- `path.sound.error.recognition`: sound file that is played on detection errors, relative to `data_base_dir`
- `path.sound.error.timeout`: sound file that is played when timing out waiting for spoken commands
- `path.flite_speech`: flitevox speech file, relative to `data_base_dir`
- `hotword.engine`: see above for possible settings
- `hotword.model`: (if hotword.engine = Snowboy) selects the model file for the hotword
- `susi.mode`: access mode to `accounts.susi.ai`, either `anonymous` or `authenticated`
- `susi.user`: (if susi.mode = authenticated) the user name (email) to be used
- `susi.pass`: (if susi.mode = authenticated) the password to be used
- `roomname`: free form description of the room
- `watson.stt.user`, `watson.stt.pass`, `watson.tts.user`, `watson.tts.pass`: credentials for IBM/Watson server for TTS and STT
- `watson.tts.voice`: voice name selected for IBM/Watson TTS
- `bing.api`: Bing STT API key
For details concerning installation, setup, and operation on RaspberryPi, see
the documentation at [SUSI Installer](https://github.com/fossasia/susi_installer).
## Information for developers
This section is intended for developer.
### **Important:** Tests before making a new release
1. The hotword detection should have a decent accuracy
2. SUSI Linux shouldn't crash when switching from online to offline and vice versa (failing as of now)
3. SUSI Linux should be able to boot offline when no internet connection available (failing as of now)
### Roadmap
- Offline Voice Detection (if possible with satisfactory results)
### General working of SUSI
- SUSI.AI follows a finite state system for the code architecture.
- Google TTS and STT services are used as default services but if the internet fails, a switch to offline services PocketSphinx (STT) and Flite (TTS) is made automatically
### Run SUSI Linux for development purposes
If installed via the SUSI Installer, systemd unit files are installed:
- `ss-susi-linux.service` for the user bus, use as user with `systemctl --user start/enable ss-susi-linux`
- `[email protected]` for the system bus, use as `root` user to start a job for a specific user,
independent from whether the user is logged in or not: `sudo systemctl start/enable ss-susi-linux@USER`
By default, it is ran in _production_ mode, where log messages are limited to _error_ and _warning_ only.
In development, you may want to see more logs, to help debugging. You can switch it to "verbose" mode by 2 ways:
1. Run it manually
- Stop systemd service by `sudo systemctl stop ss-susi-linux`
- Use Terminal, _cd_ to `susi_linux` directory and run
python3 -m susi_linux -v
or repeat `v` to increase verbosity:
python3 -m susi_linux -vv
2. Change command run by `systemd`
- Edit the _/lib/systemd/system/ss-susi-linux.service_ and change the command in `ExecStart` parameter:
```ini
ExecStart=/usr/bin/python3 -m susi_linux -v --short-log
重新載入 systemd 守護程式: sudo systemctl daemon-reload
重新啟動服務: sudo systemctl restart ss-susi-linux
現在您可以透過journalctl
讀取日誌:
journalctl -u ss-susi-linux
journalctl -fu ss-susi-linux
在日誌不斷生成時取得更新。 -v
選項實際上與第一種方法相同。 --short-log
選項是排除journalctl
已經提供的一些資訊。有關logging
功能的更多信息,請參閱此 GitHub 問題。