SpringBoot プロジェクト (Baidu AI 統合) - Springboot で音声ファイル認識を使用する方法と ffmpeg のインストールと使用方法

ここに画像の説明を挿入します

序文

まえがき: 実際に利用する際には公式事例を参照する必要がある場合が多いですが、ideaやeclipseなどのツールの違いや、通常のプロジェクトとSpringプロジェクトの違いなどにより、公式事例での普及が難しい場合もあります。各ドキュメントは理解できますが、テストに使用するデモ ファイルが公式 Web サイトの要件を満たしていない場合があります。関連する機能は常に実装できるとは限りません。

このブログ シリーズでは、公式 Web サイトの事例を組み合わせて、Baidu AI オープン プラットフォームのコンポーネントの使用法を説明しようとしています。中心となるのは、春のプロジェクトを迅速に開始する方法です。

この記事ではSpringbootでの音声ファイル認識の使い方とffmpegのインストールと使い方を紹介します。

ここに画像の説明を挿入します

導き出す


1. 公式サイトのデモから idea での利用まで;
2. idea での利用から springboot プロジェクト統合まで;
3. ffmpeg の事前インストールと使用; 5. ffmpeg の事前インストールと使用;

ここに画像の説明を挿入します

1. 音声認識の使い方

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 で「プロジェクト -> プロパティ -> Java ビルド パス -> JAR の追加」を右クリックします。

しかし、私は idea を使用する方が快適ですが、Eclipse には詳しくありません。

ここに画像の説明を挿入します

2. アイデアでデモを実行する方法

ここに画像の説明を挿入します

1. 新しいプロジェクトを作成し、新しい lib フォルダーを作成します

ダウンロードして解凍したばかりの jar パッケージを保存するために使用されます。

ここに画像の説明を挿入します

コピーして lib ディレクトリに貼り付けます

ここに画像の説明を挿入します

2. ライブラリとしてインポートすることを選択します

ここに画像の説明を挿入します

「OK」をクリックするとインポートが成功します。

ここに画像の説明を挿入します

3.公式サイトのケースをコピーする

公式Webサイトからケースをコピーし、jarパッケージにパッケージをインポートします

ここに画像の説明を挿入します

設定ファイル、ログ関連を追加

ここに画像の説明を挿入します

4. 音声認識ケースファイルを入手する

そこで、音声認識に必要なファイル形式が pcm 形式であることがわかり、他の形式のファイルを pcm に変換するツールを探しましたが、その後、呼び出すたびにさまざまなファイルが出てくることがわかりました。と思っていたら、公式サイトでPythonの場合のサンプルファイルを見つけました。

ここに画像の説明を挿入します

途中色々バグがありましたが、見つけたこのケースを使って最終的に解決しました。

ここに画像の説明を挿入します

3. springbootでの使い方

jar パッケージを理解する

ここに画像の説明を挿入します

簡易スプリングプロジェクト構築の概要

ここに画像の説明を挿入します

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.コントローラー層の呼び出し

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());
    }
}

4. ffmpegの使い方の概要

ここに画像の説明を挿入します

1. 基礎知識

公式サイト: https: //ffmpeg.org/

FFMPEG の概要

FFmpeg という名前は、MPEG ビデオ エンコード規格に由来しています。その前の「FF」は「Fast Forward」を表します。FFmpeg は、デジタル オーディオとビデオの記録と変換に使用できるオープン ソース コンピューター プログラムのセットです。それらをストリームに流し込みます。複数のビデオ形式間で簡単に変換できます。
FFmpeg ユーザーには、Google、Facebook、Youtube、Youku、iQiyi、Tudou などが含まれます。

基本知識

1. コンテナ/ファイル: mp4、flv、mkv などの特定の形式のマルチメディア ファイル。

2. メディア ストリーム (Stream): 音声データ、映像データ、字幕データなど、タイムライン上の連続したデータを表し、圧縮または非圧縮が可能です。特定のコーデックデバイスに関連付けられます。

3. データ フレーム/パケット (Frame/Packet): 通常、メディア ストリームは多数のデータ フレームで構成されますが、圧縮データの場合、フレームはコーデックの最小処理単位に相当し、異なるデータ フレームに属します。メディア ストリーム、コンテナ内のインターリーブ ストレージ。

一般的に:

Frameは圧縮前のデータに相当し、Packetは圧縮後のデータに相当します。

4. コーデック(Codec):圧縮データと元データのフレーム単位での相互変換を実現します。

5. 多重化 (mux): あるコンテナの規則に従って異なるストリームをコンテナに入れることを多重化 (mux) と呼びます。

6. 逆多重化 (mux): 特定のコンテナからの異なるストリームを解析するこの動作は、逆多重化 (demux) と呼ばれます。

\7. ビット レートとフレーム レートはビデオ ファイルの最も重要な基本特性であり、その独自の設定がビデオの品質を決定します。ビット レートと長さがわかっていれば、出力ファイルのサイズを簡単に計算できます。

8. フレーム レート: フレーム レートは、フレーム周波数とも呼ばれます。フレーム レートは、ビデオ ファイルの 1 秒あたりのフレーム数です。連続した動画を肉眼で見るには、少なくとも 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 秒目までの部分を抽出し、それをサンプリング レート 16000 Hz の 16 ビット符号付き PCM 形式に変換し、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 秒目までのオーディオ部分を抽出し、それをサンプリング レート 16000Hz の 16 ビット符号付き PCM 形式に変換し、16 ビットとして保存することです。 .pcm ファイル。

ここに画像の説明を挿入します

1分間のPCMオーディオファイルを抽出するコマンド

ここに画像の説明を挿入します


要約する

1. 公式サイトのデモから idea での利用まで;
2. idea での利用から springboot プロジェクト統合まで;
3. ffmpeg の事前インストールと使用; 5. ffmpeg の事前インストールと使用;

おすすめ

転載: blog.csdn.net/Pireley/article/details/133211336