SpringBoot项目(百度AI整合)——如何在Springboot中使用语音文件识别 ffmpeg的安装和使用

在这里插入图片描述

前言

前言:在实际使用中,经常要参考官方的案例,但有时候因为工具的不一样,比如idea 和 eclipse,普通项目和spring项目等的差别;还有时候因为水平有限,难以在散布于官方的各个文档读懂;还有些时候因为自己测试使用的demo的文件不符合官网要求。。。总是实现不了相关功能。

本系列博客尝试结合官网案例,阐述百度 AI 开放平台里的组件使用方式,核心是如何在spring项目中快速上手应用。

本文介绍如何在Springboot中使用语音文件识别 & ffmpeg的安装和使用

在这里插入图片描述

文章目录

  • 前言
  • 引出
  • 一、如何使用语音识别
    • 1.官网的sdk
    • 2.下载sdk
  • 二、如何在idea中跑通demo
    • 1.新建项目,新建lib文件夹
    • 2.选中作为lib引入
    • 3.拷贝官网的案例
    • 4.获得语音识别案例文件
  • 三、如何结合springboot使用
    • 1.导入依赖
    • 2.进行配置
    • 3.controller层进行调用
  • 四、ffmpeg的使用简介
    • 1.基础知识
    • 2.安装和命令的使用
    • 3.使用命令
  • 总结

引出


1.从官网demo到idea中使用;
2.从idea中使用到springboot项目整合;
3.ffmpeg的安装和使用初步;

在这里插入图片描述

一、如何使用语音识别

1.官网的sdk

https://ai.baidu.com/ai-doc/SPEECH/plbxfq24s

有时候找参考文档看到这个,点击git后有时候又打不卡

在这里插入图片描述

https://github.com/Baidu-AIP/java-sdk

打开GitHub其实有比较好的说明文档,但GitHub能否顺利打开又是不确定的

在这里插入图片描述

https://ai.baidu.com/sdk

这里可以下载各种sdk资源

在这里插入图片描述

2.下载sdk

下载压缩包,解压

官方文档提供了eclipse的使用: 3.在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”。

但我用idea比较顺手,eclipse是在不熟。

在这里插入图片描述

二、如何在idea中跑通demo

在这里插入图片描述

1.新建项目,新建lib文件夹

用来存放刚刚下载后解压获得的jar包

在这里插入图片描述

复制粘贴到lib目录下

在这里插入图片描述

2.选中作为lib引入

在这里插入图片描述

点击确定,导入成功

在这里插入图片描述

3.拷贝官网的案例

拷贝官网的案例,导入jar包里面的包

在这里插入图片描述

加入配置文件,日志相关

在这里插入图片描述

4.获得语音识别案例文件

然后我发现语音识别需要的文件格式是pcm的格式,所以又找了工具去转其他格式的文件为pcm,后来发现每次调用总是出各种文件;最后经过一番波折,终于在官网的python案例中找到一个示例文件。。。。

在这里插入图片描述

中间各种bug,最后终于用找到的这个案例跑通

在这里插入图片描述

三、如何结合springboot使用

jar包的理解

在这里插入图片描述

简易spring项目搭建总览

在这里插入图片描述

1.导入依赖

<?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>

2.进行配置

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
@AllArgsConstructorpublic 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 {@Autowiredprivate BaiduPro baiduPro;/*** 语音相关 AipSpeech* @return AipSpeech放容器中*/@Beanpublic AipSpeech aipSpeech(){// 初始化一个AipSpeechAipSpeech client = new AipSpeech(baiduPro.getAppId(), baiduPro.getApiKey(), baiduPro.getSecretKey());// 可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);return client;}
}

3.controller层进行调用

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 {@Autowiredprivate 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的使用简介

在这里插入图片描述

1.基础知识

官网: https://ffmpeg.org/

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来表达。

2.安装和命令的使用

在这里插入图片描述

下载后,到指定位置解压,然后进行环境变量的配置

在这里插入图片描述

cmd命令测试是否成功

在这里插入图片描述

3.使用命令

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文件。

具体参数解释如下:

  • -i wjs.aac:指定输入文件为wjs.aac。
  • -ss 00:00:10:指定从第10秒开始提取。
  • -to 00:00:59:指定提取到第59秒结束。
  • -f s16le:指定输出格式为16位有符号的PCM。
  • -ar 16000:指定输出音频的采样率为16000Hz。
  • 16.pcm:指定输出文件名为16.pcm。

所以,这个命令的意思是提取wjs.aac文件中从第10秒到第59秒的音频部分,并将其转换为16位有符号的PCM格式,采样率为16000Hz,保存为16.pcm文件。

在这里插入图片描述

提取1分钟的pcm音频文件命令

在这里插入图片描述


总结

1.从官网demo到idea中使用;
2.从idea中使用到springboot项目整合;
3.ffmpeg的安装和使用初步;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stable diffusion model训练遇到的问题【No module named ‘triton‘】

一天早晨过来&#xff0c;发现昨天还能跑的diffusion代码&#xff0c;突然出现了【No module named ‘triton’】的问题&#xff0c;导致本就不富裕的显存和优化速度雪上加霜&#xff0c;因此好好探究了解决方案。 首先是原因&#xff0c;由于早晨过来发现【电脑重启】导致了【…

【owt】vs2022 + v141 : 查看WINDOWSSDKDIR

confmfc改为vs2022 + v141 构建 去掉这几个boost库,一样可以链接ok libboost_system-vc141-mt-sgd-x32-1_67.lib libboost_date_time-vc141-mt-sgd-x32-1_67.lib libboost_random-vc141-mt-sgd-x32-1_67.libSDK不在2022或者2017 里面? WINDOWSSDKDIR 在哪里? ##

LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码

常量 常量 类型 解释 codec.MP3 number MP3格式 codec.WAV number WAV格式 codec.AMR number AMR-NB格式&#xff0c;一般意义上的AMR codec.AMR_WB number AMR-WB格式 codec.create(type, isDecoder) 创建编解码用的codec 参数 传入值类型 解释 int 多媒…

VSCode开发go手记

断点调试&#xff1a; 安装delve&#xff08;windows&#xff09;&#xff1a; go get -u github.com/go-delve/delve/cmd/dlv 设置 launch.json 配置文件&#xff1a; ctrlshiftp 输入 Debug: Open launch.json 打开 launch.json 文件&#xff0c;如果第一次打开,会新建一…

为什么使用命令行

一提到Linux&#xff0c;许多人都会说到“自由”&#xff0c;但他们也许并不知道“自由”的真正涵义。“自由”是指一台没有任何秘密的计算机&#xff0c;并且你可以决定你的计算机能做什么。“自由”是一种权力&#xff0c;但是在过去的二三十年里&#xff0c;这种基本的权力正…

[论文笔记]RE2

引言 今天带来论文Simple and Effective Text Matching with Richer Alignment Features的笔记,论文标题为基于更丰富特征对齐结构的简单高效文本匹配模型。 这篇工作是2019年发表的,在Bert出来之后发表的,在四个著名的文本匹配任务(SNLI,SciTail,QQP,WikiQA)上取得了SOTA…

分块压缩算法及例程

分块压缩算法是一种数据压缩方法&#xff0c;它将输入数据划分为不同的块&#xff0c;并对每个块进行独立的压缩。这种算法通常用于处理大型文件或流式数据&#xff0c;可以提高压缩和解压缩的效率。 以下是一个基本的分块压缩算法的示例&#xff1a; 将输入数据分成固定大小的…

1786_MTALAB代码生成把通用函数生成独立文件

全部学习汇总&#xff1a; GitHub - GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes…

Java:关于mybatis框架mapper.xml编写小于号<的问题

目录 方案一&#xff1a;转义字符方案二&#xff1a;原样字符总结参考文章 xml中小于号< 和 小于等于< 不能直接使用 select * from tb_user where age < #{user.age};方案一&#xff1a;转义字符 使用转义字符 含义符号转义字符小于<<大于>> 示例 s…

PCIE基础知识-3

PCIE 三种传输方式&#xff1a;IO中断&#xff0c;DMA&#xff0c;peer to peer 中断&#xff1a;PCI设备需要向内存&#xff08;SDRAM&#xff09;中写入一些数据&#xff0c;该PCI设备会向CPU请求一个中断&#xff0c;然后CPU首先先通过PCI总线把该PCI设备的数据读取到CPU内…

解读未知--文档图像大模型的探索与应用

前言&#xff1a; 近日&#xff0c;合合信息在多模态大模型与文档图像智能理解专题论坛上进行了分享。多模态大模型指的是能够处理多种语义信息的一种深度学习模型。文档图像智能理解则是指对文档和图像进行智能化解析和理解的技术。合合信息在这个领域的分享&#xff0c;无疑将…

编译原理.龙书学习1

第一章&#xff1a; 编译器&#xff1a;将程序翻译成一种能够被计算机执行的形式 解释器&#xff1a;解释器直接利用用户提供的输入执行源程序中指定的操作 一个编译器的结构 编译器将源程序映射为语义上等价的目标程序&#xff0c;这个映射过程由两部分组成&#xff1a;分析…

【PostgreSQL内核学习(十三)—— (PortalRun)】

PortalRun 概述PortalRun 函数MarkPortalActive 函数PotalSetIoState 函数FillPortalStore 函数DoPortalRunFetch 函数PortalRunSelect 函数PortalRunMulti 函数MarkPortalDone 函数 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的…

如何在Ubuntu中挂载新硬盘

参考&#xff1a;如何在Ubuntu中挂载新硬盘_笔记大全_设计学院 ubuntu将大于2T硬盘挂载到/home目录并使其永久生效的详细操作步骤_ubuntu挂载硬盘到home目录_菲玛的博客-CSDN博客win10ubuntu18.04 home目录扩容方法_ubuntu增加home空间_cfreeze的博客-CSDN博客 1、检测新硬盘…

黑马JVM总结(二十二)

&#xff08;1&#xff09;类的结构-field 成员变量信息 类字节码里的一些简单表示&#xff1a; &#xff08;2&#xff09;类文件结构-method-init &#xff08;3&#xff09;类文件结构-method-main &#xff08;4&#xff09;类文件结构-附加属性

Mojo:新型AI语言中的7个令人惊叹的Python升级,用简单的英语解释人工智能

Mojo&#xff1a;新型AI语言中的7个令人惊叹的Python升级 编程之美 用简单的英语解释人工智能 编程之美 由Coding Beauty设计的图像&#xff0c;使用Mojo标志和Python标志。 它比C更快&#xff0c;与Python一样简单&#xff0c;但速度提高了35000倍。 进入Mojo&#xff1a;一种…

Northstar 量化平台

基于 B/S 架构、可替代付费商业软件的一站式量化交易平台。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。 已对接国内期货股票、外盘美股港股。 面向程序员的量化交易软件&#xff0c;用于期货、股票、外汇、炒币等多种交易场景&#xff…

【MySQL集群二】使用MyCat和ProxySql代理MySQL集群

中间件代理MySQL MyCat安装MyCat介绍&#xff1a;步骤1&#xff1a;安装Java环境步骤2&#xff1a;下载并解压Mycat步骤3&#xff1a;配置Mycat步骤4&#xff1a;启动Mycat ProxySql安装ProxySql介绍&#xff1a;步骤1&#xff1a;更新系统步骤2&#xff1a;安装ProxySQL步骤3&…

Pytorch源码编译Libtorch

创建虚拟环境&#xff1a; conda create -n build-libtorch python3.8 cd build-libtorch安装相关依赖&#xff1a; conda install astunparse numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses下载 Pytorch&am…

微信小程序快速入门01(含案例)

文章目录 前言一、组件1.常用视图容器类组件viewscroll-viewswiper、swiper-item 2.text、rich-text3.其他常用组件buttonimagenavigator 二、小程序API三、数据绑定1.定义页面数据2.绑定数据 四、事件绑定1.什么是事件2.小程序中常用的事件3.事件对象 的属性列表target和curre…