私は以前、音声認識技術を使用したツール型の 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 に変換する必要があります
// 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='startHandel' bindtouchend='endHandle' 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['viceo']; $tempfile = file_get_contents($upload_res['tmp_name']); $wavname = substr($upload_res['name'],0,strripos($upload_res['name'],".")).".wav"; $arr = explode(",", $tempfile); $path = 'Aduio/'.$upload_res['name']; if ($arr && !empty(strstr($tempfile,'base64'))){ //微信模拟器录制的音频文件可以直接存储返回 file_put_contents($path, base64_decode($arr[1])); $data['path'] = $path; apiResponse("success","转码成功!",$data); }else{ //手机录音文件 $path = 'Aduio/'.$upload_res['name']; $newpath = 'Aduio/'.$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['path'] = $newpath; apiResponse("success","转码成功!",$data); } } apiResponse("error","发生未知错误!"); } //json数据返回方法封装 function apiResponse($flag = 'error', $message = '',$data = array()){ $result = array('flag'=>$flag,'message'=>$message,'data'=>$data); print json_encode($result);exit; } }
認識インターフェースを呼び出します
ファイルを準備したら、API インターフェースを通じて Base64 でエンコードされたオーディオ ファイルをリクエストして転送できます。この期間は、文書に記載された仕様に厳密に従って送信するよう注意しなければ、未知の結果が発生します。rreee
これで基本的には完了です。上記のコードはコンパイルされたものであり、必ずしも実際の開発ニーズを満たしているとは限りません。不適切な内容を見つけた場合は、WeChat (xiaoqiang0672) でお気軽にご連絡ください。 実際のケースを見たい場合は、WeChat でコードをスキャンできます-
WeChat パブリック プラットフォームの音声認識コード分析の .Net 開発
WeChat の通話についてパブリックプラットフォームの音声認識結果
pictures_html5チュートリアルスキルによるHTML5音声認識タグの書き方
以上がミニプログラムで音声認識体験共有を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。