CuteTTS.AXERA / python /transcribe.py
HY-2012's picture
CuteTTS.AXERA: AX650 NPU zero-shot TTS (U16)
579ca46 verified
Raw History Blame Contribute Delete
1.69 kB
#!/usr/bin/env python3
"""Reference-only helper: SenseVoice ASR on AX650 (libax_asr_api) for QA."""
import ctypes, os, sys
import numpy as np
_BASE = os.environ.get("ASR_BASE", "/root/huyuan/183_workspace/Speech-Translation-ZipVoice")
LIB = os.environ.get("ASR_LIB", _BASE + "/third_party/asr/lib/libax_asr_api.so")
MODEL = os.environ.get("ASR_MODEL", _BASE + "/models/asr_official/sensevoice_ax650")
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from cutetts_ax import audio as A
def main():
lib = ctypes.CDLL(LIB)
lib.AX_ASR_Init.argtypes = [ctypes.c_int, ctypes.c_char_p]
lib.AX_ASR_Init.restype = ctypes.c_void_p
lib.AX_ASR_RunPCM.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_float), ctypes.c_int,
ctypes.c_int, ctypes.c_char_p, ctypes.POINTER(ctypes.c_char_p)]
lib.AX_ASR_RunPCM.restype = ctypes.c_int
lib.AX_ASR_Free.argtypes = [ctypes.c_char_p]
os.environ.setdefault("AX_SENSEVOICE_SHARE_DIR", MODEL)
h = lib.AX_ASR_Init(4, MODEL.encode())
assert h, "init failed"
for path in sys.argv[1:]:
wav, sr = A.read_wav(path)
if sr != 16000:
wav = A.resample_to(wav, sr, 16000)
arr = np.ascontiguousarray(wav, dtype=np.float32)
out = ctypes.c_char_p()
rc = lib.AX_ASR_RunPCM(h, arr.ctypes.data_as(ctypes.POINTER(ctypes.c_float)), arr.size,
16000, b"auto", ctypes.byref(out))
txt = out.value.decode("utf-8", "replace") if out.value else ""
if out.value:
lib.AX_ASR_Free(out)
print(f"{os.path.basename(path)}: rc={rc} {txt.strip()}")
if __name__ == "__main__":
main()