夜雨聆风学习资料网

ARTICLE · 1337669

离线听写1.2.2 App应用:话筒一绿,字就在手机里长出来

离线听写1.2.2 App应用:话筒一绿,字就在手机里长出来

QUOTE

录音留在手机里。你一边说,字一边长出来。开完会,还能按人把话拆开。

我做这个应用,就想要一种很具体的手感。点一下话筒,它变绿,字跟着往外长,说完再点一下就停。微信里把语音转成文字,大概就是这个节奏。

再往前多走一步。一段会议录音丢进去,能看出谁在什么时候说了哪句,还能给常出现的人留个名字。

下面写的都是现在这版离线听写 1.2.2里真有的功能。页面上的字、文件大小、能打开的格式,都按这版安装包来说。

本文看点

01

边说边出字

02

模型单独下载

03

会议按人拆开

01

ON THE PHONE

这版手机上真正能做的事

三件事,三个页面。听写负责边说边出字。会议分离负责把一段录音拆开。记人这件事,就发生在会议结果里。

01

听写

话筒变绿,字跟着长。先下大约 202 MB。

02

会议分离

按人拆开,再逐段转成字。再下大约 55 MB。

03

记住一个人

留下大约 5 秒原话,存在本机。

听写页的空状态写着:点右侧话筒,变绿后文字会直接写进输入框。真的开始听了,提示换成:话筒已变绿,说完再点一次即可停。空闲时话筒是白的,听的时候变成微信那种绿。

听的过程中,字写在一块会刷新的区域里。停下来之后,才回到输入框,方便改字、发送。这个区分是故意的,输入框在聚焦时,外面往里填字经常刷不出来。

    

— 听写页。绿话筒和实时文字都在这一屏

会议那一页叫会议分离。说明文字写的是支持 wav、mp3、m4a、amr。选完文件,它先分人,再把每一段转成字。

声音的计算都在手机上。听写和会议不会为了转写再上传一段录音。要联网的时候,是第一次把模型下到本机。

02

LIVE TEXT

边说边出字,靠的是流式听写

听写模型来自 sherpa-onnx 1.13.7 的官方包,是中英双语的流式 Zipformer,量化到 int8。流式的意思很直白:你还在说,它就先给一版字,停顿之后把这句定下来,再听下一句。

选它,是因为手机输入框吃不消太大的模型。项目里对照过:在线那档 Paraformer 大约 1 GB,塞不进这种实时输入;FireRedASR、Qwen 那一类更重。Whisper 更适合整段出结果,这版没有拿它做边说边出字。

「话筒变绿,只说明它开始听了。声音要真的送进识别器,字才会往外长。」

手机会按它能开的采样率来听,再转成模型要的样子,送进去的是一小段一小段的波形。如果手机没把声音交出来,页面会提示没有收到麦克风数据。这时候去看权限,比反复点话筒有用。

安卓上采集和识别放在同一页里做。两处同时抢麦克风,很容易一边变绿、一边没字。这个坑是这版特意避开的。

第一次点话筒,如果模型还没下,页面会说:听写模型还没下载,点下方状态开始下载。模型没到齐,识别不会硬跑。

03

THE DOWNLOAD

安装包只有十几兆,模型另下

早先把模型打进安装包,包大约 229 MB。装一次就很沉,以后更新还得把模型再传一遍。现在这版把权重拿出去了,安装包大约 14 MB,模型等装好再下。

14 MB

安装包 1.2.2

202 MB

听写这一套

14 MB 对应的安装包是 14,835,404 字节。听写这一套是运行时加模型,加起来 212,209,477 字节,大约 202 MB。说话人那一套是 57,951,877 字节,大约 55 MB。数字按文件原始字节换算,没有四舍五入成好看的整数。

四个文件放在阿里云 OSS 的 sherpa 目录,对象设成公共读,应用里不放密钥。地址是:

...url

https://asr-models-tigerhhzz01.oss-cn-beijing.aliyuncs.com/sherpa

文件
干什么
大小
听写运行时
让模型在手机里跑起来
12.5 MB
听写模型
中英流式转写
190 MB
说话人运行时
跑分离
11.8 MB
说话人模型
把不同的人拆开
43.5 MB

字节分别是 13,150,239、199,059,238、12,364,192、45,587,685。表里按 MB 取了一位,方便看。

只想边说边出字,下「下载听写模型」就够。要拆会议,两组都要下。分离负责分人,转写还是用上面那套听写模型。

下载会核对文件大小。已经下全、大小对得上的,不会再下一次。所以后面换一个新安装包,只要还是这四份模型,本机不用重新下。

    

— 模型页。听写、说话人各一个按钮

NOTE

小程序装不下这套模型,打开听写会直接告诉你换到 App。网页如果要自己拉这些文件,还得给 OSS 配跨域;安卓安装包走的是应用内下载,不靠浏览器跨域。

04

THE MEETING

一段会议,按人拆开

听写模型只管把声音变成字,它不认识人。分人用的是另一套官方包:分段来自 pyannote,用来判断哪一段像同一个人;声音嵌入来自 3D-Speaker 的 ERes2Net。分完之后,每一段再送进同一个听写模型。

所以会议结果是两层。上面一层是谁、从几秒到几秒。下面一层才是这句话的文字。

格式
安卓上怎么读
wav
直接读波形,支持 16 位和浮点
mp3
交给系统音频解码
m4a
走手机解码器。3gp 也是这条路
amr
走手机解码器,看文件头是不是 AMR

解不开的时候,页面会说:这段音频解不出来,请换 wav、mp3、m4a 或 amr。网页版没有安卓这套解码器,amr 在浏览器里通常走不通。

    

— 会议页。每一段对应一个人、一段时间

记住一个人,存的是一小段原话

某段话说得清楚,点登记,起个名字。应用留下这个人大约 5 秒的原话,存在本机。下次再导入会议,这段原话会接到录音前面,中间留大约半秒空白,免得两段粘在一起。然后整段一起做分离。

和这段原话在时间上对上的那一簇,显示你起的名字。同名再登记一次,会盖掉旧的。这个名字和原话只留在这台手机。

    

— 登记。名字会在下一次对得上的会议里出现

05

THE FLOW

照着这个顺序用

安装包直接装到安卓手机。装好先别急着点话筒,模型还没在里面。

先把字听出来

STEP 01下听写模型

打开「离线模型」,点「下载听写模型」。进度走完,大约 202 MB 到本机。这一步要联网。

STEP 02允许麦克风

回到「听写」,点右侧话筒。系统问权限就允许。话筒变绿,就可以说。

STEP 03说完再点一次

字会跟着往外长。说完再点一次话筒,它停下来,文字留在输入框里,改完再发送。从这一步起可以断网。

再把一段会拆开

STEP 01把说话人模型也下了

还在「离线模型」页,点「下载说话人模型」,大约 55 MB。听写那一套也得在,否则只有人、没有字。

STEP 02选一段录音

打开「会议分离」,选 wav、mp3、m4a 或 amr。文件会先拷到应用自己的目录,再开始拆。

STEP 03等分段和转写都出来

先看到谁在哪一段时间说话,再看到这段话。会越长,等得越久,手机也越吃内存。

STEP 04给清楚的那段起名字

点登记,写下名字。下次再导入,对得上的人会直接显示这个名字。

∞

THE END

用之前,先有个数

这版发出去的安装包是安卓 1.2.2。小程序跑不了模型。网页可以做听写,会议里的 m4a、amr 仍以安卓这条解码路径为准。

两个人叠着说,分离容易糊。很长的会要同时把两套模型放在内存里,手机会发热、会变慢。安静、轮流说的会,结果清楚得多。

记人靠的是那段大约 5 秒的原话对上下一场会议。它适合「这就是上次那个人」。拿去当开户、打卡那种核验,不在这版的能力里。文章里也没有写识别率,因为这版没有做过一套对外的字错测评。

模型下全之前,话筒变绿也不该出字。先看离线模型页,再回头说话。

你手头如果有一段会,更想先试哪一种:边说边出字,还是把录音按人拆开?评论里留一句就行。用过 m4a 或 amr 的,也可以说一声顺不顺。

END

我是 Tiger,乐于分享AI技术干货。

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料