Android开发中实时语音开发之华为实时语音识别

这篇具有很好参考价值的文章主要介绍了Android开发中实时语音开发之华为实时语音识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇(Android开发中,百度语音集成之一)简单的讲解了百度语音的识别,今天讲解一个华为的语音识别:

 1.初始化: initRecognizer()

mSpeechRecognizer = MLAsrRecognizer.createAsrRecognizer(context)
mSpeechRecognizer.setAsrListener(SpeechRecognitionListener()) 

2.开始录音:startRecognizing() 

 val mSpeechRecognizerIntent = Intent(MLAsrConstants.ACTION_HMS_ASR_SPEECH)
        // 通过Intent进行语音识别参数设置。
        mSpeechRecognizerIntent
            // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语;"ar":阿拉伯语;"th=TH":泰语;"ms-MY":马来语;"fil-PH":菲律宾语;"tr-TR":土耳其语。
            .putExtra(MLAsrConstants.LANGUAGE, "zh-CN") // 设置识别文本返回模式为边识别边出字,若不设置,默认为边识别边出字。支持设置:
            // MLAsrConstants.FEATURE_WORDFLUX:通过onRecognizingResults接口,识别同时返回文字;
            // MLAsrConstants.FEATURE_ALLINONE:识别完成后通过onResults接口返回文字。
            .putExtra(MLAsrConstants.FEATURE, MLAsrConstants.FEATURE_WORDFLUX) // 设置使用场景,MLAsrConstants.SCENES_SHOPPING:表示购物,仅支持中文,该场景对华为商品名识别进行了优化。
//            .putExtra(MLAsrConstants.SCENES, MLAsrConstants.SCENES_SHOPPING)
        // 启动语音识别。
        mSpeechRecognizer.startRecognizing(mSpeechRecognizerIntent)   

 3.结束录音:destroy()

mSpeechRecognizer.destroy()

最后附上全部的代码以供参考:文章来源地址https://www.toymoban.com/news/detail-799931.html

class SpeechToTextHelper(private val context: Context) {
    private val TAG = "SpeechToTextHelper"
    lateinit var mSpeechRecognizer: MLAsrRecognizer
    private val REQUEST_CODE_ASR = 100
    private var recognizing: ((Boolean, String?, String?) -> Unit)? = null
    /**
     * 初始化
     * recognizing回调可能会调用多次,测试结果:声音识别成功也返回了无效的服务错误提示
     *  @param recognizing Boolean: 是否开始记录,开始录音返回(true,null, null)
     *                     String?: 录音结果实时返回(true, "xxx", null)
     *                     String?: 录音结果最终返回(false, null, "xxx")
     *                     异常反回:(false, null, null)
     */
    fun initRecognizer(recognizing: ((recognizing : Boolean, recognizingResult: String?, result: String?) -> Unit)) {
        Log.d(TAG, "###initRecognizer###")
        this.recognizing = recognizing
        mSpeechRecognizer = MLAsrRecognizer.createAsrRecognizer(context)
        mSpeechRecognizer.setAsrListener(SpeechRecognitionListener())

    }

    /**
     * 开始录音
     * 一定时间未输入语音会自动终止,只需要重新调用此方法就可以再次开启录音功能
     */
    fun startRecognizing() {
        Log.d(TAG, "###startRecognizing###")
        // 新建Intent,用于配置语音识别参数。
        val mSpeechRecognizerIntent = Intent(MLAsrConstants.ACTION_HMS_ASR_SPEECH)
        // 通过Intent进行语音识别参数设置。
        mSpeechRecognizerIntent
            // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语;"ar":阿拉伯语;"th=TH":泰语;"ms-MY":马来语;"fil-PH":菲律宾语;"tr-TR":土耳其语。
            .putExtra(MLAsrConstants.LANGUAGE, "zh-CN") // 设置识别文本返回模式为边识别边出字,若不设置,默认为边识别边出字。支持设置:
            // MLAsrConstants.FEATURE_WORDFLUX:通过onRecognizingResults接口,识别同时返回文字;
            // MLAsrConstants.FEATURE_ALLINONE:识别完成后通过onResults接口返回文字。
            .putExtra(MLAsrConstants.FEATURE, MLAsrConstants.FEATURE_WORDFLUX) // 设置使用场景,MLAsrConstants.SCENES_SHOPPING:表示购物,仅支持中文,该场景对华为商品名识别进行了优化。
//            .putExtra(MLAsrConstants.SCENES, MLAsrConstants.SCENES_SHOPPING)
        // 启动语音识别。
        mSpeechRecognizer.startRecognizing(mSpeechRecognizerIntent)
    }

    /**
     * 释放资源
     * 不再使用时调用此方法
     */
    fun destroy() {
        Log.d(TAG, "###destroy###")
        mSpeechRecognizer.destroy()
    }

    // 回调实现MLAsrListener接口,实现接口中的方法。
    internal inner class SpeechRecognitionListener : MLAsrListener {
        //获取实时声音输出KEY
        private val RESULT_RECOGNIZING_KEY = "results_recognizing"
        //获取声音输出结果KEY
        private val RESULT_RECOGNIZED_KEY = "results_recognized"
        override fun onStartListening() {
            // 录音器开始接收声音。
            recognizing?.let { it(true, null, null) }
            Log.d(TAG, "###onStartListening###")
        }

        override fun onStartingOfSpeech() {
            // 用户开始讲话,即语音识别器检测到用户开始讲话。
            Log.d(TAG, "###onStartingOfSpeech###")
        }

        override fun onVoiceDataReceived(data: ByteArray, energy: Float, bundle: Bundle) {
            // 返回给用户原始的PCM音频流和音频能量,该接口并非运行在主线程中,返回结果需要在子线程中处理。
        }

        override fun onRecognizingResults(partialResults: Bundle) {
            // 从MLAsrRecognizer接收到持续语音识别的文本,该接口并非运行在主线程中,返回结果需要在子线程中处理。
            val result = getOnResult(partialResults, RESULT_RECOGNIZING_KEY)
            Log.d(TAG, "###onRecognizingResults : $result")
            recognizing?.let { it(true, result, null) }
        }

        override fun onResults(results: Bundle) {
            // 语音识别的文本数据,该接口并非运行在主线程中,返回结果需要在子线程中处理。
            val result = getOnResult(results, RESULT_RECOGNIZED_KEY)
            Log.d(TAG, "###onResults : $result")
            recognizing?.let { it(false, null, result) }
        }

        override fun onError(error: Int, errorMessage: String) {
            // 识别发生错误后调用该接口,该接口并非运行在主线程中,返回结果需要在子线程中处理。
            Log.d(TAG, "###onError : $error --> $errorMessage")
            recognizing?.let { it(false, null, null) }
        }

        override fun onState(state: Int, params: Bundle) {
            // 通知应用状态发生改变,该接口并非运行在主线程中,返回结果需要在子线程中处理。
        }
    }

    /**
     * 解析返回结果
     */
    private fun getOnResult(partialResults: Bundle, key: String): String? {
        return partialResults.getString(key)
    }

    fun startHWUIRecognizing(activity: Activity) {
        val intent = Intent(activity, MLAsrCaptureActivity::class.java)
            // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语;"ar": 阿拉伯语;"ru-RU":俄语;“th_TH”:泰语;“ms_MY”:马来语;“fil_PH”:菲律宾语;"tr-TR":土耳其语。
            .putExtra(MLAsrCaptureConstants.LANGUAGE, "zh-CN")
            // 设置拾音界面是否显示识别结果,MLAsrCaptureConstants.FEATURE_ALLINONE为不显示,MLAsrCaptureConstants.FEATURE_WORDFLUX为显示。
            .putExtra(MLAsrCaptureConstants.FEATURE, MLAsrCaptureConstants.FEATURE_WORDFLUX)
            // 设置使用场景,MLAsrConstants.SCENES_SHOPPING:表示购物,仅支持中文,该场景对华为商品名识别进行了优化。
            .putExtra(MLAsrConstants.SCENES,
                MLAsrConstants.SCENES_SHOPPING)

        // REQUEST_CODE_ASR表示当前Activity和拾音界面Activity之间的请求码,通过该码可以在当前Activity中获取拾音界面的处理结果。
        activity.startActivityForResult(intent, REQUEST_CODE_ASR)
    }

    /**
     * 解析华为UI返回结果
     * 返回null为发生异常,正常数据为非null数据
     */
    fun onActivityResult(callback: (String?) -> Unit, requestCode: Int, resultCode: Int, data: Intent?): Boolean {
        var text = ""
        // REQUEST_CODE_ASR是第3步中定义的当前Activity和拾音界面Activity之间的请求码。
        if (requestCode == REQUEST_CODE_ASR) {
            when (resultCode) {
                MLAsrCaptureConstants.ASR_SUCCESS -> if (data != null) {
                    val bundle = data.extras
                    // 获取语音识别得到的文本信息。
                    if (bundle!!.containsKey(MLAsrCaptureConstants.ASR_RESULT)) {
                        text = bundle.getString(MLAsrCaptureConstants.ASR_RESULT).toString()
                        // 识别得到的文本信息处理。
                        println("####result : $text###")
                        callback(text)
                    }
                }
                MLAsrCaptureConstants.ASR_FAILURE -> {              // 识别失败处理。
                    if (data != null) {
                        val bundle = data.extras
                        // 判断是否包含错误码。
                        if (bundle!!.containsKey(MLAsrCaptureConstants.ASR_ERROR_CODE)) {
                            val errorCode = bundle.getInt(MLAsrCaptureConstants.ASR_ERROR_CODE)
                            // 对错误码进行处理。
                        }
                        // 判断是否包含错误信息。
                        if (bundle.containsKey(MLAsrCaptureConstants.ASR_ERROR_MESSAGE)) {
                            val errorMsg = bundle.getString(MLAsrCaptureConstants.ASR_ERROR_MESSAGE)
                            // 对错误信息进行处理。
                        }
                        //判断是否包含子错误码。
                        if (bundle.containsKey(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE)) {
                            val subErrorCode =
                                bundle.getInt(MLAsrCaptureConstants.ASR_SUB_ERROR_CODE)
                            // 对子错误码进行处理。
                        }
                    }
                    callback(null)
                }
                else -> {
                    callback(null)
                }
            }
            return true
        } else {
            return false
        }
    }
}

到了这里,关于Android开发中实时语音开发之华为实时语音识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实时语音识别(Python+HTML实战)

    项目下载地址:FunASR 项目提示所需要下载的库文件:pip install -U funasr 和 pip install modelscope 运行过程中,我发现还需要下载以下库文件才能正常运行: 下载:pip install websockets,pip install ffmpeg 运行 FunASR-main/runtime/python/websocket/funasr_wss_server.py 文件,加载模型 注:如果提示缺少

    2024年04月08日
    浏览(54)
  • [python]基于faster whisper实时语音识别语音转文本

    语音识别转文本相信很多人都用过,不管是手机自带,还是腾讯视频都附带有此功能,今天简单说下: faster whisper地址: https://github.com/SYSTRAN/faster-whisper https://link.zhihu.com/?target=https%3A//github.com/SYSTRAN/faster-whisper 实现功能: 从麦克风获取声音进行实时语音识别转文本 代码仅仅

    2024年02月03日
    浏览(40)
  • 【RV1126】移植kaldi实时语音识别

    参考:Greedy search与beam search 在下面会用到解码的方法选择 greedy_search :贪心搜索,贪心搜索是一种来自计算机科学的算法,生成第一个词的分布以后,它将会根据你的条件语言模型挑选出最有可能的第一个词进入你的机器翻译模型中,在挑选出第一个词之后它将会继续挑选出

    2024年02月04日
    浏览(44)
  • FreeSWITCH对接vosk实现实时语音识别

    环境:CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Python版本:3.9.2 vosk是一个开源语音识别工具,可识别中文,之前介绍过python使用vosk进行中文语音识别,今天记录下FreeSWITCH对接vosk实现实时语音识别。 vosk离线语音识别可参考我之前写的文章: python使用vosk进行中文语音识别 可直接使用

    2024年02月02日
    浏览(42)
  • 百度飞桨paddlespeech实现小程序实时语音流识别

    前言: 哈哈,这是我2023年4月份的公司作业。如果仅仅是简单的语音识别倒也没什么难度,wav文件直接走模型输出结果的事。可是注意标题,流式识别、实时! 那么不得不说一下流式的优点了。 1、解决内存溢出的烦恼。 2、打算做成无文件生成,接收语音流直接走模型,减

    2023年04月21日
    浏览(53)
  • Java中实现在线语音识别(科大讯飞免费的SKD)、SDK下载和IDEA项目搭建、成功运行【完整代码】

    科大讯飞官网:https://www.xfyun.cn/ 首先登陆讯飞开放平台:https://passport.xfyun.cn/login,微信扫码关注登录 注册新账号 登陆后界面后,进入产品服务–实时语音转写栏目 点击个人免费套餐,下面的立即领取,它会提醒我们去实名认证 实名认证一下 提交完认证之后 可以看到认证

    2023年04月21日
    浏览(47)
  • Java集成阿里云的实时语音识别遇到的一些问题

    集成阿里云的实时语音识别遇到的问题: 困扰了一周时间,主要涉及到流的处理问题。 集成是通过引用maven依赖加载。 前端录音通过流的方式传到后端,后端再把流上传到Minio,后端拿到文件地址,调微服务(集成语音识别的是另一个独立的微服务)去Minio获取输入流,再上传到

    2024年02月02日
    浏览(34)
  • 极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践

    业界良心OpenAI开源的Whisper模型是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。 Whisper.cpp的张量

    2024年02月02日
    浏览(65)
  • 基于ARM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月03日
    浏览(61)
  • 基于RAM树莓派实现智能家居:语音识别控制,Socket网络控制,火灾报警检测,实时监控

    目录 一   项目说明 ①   设计框架 ②   功能说明 ③   硬件说明 ④   软件说明 二   项目代码 1 mainPro.c 主函数 2 InputCommand.h 控制设备头文件 3 contrlDevices.h 外接设备头文件 4 bathroomLight.c 泳池灯 5 livingroomLight.c 卧室灯 6 restaurantLight.c 餐厅灯 7 upstairLight.c 二楼灯 8 fire.c 火焰

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包