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

news2024/11/17 17:34:17

在这里插入图片描述

前言

前言:在实际使用中,经常要参考官方的案例,但有时候因为工具的不一样,比如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
@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;
    }
}

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 {

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

在这里插入图片描述

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.coloradmin.cn/o/1036334.html

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

相关文章

【广州华锐互动】VR虚拟党建云展馆:带你沉浸式领略红色文化

在新时代的背景下&#xff0c;科技与党建的结合已成为一种趋势。VR&#xff08;Virtual Reality&#xff0c;虚拟现实&#xff09;技术作为一种新兴的科技手段&#xff0c;为党建工作提供了全新的载体。VR虚拟党建云展馆&#xff0c;就是将VR技术应用于党建工作的一个典型例子&…

招聘程序员(软件开发工程师),如何做岗位胜任力测评?

一、 程序员的基本工作内容 1、 负责项目组内的代码维护和更新迭代&#xff0c;保证研发效率&#xff0c;对于运营产品提出的需求应积极沟通并实现。 2、 规范相关开发文档等相关资料&#xff0c;对于有变更的代码和功能需求&#xff0c;要对开发文档做出相应的变更。 3、 作为…

三维重建_纹理重建与表面细化

目录 前言&#xff1a;为什么要重建纹理&#xff1f; 1. 纹理图像的自动创建 1.1 基础知识 1.2 算法流程 1.2.1 视角选择 1.2.2 纹理坐标的计算 1.2.3 全局颜色调整 1.2.4 泊松图像编辑 1.2.5 OBJ文件 1.3 结果示例 2. 网格细化优化 2.1 基础知识与数学模型 2.2 优…

【Python基础】对Python的深入认识以及各种情况的报错汇总

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

在给应用ASO优化时要注意些什么

应用名称是搜索引擎优化和转化率优化非常重要的元素。用户在搜索结果页面中看到我们的应用程序&#xff0c;这是他们决定是否想要更多地了解我们应用的地方。当用户已经在查看产品页面时&#xff0c;应用程序名称也会影响转化率&#xff0c;如果列表元数据有吸引力&#xff0c;…

Django的设计模式及模板层

Django的设计模式及模板层 设计模式MVC和MVT MVC 代表 Model-View-Controller(模型-视图-控制器)模式。 M 模型层(Model),主要用于对数据库层的封装 V 视图层(View),用于向用户展示结果 (WHAT HOW) C 控制(Controller&#xff0c;用于处理请求、获取数据、返回结果(重要) 作…

【数据集标注】上古软件LabelImg的保姆级使用教程

1&#xff1a;下载文件并解压 进入链接&#xff1a;mirrors / tzutalin / labelimg GitCode 点击绿色按钮【克隆】 &#xff0c;再点击按钮【zip】&#xff0c;随后下载到本地 移动下载的压缩文件到合适的位置&#xff0c;此处我以桌面为例子 右键点击该zip压缩文件&#xff…

WINDOWS 7-11 磁盘分区教程

前言&#xff1a; 现在很多新电脑&#xff0c;尤其是用固态硬盘的电脑&#xff0c;往往内存不是很大&#xff0c;默认系统就给1个c盘&#xff08;系统&#xff09;或者再加一个D盘&#xff08;软件盘&#xff09;。为了更好的管理自己电脑的文件&#xff0c;我们需要增加一个或…

合约升级标准 ERC2535 的设计解析和不足

合约升级标准 ERC2535 的设计解析和不足 Safful最近审计了钻石标准的一份实现代码&#xff0c;这一标准是一种新的可升级合约模式。撰写标准是一项值得赞许的事业&#xff0c;但钻石标准及其实现有许多引人担忧的地方。这份代码是过度工程的产物&#xff0c;附带了许多不必要的…

004 Linux 调试器gdb的使用

前言 本文将会向您介绍gdb的基础操作 引入 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 以下是本文要示范的Makefile文件…

YOLOv5、YOLOv8改进:C3STR(Swin Transformer)

目录 1.介绍 2. YOLOv5、YOLOv8改进 2.1 common.py配置 2.2 yolo.py配置 2.3 yaml配置文件 1.介绍 视觉领域正在见证从 CNN 到 Transformers 的建模转变&#xff0c;纯 Transformer 架构在主要视频识别基准测试中达到了最高准确度。这些视频模型都建立在 Transformer 层之…

Solidity 小白教程:22. Call

Solidity 小白教程&#xff1a;22. Call 这一讲我们将介绍如何利用 Call 调用合约。 Call call 是address类型的低级成员函数&#xff0c;它用来与其他合约交互。它的返回值为**(bool, data)&#xff0c;分别对应call**是否成功以及目标函数的返回值。 call是solidity官方推…

涛然自得周刊(第 10 期):搬到海岛生活是一种什么体验

作者&#xff1a;何一涛 日期&#xff1a;2023 年 9 月 24 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;周末发布。历史周刊内容可以看这里。 影音 《德雷尔一家》是一部根据书籍《希腊三部曲》改编的英剧&#xff0c;共 4 季&#xff0c;每一季豆瓣评分都超…

[自然语言处理] 基于pycorrector实现文本纠错

文本纠错&#xff08;Text Error Correction&#xff09;技术旨在自动修正输入文本中的拼写、语法、标点符号等错误&#xff0c;以提高文本的准确性、通顺性和规范性。该技术可以通过自然语言处理技术实现&#xff0c;基于上下文和语言规则对文本进行分析和推断&#xff0c;发现…

使用香橙派学习 嵌入式数据库---SQLite

嵌入式数据库简介&#xff1a;SQLite & MySQL数据库 基于嵌入式的数据库主要有&#xff1a;SQLite&#xff0c;Firebird&#xff0c;Berkeley DB&#xff0c;eXtremeDB等 Firebird 是关系型数据库&#xff0c;功能强大&#xff0c;支持存储过程&#xff0c;SQL兼容等SQLi…

XCTF之新手Web题目

新手第一题&#xff1a;Training-WWW-Robots 图片提示&#xff1a; 解题流程&#xff1a; 具体操作&#xff1a;打开菜单-->Web开发者-->查看器&#xff08;或者快捷键ctrlshiftc&#xff09; robots.txt文件被网络爬虫使用&#xff0c;以检查它们是否被允许抓取和索引…

普通人也能秒变电子画册制作达人

你是不是觉得制作电子画册很难&#xff1f;需要专业的设计知识和软件&#xff1f;今天&#xff0c;小编告诉你&#xff0c;制作电子画册并不难&#xff01;只要掌握一些简单技巧&#xff0c;你也可以轻松制精美的电子画册。下面&#xff0c;让我们一起来看看&#xff0c;如何从…

以太网协议

以太网 以太网协议格式&#x1f3a8;目的地址,源地址mac地址格式 以太网协议格式&#x1f3a8; 目的地址,源地址 此处的地址,叫做mac地址(物理地址),长度是6个字节 mac地址的作用也是用来区分不同的主机 IP地址的长度是4字节 IP地址负责网络层(整体)转发,mac地址负责数据链路层…

【斗罗2】霍雨浩实力被否定,超级斗罗眼光被嘲,魂导院成功捡漏

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗罗大陆2绝世唐门。 最新一集《绝世唐门》已经更新&#xff0c;相信不少小伙伴和小郑一样都已经先睹为快&#xff0c;本集虽然是过渡剧情&#xff0c;但本身还是有不少有意思的剧情&#xff0c;作为过渡文戏也算是可圈可…

服务器挂机策略

title: “服务器挂机” createTime: 2022-05-11T11:05:4308:00 updateTime: 2022-05-11T11:05:4308:00 draft: false author: “name” tags: [“服务器”] categories: [“服务器”] description: “测试的” 服务器挂机策略 地址&#xff1a;pve.dongshanxia.top:35000用户…