赞
踩
前言:在实际使用中,经常要参考官方的案例,但有时候因为工具的不一样,比如idea 和 eclipse,普通项目和spring项目等的差别;还有时候因为水平有限,难以在散布于官方的各个文档读懂;还有些时候因为自己测试使用的demo的文件不符合官网要求。。。总是实现不了相关功能。
本系列博客尝试结合官网案例,阐述百度 AI 开放平台里的组件使用方式,核心是如何在spring项目中快速上手应用。
本文介绍如何在Springboot中使用语音文件识别 & ffmpeg的安装和使用
1.从官网demo到idea中使用;
2.从idea中使用到springboot项目整合;
3.ffmpeg的安装和使用初步;
https://ai.baidu.com/ai-doc/SPEECH/plbxfq24s
有时候找参考文档看到这个,点击git后有时候又打不卡
https://github.com/Baidu-AIP/java-sdk
打开GitHub其实有比较好的说明文档,但GitHub能否顺利打开又是不确定的
这里可以下载各种sdk资源
下载压缩包,解压
官方文档提供了eclipse的使用: 3.在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”。
但我用idea比较顺手,eclipse是在不熟。
用来存放刚刚下载后解压获得的jar包
复制粘贴到lib目录下
点击确定,导入成功
拷贝官网的案例,导入jar包里面的包
加入配置文件,日志相关
然后我发现语音识别需要的文件格式是pcm的格式,所以又找了工具去转其他格式的文件为pcm,后来发现每次调用总是出各种文件;最后经过一番波折,终于在官网的python案例中找到一个示例文件。。。。
中间各种bug,最后终于用找到的这个案例跑通
jar包的理解
简易spring项目搭建总览
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tianju</groupId> <artifactId>baidu-api</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 起步依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 百度ai的java sdk中心--> <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.16</version> </dependency> <!--json工具--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.12</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
BaiduPro配置类
package com.tianju.config.baidu; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * 专门用来获取配置文件里的值 */ @Component @ConfigurationProperties(prefix = "baidu") @PropertySource("classpath:config/baiduAip.properties") @Data @NoArgsConstructor @AllArgsConstructor public class BaiduPro { private String appId; private String apiKey; private String secretKey; }
配置类,放入容器中
package com.tianju.config.baidu; import com.baidu.aip.speech.AipSpeech; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 百度相关的配置文件 */ @Configuration public class BaiduConfig { @Autowired private BaiduPro baiduPro; /** * 语音相关 AipSpeech * @return AipSpeech放容器中 */ @Bean public AipSpeech aipSpeech(){ // 初始化一个AipSpeech AipSpeech client = new AipSpeech(baiduPro.getAppId(), baiduPro.getApiKey(), baiduPro.getSecretKey()); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); return client; } }
GET http://localhost:10050/api/baidu/hello
package com.tianju.config.controller; import com.baidu.aip.speech.AipSpeech; import com.tianju.config.resp.HttpResp; import lombok.extern.slf4j.Slf4j; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/baidu") @Slf4j public class BaiduApiController { @Autowired private AipSpeech aipSpeech; @GetMapping("/hello") public HttpResp hello(){ JSONObject pcm = aipSpeech.asr( "D:\\Myprogram\\springboot-workspace\\spring-project\\baidu-api\\src\\main\\resources\\static\\helloAipSpeech.pcm", "pcm", 16000, null); log.debug("get response:"+pcm.toString()); return HttpResp.success(pcm.toString()); } }
FFMPEG简介
FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。
FFmpeg的用户有Google,Facebook,Youtube,优酷,爱奇艺,土豆等
基础知识
1.容器/文件(Conainer/File):即特定格式的多媒体文件,比如mp4、flv、mkv等。
2.媒体流(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。
3.数据帧/数据包(Frame/Packet):通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。
一般情况下:
Frame对应压缩前的数据,Packet对应压缩后的数据。
4.编解码器(Codec):以帧为单位实现压缩数据和原始数据之间的相互转换的
5.复用(mux):把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
6.解复用(mux):把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)
\7. 码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。
8.帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。
9.码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的位数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。
下载后,到指定位置解压,然后进行环境变量的配置
cmd命令测试是否成功
ffmpeg -i wjs.aac -acodec pcm_s16le -ar 44100 output.pcm
ffmpeg -i wjs.aac -acodec pcm_s16le -f s16le -ac 2 -ar 16000 16k.pcm
ffmpeg -i wjs.aac -ss 00:00:10 -to 00:00:59 -f s16le -ar 16000 16.pcm
这是一个使用FFmpeg命令行工具的命令,用于将音频文件wjs.aac从第10秒到第59秒的部分提取出来,并将其转换为16位有符号的PCM格式,采样率为16000Hz,保存为16.pcm文件。
具体参数解释如下:
所以,这个命令的意思是提取wjs.aac文件中从第10秒到第59秒的音频部分,并将其转换为16位有符号的PCM格式,采样率为16000Hz,保存为16.pcm文件。
提取1分钟的pcm音频文件命令
1.从官网demo到idea中使用;
2.从idea中使用到springboot项目整合;
3.ffmpeg的安装和使用初步;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。