java面试题爬虫和语音转文字的相关

简介

不知啥时候, java面试开始变成了八股文, 面试全靠背, 对于小逗比这个记忆力能和金鱼划上等号的人来说, 可就太难了, 再加上非常多的东西在开发中不怎么使用, 就特别忘得快。

在B站上突然最近出现了许多java面试题系列视频, 大致视频长度在20~50个小时, 由于看视频的效率比较低, 突发奇想如果我们通过爬虫将视频下载下来, 再提取音频, 之后在通过语音转文字,我们就能得到处理后的题目了。

难点

1, B站视频下载

解决方案:

a, 使用you-get命令, 需要python环境

b, 使用 jijidown 下载, 居然可以直接下载音频, (缺点需要手动点击, 不太合适)

2, 语音转文字

大多数语音转文字都需要付费, 不管是在线识别还是sdk, 而免费的基本上都有时间限制, 那么我们就要想办法找一个开源的语音识别项目, 最好是训练好的, 能直接拿来用的。(小逗比不怎么懂机器学习相关)

解决方案: 香 vosk免费的言语识别工具包, 准确率有点堪忧, 有钱的可以买商用的。

搭建VOSK服务器

使用docker安装

docker run -d -p 2700:2700 alphacep/kaldi-cn:latest

可以使用别人训练好的模型, 去这里下载kaldi-asr (试了好几次好像不行, 不知道原因)

客户端连接

客户端连接使用官方示例(java)

  • maven仓库地址
<dependency>
    <groupId>com.neovisionaries</groupId>
    <artifactId>nv-websocket-client</artifactId>
    <version>2.14</version>
</dependency>
  • 相关代码

import com.neovisionaries.ws.client.WebSocket;
import com.neovisionaries.ws.client.WebSocketAdapter;
import com.neovisionaries.ws.client.WebSocketFactory;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;

public class VoskClient {
    private ArrayList<String> results = new ArrayList<String>();
    private CountDownLatch recieveLatch;

    public ArrayList<String> transcribe(String path) throws Exception {
        WebSocketFactory factory = new WebSocketFactory();
        WebSocket ws = factory.createSocket("ws://192.168.56.103:2700");
        ws.addListener(new WebSocketAdapter() {
            @Override
            public void onTextMessage(WebSocket websocket, String message) {
                results.add(message);
                recieveLatch.countDown();
            }
        });
        ws.connect();

        FileInputStream fis = new FileInputStream(new File(path));
        DataInputStream dis = new DataInputStream(fis);
        byte[] buf = new byte[8000];
        while (true) {
            int nbytes = dis.read(buf);
            if (nbytes < 0) break;
            recieveLatch = new CountDownLatch(1);
            ws.sendBinary(buf);
            recieveLatch.await();
        }
        recieveLatch = new CountDownLatch(1);
        ws.sendText("{\"eof\" : 1}");
        recieveLatch.await();
        ws.disconnect();

        return results;
    }

    public static void main(String[] args) throws Exception {
        VoskClient client = new VoskClient();
        for (String res : client.transcribe("C:\\Users\\xiaodoubi\\Desktop\\html\\websocket_test.wav")) {
            System.out.println(res);
        }
    }

}

上面的音频文件是从官方下载下来的, 如果我们要使用, 还需要对音频文件进行处理

You can try with any wav file which has proper format - 8khz 16bit mono PCM. Other formats has to be converted before decoding.

wav 文件 - 8khz 16bit 单声道 PCM

对视频和音频的处理:

ffmpeg -i a.mp4  -ar 8000 -ac 1 -acodec pcm_s16le -f wav test.wav
ffmpeg -i DING.mp3 -ar 8000 -ac 1 -acodec pcm_s16le -f wav test.wav

和网易见外商用比较

手动处理后的中文音频-央视天气预报下载

  • vosk
来看 天气 预计 台风 柿子 穿 将于 今天 夜间 到 明天 早晨 在 海南 陵水 到 文昌 一大 沿海 登陆 哪 受到 他 的 影响 的 天下 午 到 明天 中午 广东 大部 广西 的 中 东部 海南岛 大部 这些 地方 会 夏季 大到 暴雨 其中 一些 地方 还会 有 大 暴雨 上述 部分 地区 并 会 伴有 短时 强 降水 等 强 对流 天气 北京 十一点 二十 摄氏度 哈尔滨 新区 戚 老师
几度 还 东四 到 十 八度 榆林 九 当时 五度 铜川 十一 到 十 七度 宝鸡 十二 到 十五 度 汉中 十四道 十 七度 广元 十四道 十九 度 南充 十 八大 二十度 泸州 十八 大 制度 宜宾 十九 达 二十 四度 攀枝花 二十 到
三十 一度 荣昌 十八 大 二十 四度 武隆 时 走到 二十分钟 昭通 十四 大石 制度 究竟 是 自带 十五 度 红河 十八 大 二十九 路 建中 吧 到 十 七度 临汾 十三号 十 八度 进程 十一 到 十六度 承德 八道 十九 度 张家口 六 档 时期 邯郸 邯郸市
三套 石头 度 鹤壁市 自导 十七 七度 平顶山市 自导 十六度 亳州市 自当 十六度 安庆市 发达 十 四度 徐州 十七点 二十度 泰州 二十四 塔尔 十六度 襄阳 十四 到 十 八度 宜昌 十六 到 二十 二度
黄冈 时期 达 二十 四度 二十 二档 二 十九 度
泉州 二十七 套餐 是 堵 北海 二十五 到 三十 二度
我 海峡 小雨 转 大雨 孙俪 三套 琼 州 海峡 暴雨 转 大雨 封闭 六 到 八景 南海 西北部 暴雨 转 大雨 封闭 七套 八景 发行 南海 西北部 暴雨 转 大雨 封闭 七套 八级
  • 网易见外
来看天气。预计台风狮子山将于今天夜间到明天早晨在海南陵水道文昌一带沿海登陆,那受到它的影响呢?今天下午到明天中午广东大部广西的。中东部,海南岛大部这些地方会下起大到暴雨,其中一些地方还会有大暴雨,上述部分地区并会伴有短时强降水等强对流天气。北京,11-20摄氏度。哈尔滨新区7-17度,海东4-18度,榆林9-15度,铜川11-17度。宝鸡12-15度,汉中14-17度,广元14-19度,南充18-20度。泸州18-24度宜宾19-24度,攀枝花20-31度,荣昌18-24度。五龙19-23度交通14-24度趋近14-25度,红河18-29度建中。8-17度临汾13-18度晋城11-16度承德8-19度。张家口6-17度邯郸13-19度鹤壁14-17度平顶山14-16度亳州。14-16度安庆,18-24度徐州17-20度泰州,24-26度襄阳14-10。18度宜昌16-22度黄冈17-24度绍兴22-29度全州27-31度。北海25-32度渤海海峡小雨转大雨,风力3-5级,琼州海峡暴雨转大雨,风地6-8级。南海西北部暴雨转大雨,风力7-8级。

差距还是比较大的。

写到这里突然感觉索然无味, 面试题都不想爬了。

参考

vosk官方

使用FFmpeg转换mp3或wav文件为pcm格式文件