

PC离线语音识别与中译英测试
2026-10-28用户已完成网页体验测试并认可当前PC效果,要求进入开发板部署。已核对同一模型的参数与板端资源,当前不能直接移植,详见 板端部署核查(BOARD_PORT_README.md)。本文后续"待用户测试"描述保留首次交付时的验证范围;用户的体验确认没有改变旧板端学生模型的质量状态。
2026-10-28起先验收PC效果,再决定板端模型和移植方案。本程序使用已下载的公开预训练模型,真实执行识别与翻译,不查固定句子表、不硬编码示例结果,不需要在线API。当前板端小学生 `translate.bin` 质量不合格,本程序不会读取或替换它,不会自动启动训练或烧录。
启动与操作
本机双击本目录 **`start_pc_translator.cmd`**,打开 **http://127.0.0.1:8765**。保留启动窗口;首次加载完成后,页面显示模型就绪。若同端口已有本程序,脚本直接打开已有页面。
-
在文字框输入中文,点击中译英,先单独确认翻译效果。
-
点击开始录音,按浏览器正常提示允许麦克风,说完整句子,点击停止识别。仅点击开始才会采集,打开页面不会自动录音。
-
或选择音频,点击导入识别。优先用PCM WAV;也支持FLAC、OGG及本机libsndfile能解码的MP3。网页不支持直接导入MP4、WebM或无头PCM。
-
核对识别原文、英文和耗时。默认中文;英文模式仅做英文转写,英文栏直接显示原文并提示。自动语言适合较长录音,短句建议手动选择语言。目前翻译方向为中译英。
不需要说特定口令或训练集内句子。支持自由输入,但识别和翻译可能出错,不承诺任何句子都正确。录音最多120秒,达到上限自动停止并处理;导入文件超过120秒会明确拒绝,不截断。上传上限50MiB,文字上限20000字符。当前是整段录音结束后推理,尚非边说边出字。
已有可导入的功能测试音频:
```text
/out/offline_translate/recovery_v2/pc_reference/synthetic/weather_good.wav
D:/data/asr/wav/cmn_hans_cn/test/000000_1906.wav
```
第一个是Windows SAPI合成"今天天气很好",只验证功能,不能用于真人准确率;第二个是真人FLEURS中文test音频。
命令、日志与环境
在 `` 目录执行:
```powershell
$pcPython = "application/bt_watch/outdir/offline_translate_env/venv/Scripts/python.exe"
& $pcPython -X utf8 -u application/bt_watch/tools/offline_translate/pc_app.py --open-browser
```
启动窗口按Ctrl+C停止,或双击 `stop_pc_translator.cmd` 停止已有后台服务;正在推理时请等本次完成。命令行也可加 `--stop`。端口占用可加 `--port 8766`,线程默认4,可用 `--threads 2` 调整。默认保存提交音频的16kHz单声道PCM WAV和结果JSON,便于复现;不希望保存录音时先停止旧服务,再加 `--no-save-audio` 启动,文字结果和运行日志仍会记录。
服务只监听127.0.0.1。网页、模型和推理均在本机,不发送远端。WebAudio生成PCM WAV,后端直接解码与重采样,不依赖PATH里的ffmpeg。缺少本地模型时页面报错,不自动联网下载。
所有记录在 `/out/offline_translate/recovery_v2/pc_reference/`:
| 文件或目录 | 内容 |
| --- | --- |
| `server.log` | 启动、模型就绪、请求耗时与异常 |
| `asr_events.jsonl` | ASR结果、模型身份与性能 |
| `sessions/<时间_编号>/result.json` | 每次真实原文、译文、分段、耗时与模型身份 |
| `sessions/<时间_编号>/input_16k.wav` | 提交录音的重采样副本,除非禁用保存 |
| `ASR_PC_REFERENCE.md/.json` | 识别抽测、音频来源与SHA |
| `MT_PC_REFERENCE.md`、`pc_mt_probe_report.json` | 真实翻译实例、长文及已发现错误 |
| `http_audit.json` | HTTP端到端与输入边界实测 |
本机隔离Python环境已准备好,无需重复安装。迁移到其他PC时请创建独立环境,按 `requirements-pc.txt` 安装,并复制下述完整模型及来源/许可证。不要向SDK Python安装推理依赖。
模型和真实效果
| 功能 | 本地模型 | 权重大小 | 许可证 |
| --- | --- | ---: | --- |
| 中英文ASR | `openai/whisper-base` | 145,262,807B | MIT |
| 中译英 | `Helsinki-NLP/opus-mt-zh-en` | 312,087,009B | CC-BY-4.0,见模型卡 |
模型位于 `/out/offline_translate/teachers/whisper-base/base.pt` 与 `/out/offline_translate/teachers/opus-mt-zh-en/`。Whisper校验官方SHA;Marian以 `local_files_only=True, trust_remote_code=False` 加载,结果记录实际权重SHA。两者在CPU运行,合计权重约436MiB,另需运行内存。它们不是小于1MiB的板端模型,也不兼容OTM1 loader。
ASR既有64条官方test抽样(中英文各32):中文两侧OpenCC统一简体后CER约19.67%,英文WER约11.44%,无空输出,报告在 `out/offline_translate/teachers/whisper-base/eval/`。CER/WER是字符/词编辑错误率,越低越好,不能写成整句正确率;抽样也不等于完整test结果。
本次模块另做4条真人功能抽测:中文2条CER11.36%,英文2条WER10%,4条均非空,ASR推理0.83~1.11秒。样本太少,不作为整体准确率。合成语音"今天天气很好""今天天气怎么样""一二三"也能转写,不计入真人质量指标。
文字翻译真实输出(2线程,推理不含加载):
| 输入 | 输出 | 秒 |
| --- | --- | ---: |
| 今天天气很好 | It's a nice day. | 1.195 |
| 今天天气怎么样 | How was the weather today? | 0.323 |
| 请问火车站怎么走 | Which way is the train station? | 0.713 |
| 我想订明天上午去上海的火车票 | I'd like to book a train ticket to Shanghai tomorrow morning. | 1.220 |
295字新旅行长文以96输入token预算分2段,9.731秒,各段产生EOS,源文覆盖完整。模型仍会误译:天气问句时态不理想、长文将元译成美元、将高铁译成high train。输入预算256的HTTP初测还出现后半段语义漏译,因此默认改为96,减少过长片段;输入覆盖和EOS只能验证处理完整性,不能证明语义无遗漏。完整输入输出保留报告。
既有外部FLEURS人工中英参考349对上,Marian的BLEU为23.7887、chrF为53.5443,见 `out/offline_translate/teachers/opus-mt-zh-en/eval_fleurs/teacher_report.json`。这两个是语料级指标,不是准确率百分比;教师预训练是否包含同源句子未独立确认。ASR和MT分模块指标不能相乘或合成端到端翻译准确率。PC耗时不代表ATS3089P,长文已超过期望的1~3秒。
HTTP端到端测试28项接口/边界检查通过,包含真人中英音频、静音、非法文件、120秒上限、忙状态和结果落盘。4线程服务上,天气合成音频得到"今天天气很好"→"It's a nice day.",该次HTTP总耗时2.947秒;真人中文10.38秒录音得到非空识别和译文,处理4.41秒,仍有"篇章"识别成"偏章"的错误。96 token修正后的295字文字翻译HTTP复测18.70秒;不同负载、线程和测试路径耗时不同,不能只引用最快短句。原256预算漏译及修正后完整实际输出见 `http_audit.json`、`http_postfix_audit.json`、`http_weather_smoke.json`。
前端音频模拟测试覆盖尾样本flush、120秒边界、PCM WAV与操作互斥;静态资源通过HTTP逐字节核对。当前会话没有接入可控制的浏览器,未完成真人麦克风与真实浏览器的点击验证;请在上述页面录自己的声音验收,不把模拟测试算作实录验收。
实现与后续
`pc_app.py` 后台加载模型、串行推理,繁忙请求返回409;`pc_web/` 为无外部依赖页面,AudioWorklet按真实声卡采样率录音,停止时刷新尾部样本。`pc_asr.py` 可独立识别并统一中文简体;`pc_mt.py` 按真实token预算分段,禁止静默截断输入;译文输出预算不足会细分重试,仍未完成就报错。
先用真实麦克风、新句子和不同说话人做PC人工验收,记录原文错误、译文意义错误与停说到译文耗时,再决定是否换教师。之后才评估学生预训练/蒸馏、量化与板端算力。NAND能存放模型不代表板端能在1~3秒内推理;本轮未新增训练、未替换板端bin、未打包新固件。