วิธีใช้ OpenThai 2.0 ASR Streaming บน Windows, Mac และ Linux
OpenThai 2.0 ASR Streaming ที่เราเปิดตัวสัปดาห์นี้ ถอดเสียงพูดภาษาไทยเป็นข้อความขณะที่คนยังพูดอยู่ คู่มือนี้แสดงวิธีรันบนเครื่องของคุณเอง ตั้งแต่ติดตั้ง ถอดเสียงจากไฟล์ ไปจนถึงทำคำบรรยายสดจากไมโครโฟน เสียงของคุณไม่ออกจากเครื่อง
ใช้ได้สามแบบ
- ไม่ต้องเขียนโค้ด: Chinda Bot แอปเดสก์ท็อปที่ใช้ได้ฟรีของเรา Chinda Bot สำหรับ Mac, Windows และ Linux arm64 มีปุ่มไมโครโฟน กดแล้วพูดภาษาไทย เสียงจะถูกถอดเป็นข้อความบนเครื่องของคุณด้วยโมเดลนี้
- รันบนเครื่องตัวเองและเรียกจากโค้ดของคุณ: ใช้โมเดลกับเซิร์ฟเวอร์ขนาดเล็กที่มาด้วยกัน ตามคู่มือนี้
- ใช้ผ่าน API: OpenThai ASR Realtime ให้บริการโมเดลเดียวกันผ่าน WebSocket ฟรีช่วงเปิดตัว และ Chinda ASR Pro v2 เป็นบริการที่แม่นยำกว่าสำหรับไฟล์เสียง
สิ่งที่ต้องมี
| ระบบ | Linux, Windows 10 หรือ 11 ผ่าน WSL 2 หรือ Mac ชิป Apple silicon |
| หน่วยประมวลผล | ใช้ CPU ได้ ถ้ามี GPU ของ NVIDIA บน Linux จะเร็วกว่ามาก ส่วนบน Mac โมเดลรันบน CPU |
| หน่วยความจำ | ว่างราว 6 GB (เซิร์ฟเวอร์ใช้สูงสุดราว 6 GB บน Mac ของเรา) |
| ดาวน์โหลด | โมเดล 2.6 GB และแพ็กเกจ Python ราว 1.4 GB บน Mac ของเรา บน Linux จะมากกว่านี้เพราะ PyTorch มาพร้อมไลบรารี GPU ของ NVIDIA |
สิ่งที่เราทดสอบ ทุกขั้นตอนด้านล่างรันบน MacBook Pro ชิป M3 Max ด้วย CPU ทีมของเรารันเซิร์ฟเวอร์เดียวกันนี้บน Linux กับ GPU NVIDIA H100 และบน CPU ของ Linux ส่วน Windows เรายังไม่ได้ทดสอบด้วยตัวเอง
1. ติดตั้ง
- Linux
- Windows
- Mac
บน Ubuntu หรือ Debian ให้ติดตั้งเครื่องมือก่อน แล้วติดตั้ง uv ซึ่งใช้ติดตั้ง Python และแพ็กเกจ:
sudo apt install git curl ffmpeg libportaudio2
curl -LsSf https://astral.sh/uv/install.sh | sh
เปิดเทอร์มินัล ใหม่ แล้วรัน:
mkdir thai-asr && cd thai-asr
uv venv asr --python 3.12
source asr/bin/activate
uv pip install torch==2.13.0 --index-url https://download.pytorch.org/whl/cu130
uv pip install Cython packaging
uv pip install --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-match \
"nemo-toolkit[asr] @ git+https://github.com/NVIDIA-NeMo/Speech.git@cf724ac337d1ebc7d0dda1e23fb80916f52927a5"
uv pip install fastapi uvicorn python-multipart websockets huggingface_hub sounddevice
นี่คือชุดแพ็กเกจที่ทีมของเราใช้ ใช้ได้ทั้งเครื่องที่มีและไม่มี GPU ของ NVIDIA
NVIDIA NeMo ซึ่งเป็นชุดเครื่องมือของโมเดลนี้ไม่รองรับการรันบน Windows โดยตรง จึงต้องใช้ WSL 2 ที่รัน Ubuntu ภายใน Windows เปิด PowerShell แบบ administrator แล้วรัน:
wsl --install -d Ubuntu-24.04
รีสตาร์ตเมื่อระบบขอ เปิด Ubuntu จากเมนู Start แล้วทำตามขั้นตอนของ Linux ในหน้านี้ภายใน Ubuntu ถ้ามี GPU ของ NVIDIA ไดรเวอร์ปกติของ Windows จะให้ Ubuntu ใช้ GPU ได้ เรายังไม่ได้ทดสอบขั้นตอนเหล่านี้บน Windows ด้วยตัวเอง
ใน Terminal ให้ติดตั้ง ffmpeg ด้วย Homebrew (ใช้อ่านไฟล์ MP3 และรูปแบบอื่น) และติดตั้ง uv ซึ่งใช้ติดตั้ง Python และแพ็กเกจ:
brew install ffmpeg
curl -LsSf https://astral.sh/uv/install.sh | sh
เปิดหน้าต่าง Terminal ใหม่ แล้วรัน:
mkdir thai-asr && cd thai-asr
uv venv asr --python 3.12
source asr/bin/activate
uv pip install torch==2.13.0
uv pip install Cython packaging
uv pip install "nemo-toolkit[asr] @ git+https://github.com/NVIDIA-NeMo/Speech.git@cf724ac337d1ebc7d0dda1e23fb80916f52927a5"
uv pip install fastapi uvicorn python-multipart websockets huggingface_hub sounddevice
ถ้า Mac ขอติดตั้ง command line developer tools (สำหรับ git) ให้กดตกลง แล้วรันคำสั่งเดิมอีกครั้ง
สภาพแวดล้อมนี้แยกแพ็กเกจที่ติดตั้งออกจากส่วนอื่นของเครื่อ ง เมื่อเปิดเทอร์มินัลใหม่ทุกครั้ง ให้เข้าโฟลเดอร์ thai-asr แล้วรัน source asr/bin/activate อีกครั้ง
2. ดาวน์โหลดโมเดล
ใช้คำสั่งเดียวกันในทุกระบบ ได้ไฟล์โมเดลและเซิร์ฟเวอร์ รวม 2.6 GB:
hf download iapp/OpenThai2.0-ASR-Streaming --include "serve/*" --include "*_raw.nemo" --local-dir OpenThai2.0-ASR-Streaming
3. เปิดเซิร์ฟเวอร์
- Linux
- Windows
- Mac
cd OpenThai2.0-ASR-Streaming/serve
CHINDA_DEVICE=cuda CHINDA_PRELOAD=1 python -m uvicorn app:app --port 18081
ถ้าไม่มี GPU ของ NVIDIA ให้ตัด CHINDA_DEVICE=cuda ออก
ภายใน Ubuntu เหมือนบน Linux:
cd OpenThai2.0-ASR-Streaming/serve
CHINDA_DEVICE=cuda CHINDA_PRELOAD=1 python -m uvicorn app:app --port 18081
ถ้าไม่มี GPU ของ NVIDIA ให้ตัด CHINDA_DEVICE=cuda ออก
cd OpenThai2.0-ASR-Streaming/serve
CHINDA_NUM_THREADS=1 CHINDA_PRELOAD=1 python -m uvicorn app:app --port 18081
ให้ใส่ CHINDA_NUM_THREADS=1 ไว้เสมอ บน M3 Max ของเรา การใช้เธรดเดียวเร็วที่สุดอย่างชัดเจน คลิปยาว 7.6 วินาทีใช้เวลา 2.2 วินาทีเมื่อใช้เธรดเดียว 6.4 วินาทีเมื่อใช้สี่เธรด และ 21 วินาทีเมื่อใช้ค่าเริ่มต้นคือหนึ่งเธรดต่อหนึ่งคอร์
การเปิดครั้งแรกใช้เวลาหนึ่งถึงสองนาที เซิร์ฟเวอร์พร้อมเมื่อขึ้นข้อความ Application startup complete เปิดทิ้งไว้ แล้วเปิดเทอร์มินัลที่สองสำหรับขั้นต่อไป
4. ถอดเสียงจากไฟล์
ในเทอร์มินัลที่สอง ในโฟลเดอร์ thai-asr ที่เปิดใช้สภาพแวดล้อมแล้ว:
curl -F file=@meeting.wav -F mode=standard http://127.0.0.1:18081/v1/transcribe
ผลลัพธ์เป็น JSON ข้อความอยู่ในช่อง display_text โดยเว้นวรรคระหว่างประโยค
- ไฟล์ยาว จะถูกตัดตรงช่วงที่ไม่มีใครพูดนาน 0.7 วินาที แล้วถอดทีละช่วง รายการช่วงอยู่ใน
segmentsควรให้เซิร์ฟเวอร์ตัดแบบนี้เสมอ เพราะถ้าถอดเป็นสตรีมยาวสตรีมเดียว โมเดลจะตกหล่นคำบางคำหลังช่วงที่เงียบ mode:standardสำหรับเสียงอ่าน ข่าว การบรรยาย และการพูดแทนพิมพ์conversationสำหรับบทสนทนาทั่วไปและคลิปวิดีโอmeetingเพิ่มการระบุผู้พูด ซึ่งใช้โมเดลอีกตัวที่ดาวน์โหลดเมื่อใช้ครั้งแรก- ช่องอื่น:
lang=th-mixเขียนคำภาษาอังกฤษเป็นอักษรละติน และlatency_msเลือกได้ 80, 320, 560 (ค่าเริ่มต้น) หรือ 1120 - รูปแบบไฟล์: WAV และ FLAC อ่านได้ทันที MP3 และรูปแบบอื่นต้องมี ffmpeg ซึ่งติดตั้งไว้ในขั้นที่ 1
บน CPU ของ M3 Max ของเรา คลิปยาว 7.6 วินาทีใช้เวลา 2.2 วินาที และไฟล์ยาว 41 วินาทีใช้ 5.9 วินาที เร็วกว่าเวลาจริงราว 3 ถึง 7 เท่า บน NVIDIA H100 หนึ่งใบ ถอดไฟล์ได้เร็วกว่าเวลาจริงราว 257 เท่า