百度语音识别的springboot应用

1、pom依赖

<dependency>

<groupId>com.baidu.aip</groupId>

<artifactId>java-sdk</artifactId>

<version>4.16.18</version>

</dependency>

2、测试的demo

创建语音识别应用

百度智能云-管理中心 (baidu.com)

代码中要配置

复制代码
package com.zbIntel.integration.utils;

import com.baidu.aip.speech.AipSpeech;
import com.baidu.aip.util.Util;
import org.json.JSONObject;

import java.io.IOException;

public class Sample {
    //设置APPID/AK/SK
    public static final String APP_ID = "";
    public static final String API_KEY = "";
    public static final String SECRET_KEY = "";

    private static final String FILENAME = "D:\\project\\speech-demo-master\\rest-api-asr\\java\\16k.wav";

    public static void main(String[] args) throws IOException {
        // 初始化一个AipSpeech
        AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
        // client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
        // client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
        System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

        // 调用接口
        JSONObject res = client.asr("D:\\project\\mygpt\\src\\main\\resources\\iat\\16k_10.pcm", "pcm", 16000, null);
        System.out.println(res.toString(2));


        // 对本地语音文件进行识别

        String path = "D:\\project\\mygpt\\src\\main\\resources\\iat\\16k_10.pcm";
        JSONObject asrRes = client.asr(FILENAME, "pcm", 16000, null);
        System.out.println(asrRes);

        // 对语音二进制数据进行识别
        byte[] data = Util.readFileByBytes(path);     //readFileByBytes仅为获取二进制数据示例
        JSONObject asrRes2 = client.asr(data, "pcm", 16000, null);
        System.out.println(asrRes2);

        
    }
}

3、创建Service 支持语音转文字

复制代码
package com.zbIntel.integration.yuyin;

import com.baidu.aip.speech.AipSpeech;
import org.json.JSONObject;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class BaiduSpeechService {

    public static final String APP_ID = "";
    public static final String API_KEY = "";
    public static final String SECRET_KEY = "";

    private AipSpeech client;
 
    public BaiduSpeechService() {
        // 设置APPID/API Key/Secret Key
        client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);
    }
 
    public Map<String, Object> recognize(String filePath) {
        // 调用百度语音识别接口

        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        HashMap<String, Object> options = new HashMap<>();
        options.put("dev_pid", 1537);
        JSONObject res = client.asr(filePath, "wav", 16000, options);
        Map<String, Object> resultMap = new HashMap<>();
        if (res.get("result") != null) {
            resultMap.put("result", res.get("result"));
            return resultMap;
        }
        return resultMap;
    }
}

3、创建controller 支持上传音频文件

复制代码
package com.zbIntel.integration.controller;

import com.zbIntel.integration.utils.ReturnResult;
import com.zbIntel.integration.yuyin.BaiduSpeechService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;

@RestController
public class SpeechController {
 
    @Autowired
    private BaiduSpeechService speechService;
 

    private static final String UPLOAD_DIR = "/tmp/upload/directory"; // 指定上传文件的保存目录

    @PostMapping("/speech/recognize")
    public ReturnResult recognizeSpeech(@RequestParam("file") MultipartFile file) throws IOException {
        // 将上传的文件保存到服务器,调用语音识别服务
        String filePath = saveFile(file);
        try {
            Map<String, Object> text = speechService.recognize(filePath);
            return ReturnResult.ok().data(text);
        } finally {
            // 确保即使识别过程中出现异常,文件也能被删除
            deleteFile(filePath);
        }
    }

    private String saveFile(MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        String filePath = UPLOAD_DIR + File.separator + fileName; // 构建完整的文件路径
        File dest = new File(filePath);
        // 确保目录存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try (FileOutputStream outputStream = new FileOutputStream(dest)) {
            outputStream.write(file.getBytes());
        }
        return filePath;
    }

    private void deleteFile(String filePath) {
        try {
            Files.delete(Paths.get(filePath));
        } catch (IOException e) {
            // 记录日志或者处理删除失败的情况
            System.err.println("Failed to delete file: " + filePath);
            e.printStackTrace();
        }
    }

}

4、创建页面 支持 录音 上报 音频文件 等 待开展

相关推荐
小鸡吃米…1 小时前
机器学习 - K - 中心聚类
人工智能·机器学习·聚类
好奇龙猫2 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)2 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
minhuan2 小时前
大模型应用:大模型越大越好?模型参数量与效果的边际效益分析.51
人工智能·大模型参数评估·边际效益分析·大模型参数选择
Cherry的跨界思维2 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS2 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
ASF1231415sd2 小时前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪
水如烟3 小时前
孤能子视角:“意识“的阶段性回顾,“感质“假说
人工智能
Carl_奕然3 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
旅途中的宽~3 小时前
《European Radiology》:2024血管瘤分割—基于MRI T1序列的分割算法
人工智能·计算机视觉·mri·sci一区top·血管瘤·t1