Das Miniprogramm ermöglicht den Austausch von Spracherkennungserfahrungen

小云云
Freigeben: 2018-02-08 16:02:03
Original
6663 Leute haben es durchsucht

Ich habe zuvor ein Tool-ähnliches WeChat-Applet (Peripheriegeräte suchen) geschrieben, das Spracherkennungstechnologie verwendet. Dieser Artikel teilt Ihnen hauptsächlich die Erfahrungen mit der Implementierung der Spracherkennung in kleinen Programmen mit und hofft, allen zu helfen.

Schnittstellenvorschau

Durch das Lesen und Verstehen von iFlytek-Schnittstellendokumenten, Entwicklungsdokumenten für Miniprogrammschnittstellen und dem Erlernen des Backend-ThinkPhp-Frameworks habe ich die folgenden Entwicklungsschritte zusammengestellt:

  • Registrieren Sie ein iFlytek-Konto (Der Stolz der Chinesen, die weltweit führende Spracherkennungstechnologie)

  • Geben Sie AIUI open ein Die Plattform erstellt eine Anwendung in der Anwendungsverwaltung und zeichnet die APPID und den ApiKey auf

  • Geben Sie die Anwendungskonfiguration ein, konfigurieren Sie den Situationsmodus, die Identifikationsmethode und die Fähigkeiten, die zu Ihnen passen

  • Entwickeln Sie kleine Programme zum Aufzeichnen des Audios, das erkannt werden muss (Details unten)

  • Das Back-End transkodiert das aufgezeichnete Audio (iflytek unterstützt PCM, WAV) und übermittelt es an die Erkennungsschnittstelle (unten). Detaillierte Beschreibung)

  • Das Applet empfängt das Erkennungsergebnis und fährt mit dem nächsten Geschäft fort

Audioaufzeichnungsschnittstelle

  • wx.startRecord() und wx.stopRecord()

wx.startRecord() und wx .stopRecord()-Schnittstellen können ebenfalls die Anforderungen erfüllen, werden jedoch ab Version 1.6.0 nicht mehr vom WeChat-Team gepflegt. Es wird empfohlen, die leistungsfähigere wx.getRecorderManager-Schnittstelle zu verwenden. Das von dieser Schnittstelle erhaltene Audioformat ist Seide.
Silk ist das Ergebnis der Base64-Kodierung des WebM-Formats. Nach der Dekodierung müssen wir WebM in PCM, WAV konvertieren
  • wx.getRecorderManager()

Im Vergleich zur wx.startRecord()-Schnittstelle bietet diese Schnittstelle leistungsfähigere Funktionen (Details). Sie können die Aufnahme anhalten oder fortsetzen und die Codierungsbitrate und die Anzahl der Aufnahmekanäle entsprechend einstellen an Ihre Bedürfnisse anpassen. Das Schönste ist, dass Sie das Audioformat angeben können. Der gültige Wert ist aac/mp3. Das Schlimme ist, dass wx.getRecorderManager() nur in 1.6.0 unterstützt wurde. Wenn Sie mit Low-End-WeChat-Benutzern kompatibel sein möchten, müssen Sie natürlich wx.startRecord () für die Kompatibilitätsverarbeitung verwenden.
  • Details zur Ereignisüberwachung

// 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>
Nach dem Login kopieren

Audiokonvertierung

Ich verwende hier im Backend PHP's Open-Source-Framework Thinkphp, natürlich stehen Node, Java, Python und andere Back-End-Sprachen zur Verfügung, die Sie nach Ihren eigenen Vorlieben und Fähigkeiten auswählen können. Für die Audio-Transkodierung müssen wir die Audio- und Video-Transkodierungstools ffmpeg und avconv verwenden, die alle auf gcc basieren. Sie können Baidu während des Installationsvorgangs selbst verwenden oder dem Artikellink unten folgen.

<?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;
    }
}
Nach dem Login kopieren

Erkennungsschnittstelle aufrufen

Nachdem wir die Datei vorbereitet haben, können wir die Base64-codierte Audiodatei über die API-Schnittstelle anfordern und übertragen. Während dieser Zeit müssen wir darauf achten, dass die Übermittlung streng nach den im Dokument genannten Spezifikationen erfolgt, da es sonst zu unbekannten Ergebnissen kommt.

<?php
namespace Api\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function _initialize(){
    }
    //封装数据请求方法
    public function httpsRequest($url,$data = null,$xparam){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        $Appid = "";//开放平台的appid
        $Appkey = "";//开放平台的Appkey
        $curtime = time();
        $CheckSum = md5($Appkey.$curtime.$xparam.$data);
        $headers = array(
            &#39;X-Appid:&#39;.$Appid,
            &#39;X-CurTime:&#39;.$curtime,
            &#39;X-CheckSum:&#39;.$CheckSum,
            &#39;X-Param:&#39;.$xparam,
            &#39;Content-Type:&#39;.&#39;application/x-www-form-urlencoded; charset=utf-8&#39;
            );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
    //请求接口数据处理
    public function getVoice($path){
        $d = base64_encode($path);
        $url = "https://api.xfyun.cn/v1/aiui/v1/voice_semantic";
        $xparam = base64_encode( json_encode(array(&#39;scene&#39; => 'main','userid'=>'user_0001',"auf"=>"16k","aue"=>"raw","spx_fsize"=>"60" )));
        $data = "data=".$d;
        $res = $this->httpsRequest($url,$data,$xparam);
        if(!empty($res) && $res['code'] == 00000){
            apiResponse("success","识别成功!",$res);
        }else{
            apiResponse("error","识别失败!");
        }
    }
    //数据返回封装
    function apiResponse($flag = 'error', $message = '',$data = array()){
        $result = array('flag'=>$flag,'message'=>$message,'data'=>$data);
        print json_encode($result);exit;
    }
}
Nach dem Login kopieren

Das ist grundsätzlich erledigt. Der obige Code wurde kompiliert und entspricht möglicherweise nicht unbedingt Ihren tatsächlichen Entwicklungsanforderungen. Wenn Sie etwas Unangemessenes finden, können Sie gerne über WeChat (xiaoqiang0672) kommunizieren.

Wenn Sie aktuelle Fälle sehen möchten, können Sie den WeChat-Code scannen
-
Das Miniprogramm ermöglicht den Austausch von Spracherkennungserfahrungen

Verwandte Empfehlungen:

. Netzentwicklung der Spracherkennungscodeanalyse der öffentlichen WeChat-Plattform

Über die Ergebnisse der Spracherkennung der öffentlichen WeChat-Plattform

HTML5-Spracherkennungs-Tags schreiben mit Bildern _HTML5-Tutorial-Fähigkeiten

Das obige ist der detaillierte Inhalt vonDas Miniprogramm ermöglicht den Austausch von Spracherkennungserfahrungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage