Language
Juxi KWSウェイクアップサウンドカードは、組み込みシステム、ロボティクス、IoTアプリケーション向けに設計された高性能オフライン音声認識モジュールです。クラウドに依存しないローカル処理により、低遅延で高速かつ信頼性の高い音声制御を実現し、素早い応答とデータプライバシーが求められるシーンに最適です。
主な特長
- ✅ 100%オフライン処理: すべての音声認識はモジュール上でローカルに実行され、インターネット接続は不要です。データのプライバシーと低遅延を確保します
- 🎤 高い認識精度: 中国語と英語の音声コマンドに対応し、通常環境では認識精度が>95%を実現
- ⚡ 超低遅延: 音声コマンド入力後300ms以内に応答し、リアルタイムの制御体験を提供
- 🔧 高いカスタマイズ性: 公式ファームウェア設定ツールでカスタムウェイクワードやコマンドフレーズを設定可能
- 🖥️ マルチプラットフォーム対応: Raspberry Pi、Jetson Nano、x86 PC、ROS/ROS2ロボットシステムに対応
- 🔌 プラグアンドプレイ: 標準USB HIDインターフェースで、追加ハードウェアは不要
- 🎛️ オーディオ出力内蔵: 音声フィードバック応答用のスピーカードライバーを内蔵
- 💡 低消費電力: 平均動作電流< 50mAで、バッテリー駆動デバイスに最適
基本機能
デフォルトのウェイクワード
モジュールには工場出荷時のデフォルトウェイクワードがプリセットされています:
- 中国語: "你好小犀", "小犀小犀", "钜犀"
- 英語: "Hello Xiaoxi", "Juxi Technology"
対応コマンドのカテゴリ
モジュールは最大100個のカスタム音声コマンドに対応しています:
- 動作制御: 前進、後退、左折、右折、停止
- 照明制御: ライトのオン/オフ、ライトの色変更(赤、緑、青、黄)
- システム制御: スリープモード、ウェイクアップ、原点位置への復帰
- アクチュエータ制御: グリッパーの開閉、モーター速度調整
- カスタムコマンド: 特定アプリケーション向けに完全にカスタマイズ可能なコマンドセット
通信プロトコル
モジュールはシンプルで信頼性の高いシリアルポートプロトコルを使用します:
- ボーレート: 115200
- データビット: 8
- ストップビット: 1
- パリティ: なし
- フレーム形式:
0xAA 0x55 [Command Type] [Command ID] 0xFB
クイックスタート
シリアル通信の基本例 (Python)
モジュールから音声コマンドを読み取る最小限の動作例です:
#!/usr/bin/env python3
import serial
import time
# Configure serial port (adjust port name for your system)
# Windows: "COM3", "COM4", etc.
# Linux: "/dev/ttyUSB0", "/dev/ttyACM0", etc.
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.01)
# Command mapping dictionary
COMMANDS = {
(0x00, 0x01): "Stop",
(0x00, 0x04): "Move forward",
(0x00, 0x05): "Move backward",
(0x00, 0x06): "Turn left",
(0x00, 0x07): "Turn right",
(0x00, 0x0A): "Turn off light",
(0x00, 0x0B): "Turn on red light",
(0x00, 0x0C): "Turn on green light",
(0x00, 0x0D): "Turn on blue light",
(0x00, 0x0E): "Turn on yellow light",
(0x00, 0x21): "Return to origin",
(0x00, 0x27): "Move up",
(0x00, 0x28): "Move down",
(0x00, 0x2B): "Grip close",
(0x00, 0x2C): "Grip open",
(0x00, 0x03): "System sleep"
}
WAKE_WORDS = {
0x01: "Hello Xiaoxi",
0x02: "Xiaoxi Xiaoxi",
0x03: "Juxi Technology"
}
def read_voice_command():
"""Read and parse voice command frames from serial port"""
if ser.in_waiting >= 5:
frame = ser.read(5)
# Verify frame header and footer
if frame[0] == 0xAA and frame[1] == 0x55 and frame[4] == 0xFB:
# Wake word detected
if frame[3] == 0x00:
return f"[WAKE] {WAKE_WORDS.get(frame[2], 'Unknown wake word')}"
# Command received
else:
cmd = COMMANDS.get((frame[2], frame[3]), f"Unknown command: {frame[2]}:{frame[3]}")
return f"[COMMAND] {cmd}"
return None
# Main execution loop
if __name__ == "__main__":
try:
print("KWS Wake-up Sound Card Test")
print("Listening for voice commands... (Press Ctrl+C to exit)")
print("-" * 50)
while True:
result = read_voice_command()
if result:
print(result)
time.sleep(0.01)
except KeyboardInterrupt:
ser.close()
print("\n" + "-" * 50)
print("Program terminated")
使用方法
- KWSサウンドカードをUSBポート経由でデバイスに接続します
- 必要に応じてCH341シリアルドライバーをインストールします(入手先: https://www.wch.cn/downloads/CH341SER_EXE.html)
- コード内のシリアルポート名をシステムに合わせて変更します
- Pythonスクリプトを実行します
- ウェイクワード("Hello Xiaoxi")を話してモジュールを起動します
- 確認音の5秒以内にコマンドを話してください
- モジュールがコマンドを認識し、シリアルポート経由で出力します
応用: ROS2統合
このモジュールはロボットアプリケーション向けにROS2 (Robot Operating System 2)とシームレスに統合できます。以下は簡略化した音声制御ノードの例です:
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
import serial
class KWSVoiceControlNode(Node):
def __init__(self):
super().__init__('kws_voice_control_node')
# Create publisher for voice commands
self.cmd_publisher = self.create_publisher(String, '/kws/voice_command', 10)
# Initialize serial port
self.ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.01)
# Create timer for serial reading
self.timer = self.create_timer(0.01, self.serial_read_callback)
self.get_logger().info("KWS Voice Control Node started successfully")
self.get_logger().info("Listening for wake words and commands...")
def serial_read_callback(self):
"""Read and process serial data"""
if self.ser.in_waiting >= 5:
frame = self.ser.read(5)
if frame[0] == 0xAA and frame[1] == 0x55 and frame[4] == 0xFB:
msg = String()
# Process wake event
if frame[3] == 0x00:
wake_word = {0x01: "hello_xiaoxi", 0x02: "xiaoxi_xiaoxi", 0x03: "juxi"}.get(frame[2], "unknown")
msg.data = f"wake:{wake_word}"
self.get_logger().info(f"Wake up detected: {wake_word}")
# Process command event
else:
cmd_data = f"{frame[2]}:{frame[3]}"
msg.data = f"command:{cmd_data}"
self.get_logger().info(f"Command received: {cmd_data}")
# Publish message
self.cmd_publisher.publish(msg)
def main(args=None):
rclpy.init(args=args)
node = KWSVoiceControlNode()
try:
rclpy.spin(node)
except KeyboardInterrupt:
node.get_logger().info("Node interrupted by user")
finally:
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
代表的な応用シーン
- 🤖 ロボティクス: 移動ロボット、ロボットアーム、UAV、サービスロボットの音声制御
- 🏠 スマートホーム: 照明、家電、カーテン、セキュリティシステムの音声制御
- 🏭 産業制御: 産業機器、生産ライン、工場内制御のハンズフリー操作
- 🚗 自動車: インフォテインメント、空調、車両機能の車載音声制御システム
- 🎮 IoTデバイス: スマートスピーカー、スマートディスプレイ、その他の接続デバイスの音声対話
- 🎓 教育&研究: 音声対話プロジェクトとロボティクス研究のための開発プラットフォーム
技術仕様
| パラメータ | 仕様 |
|---|---|
| チップセット | CI1302 高性能音声認識SoC |
| 認識距離 | 0.5m ~ 5m (調整可能) |
| 応答時間 | < 300ms |
| 認識精度 | > 95%(静かな環境、背景ノイズ< 60dB) |
| 対応言語 | 中国語、英語(他の言語にもカスタマイズ可能) |
| 通信インターフェース | USBシリアル (CDC-ACM)、ボーレート115200 |
| 動作電圧 | 5V DC (USB給電) |
| 動作電流 | < 50mA (動作時)、< 10mA (待機時) |
| 動作温度 | -10°C ~ 60°C |
| 保管温度 | -20°C ~ 85°C |
| 寸法 | 40mm x 30mm x 10mm |
| オーディオ出力 | 1Wスピーカードライバー出力 |
| マイク | 高感度MEMSマイク内蔵 |
ファームウェアのカスタマイズ
モジュールは完全にカスタマイズ可能なウェイクワードとコマンドセットに対応しています:
- 以下のサイトを訪れてください: Qiying Tairen Voice AI Platform
- CI1302チップセット構成で新しいプロジェクトを作成します
- カスタムウェイクワードとコマンドフレーズを追加します
- 応答トーンとブロードキャスト内容を設定します
- カスタマイズしたファームウェアをコンパイルしてダウンロードします
- 公式プログラミングツールでモジュールにファームウェアを書き込みます
リソース&サポート
- JuxiTechnology github: 公式オープンソースコード、サンプル、開発リソース
- Lark Wiki: 完全なドキュメント、ユーザーガイド、テクニカルサポート

