ミニプログラムで音声認識体験共有を実現

小云云
リリース: 2018-02-08 16:02:03
オリジナル
6662 人が閲覧しました

私は以前、音声認識技術を使用したツール型の WeChat アプレット (周辺機器の検索) を作成しました。この記事では主に、小規模なプログラムで音声認識を実装した経験を共有し、皆様のお役に立てれば幸いです。

インターフェイスのプレビュー

iFlytek インターフェイスのドキュメント、アプレット インターフェイス開発ドキュメントを読んで理解し、バックエンドの ThinkPhp フレームワークについて学ぶことで、次の開発手順をまとめました:

  • iFlytek アカウントを登録する (国人世界をリードする音声認識技術の誇り)

  • AIUI オープン プラットフォームに入り、アプリケーション管理でアプリケーションを作成し、APPID と ApiKey を記録します

  • アプリケーション構成を入力し、シチュエーション モード、認識方法、および自分に合ったスキル

  • 認識する必要があるオーディオを録音するための小さなプログラムを開発します (詳細は以下を参照)

  • バックエンドは、録音されたオーディオをトランスコードし (iFlytek は pcm、wav をサポートします)、それを認識インターフェース(詳細は下記)

  • アプレットは認識結果を受け取り、次の業務に進みます

音声録音インターフェース

  • wx.startRecord()とwx.stopRecord()

wx.startRecord() および wx.stopRecord() ) インターフェースもニーズを満たすことができますが、バージョン 1.6.0 以降、WeChat チームによって保守されなくなりました。より機能的な wx.getRecorderManager インターフェイスを使用することをお勧めします。このインターフェイスによって取得されるオーディオ形式はシルクです。
silk は webm 形式の Base64 エンコードの結果です。デコード後、wx.startRecord() インターフェイスに対して webm を pcm と wav に変換する必要があります
  • wx.getRecorderManager()

。機能がさらに強力になり (詳細)、録画を一時停止または継続したり、必要に応じてエンコード ビット レート、録画チャンネル数、サンプリング レートを設定したりできます。最も楽しいのは、オーディオ形式を指定できることです。有効な値は aac/mp3 です。悪い点は、wx.getRecorderManager() が 1.6.0 でのみサポートされていることです。もちろん、ローエンドの WeChat ユーザーと互換性を持たせたい場合は、wx.startRecord() を使用して互換性処理を行う必要があります。
  • イベント監視の詳細

// wxjs:

const recorderManager = wx.getRecorderManager()
recorderManager.onStart(() => {
    //开始录制的回调方法
})
//录音停止函数
recorderManager.onStop((res) => {
  const { tempFilePath } = res;
  //上传录制的音频
  wx.uploadFile({
    url: app.d.hostUrl + '/Api/Index/wxupload', //仅为示例,非真实的接口地址
    filePath: tempFilePath,
    name: 'viceo',
    success: function (res) {
        console.log(res);
    }
  })
})

Page({
    //按下按钮--录音
  startHandel: function () {
    console.log("开始")
    recorderManager.start({
      duration: 10000
    })
  },
  //松开按钮
  endHandle: function () {
    console.log("结束")
    //触发录音停止
    recorderManager.stop()
  }
})

//wxml:
<view bindtouchstart=&#39;startHandel&#39; bindtouchend=&#39;endHandle&#39; class="tapview">
    <text>{{text}}</text>
</view>
ログイン後にコピー

オーディオ変換

バックエンドにはPHPのオープンソースフレームワークthinkphpを使用しています。もちろん、node、java、pythonなどのバックエンド言語でも実行できます。自分の好みや能力に合わせてどうぞ。オーディオのトランスコーディングを行うには、オーディオおよびビデオのトランスコーディング ツール ffmpeg および avconv を使用する必要がありますが、これらはすべて gcc に依存しています。インストール プロセス中に自分で Baidu を使用することも、下部にある記事のリンクをクリックすることもできます。

<?php
namespace Api\Controller;
use Think\Controller;
class IndexController extends Controller {
    
    //音频上传编解码
    public function wxupload(){
        $upload_res=$_FILES[&#39;viceo&#39;];
        $tempfile = file_get_contents($upload_res[&#39;tmp_name&#39;]);
        $wavname = substr($upload_res[&#39;name&#39;],0,strripos($upload_res[&#39;name&#39;],".")).".wav";
        $arr = explode(",", $tempfile);
        $path = &#39;Aduio/&#39;.$upload_res[&#39;name&#39;];
        
        if ($arr && !empty(strstr($tempfile,&#39;base64&#39;))){
            //微信模拟器录制的音频文件可以直接存储返回
            file_put_contents($path, base64_decode($arr[1]));
            $data[&#39;path&#39;] = $path;
            apiResponse("success","转码成功!",$data);
        }else{
            //手机录音文件
            $path = &#39;Aduio/&#39;.$upload_res[&#39;name&#39;];
            $newpath = &#39;Aduio/&#39;.$wavname;
            file_put_contents($path, $tempfile);
            chmod($path, 0777);
            $exec1 = "avconv -i /home/wwwroot/mapxcx.kanziqiang.top/$path -vn -f wav /home/wwwroot/mapxcx.kanziqiang.top/$newpath";
            exec($exec1,$info,$status);
            chmod($newpath, 0777);
            if ( !empty($tempfile) && $status == 0 ) {
                $data[&#39;path&#39;] = $newpath;
                apiResponse("success","转码成功!",$data);
            }
        }
        apiResponse("error","发生未知错误!");
    }
    //json数据返回方法封装
    function apiResponse($flag = &#39;error&#39;, $message = &#39;&#39;,$data = array()){
        $result = array(&#39;flag&#39;=>$flag,'message'=>$message,'data'=>$data);
        print json_encode($result);exit;
    }
}
ログイン後にコピー

認識インターフェースを呼び出します

ファイルを準備したら、API インターフェースを通じて Base64 でエンコードされたオーディオ ファイルをリクエストして転送できます。この期間は、文書に記載された仕様に厳密に従って送信するよう注意しなければ、未知の結果が発生します。

rreee

これで基本的には完了です。上記のコードはコンパイルされたものであり、必ずしも実際の開発ニーズを満たしているとは限りません。不適切な内容を見つけた場合は、WeChat (xiaoqiang0672) でお気軽にご連絡ください。

実際のケースを見たい場合は、WeChat でコードをスキャンできます

-

ミニプログラムで音声認識体験共有を実現

関連する推奨事項:

WeChat パブリック プラットフォームの音声認識コード分析の .Net 開発

WeChat の通話についてパブリックプラットフォームの音声認識結果

pictures_html5チュートリアルスキルによるHTML5音声認識タグの書き方

以上がミニプログラムで音声認識体験共有を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート