基于Google的嵌入式系统android开发语音技术 语音搜索,语音朗读文章,语音控制

本文主要是介绍基于Google的嵌入式系统android开发语音技术 语音搜索,语音朗读文章,语音控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

android是Google推出的嵌入式操作系统,有着广泛的根基与基础。最近一个中关村的一个CEO朋友送了一个摩托罗拉android手机,想玩玩语音技术过把瘾。如何用android开发语音技术应用呢,本人下载的最新SDK,android-2.1_r01-windows,

废话少说,看看老夫一展身手,虽然我本人精通C/C++,.Net,但是玩起java也是一点都不含糊的,老夫我的android手机提前安装了

Linux开源语音识别引擎simon,本人已经完全移植成功,英文识别率非常高只比nuance差一点

Linux开源语音朗读引擎espeak, ,本人已经完全移植成功,英文朗读只比于科大讯飞差一点

先简单介绍下语音朗读技术

详细代码见注释

 

import android.app.Activity;import android.os.Bundle;import android.speech.tts.TextToSpeech;import android.util.Log;import android.view.View;import android.widget.Button;import com.example.android.apis.R;import java.util.Locale;import java.util.Random;public class TextToSpeechActivity extends Activity implements TextToSpeech.OnInitListener {    private static final String TAG = "TextToSpeech";    private TextToSpeech mTts;    private Button mAgainButton;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.text_to_speech);        //初始化文本到语音。这是一个异步操作。        //OnInitListener(第二个参数)被调用初始化后完成。        mTts = new TextToSpeech(this,            this  // 创建接口初始化            );         //禁用按钮的布局。        //这将被启用后的TTS引擎的初始化        mAgainButton = (Button) findViewById(R.id.again_button);        mAgainButton.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                sayHello();            }        });    }    public void onDestroy() {        // 删除对象退出        if (mTts != null) {            mTts.stop();            mTts.shutdown();        }        super.onDestroy();    }    // 实现TextToSpeech.OnInitListener    public void onInit(int status) {        // 返回成功或者失败        if (status == TextToSpeech.SUCCESS) {            //设置首选语言为美国英语。            //注意语言可能无法使用,其结果将表明这一点。            int result = mTts.setLanguage(Locale.US);            // 定义结果 mTts.setLanguage(Locale.FRANCE);            if (result == TextToSpeech.LANG_MISSING_DATA ||                result == TextToSpeech.LANG_NOT_SUPPORTED) {               // 语言不受支持                Log.e(TAG, "Language is not available.");            } else {                //检查其他可能的结果代码文件。                //例如,语言可能是可用的语言环境,但不是指定的国家和变体。                //TTS引擎已成功初始化。                //允许用户按下按钮的应用程序再次发言。                mAgainButton.setEnabled(true);                // 开始调用                sayHello();            }        } else {            // Initialization failed.            Log.e(TAG, "Could not initialize TextToSpeech.");        }    }    private static final Random RANDOM = new Random();    private static final String[] HELLOS = {      "Hello",      "yincheng",      "ShanDongUniversity",      "microsoft",      "google is  great",      "My  name   is  yincheng!"    };    private void sayHello() {        // 随机选择朗读文本        int helloLength = HELLOS.length;        String hello = HELLOS[RANDOM.nextInt(helloLength)];        mTts.speak(hello,            TextToSpeech.QUEUE_FLUSH,             null);    }}

 

 

android语音识别是通过一个Intent的Action动作来完成的。主要有以下两种模式:

ACTION_RECOGNIZE_SPEECH:一般语音识别,主要用于语音控制。

ACTION_WEB_SEARCH:网络搜索识别,主要用于语音搜索

 

我们先来分析下语音控制,

import android.app.Activity;   import android.content.Intent;   import android.content.pm.PackageManager;   import android.content.pm.ResolveInfo;   import android.os.Bundle;   import android.speech.RecognizerIntent;   import android.view.View;   import android.view.View.OnClickListener;   import android.widget.ArrayAdapter;   import android.widget.Button;   import android.widget.ListView;   import java.util.ArrayList;   import java.util.List;   public class VoiceRecognition extends Activity implements OnClickListener {   private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;     private ListView mList;     public void onCreate(Bundle savedInstanceState)       {          super.onCreate(savedInstanceState);         setContentView(R.layout.voice_recognition);         Button speakButton = (Button) findViewById(R.id.btn_speak);         mList = (ListView) findViewById(R.id.list);          // 检查是否有语音识别活动     PackageManager pm = getPackageManager();        List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);          if (activities.size() != 0)          {              speakButton.setOnClickListener(this);          }           else         {              speakButton.setEnabled(false);             speakButton.setText("Recognizer not present");       }     }     public void onClick(View v)     {         if (v.getId() == R.id.btn_speak)          {             startVoiceRecognitionActivity();         }     }    private void startVoiceRecognitionActivity()     {         //借助Intent传递语音识别的模式          Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);        //语言模式和自由形式的语音识别        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);        //提示语音开始        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");       //开始语音识别          startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);     }        //当语音结束时的回调函数onActivityResult      @Override       protected void onActivityResult(int requestCode, int resultCode, Intent data)      {           if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)           {               // 取得语音结果,加入一个选择判断就可以语音控制           ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);              mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));          }            super.onActivityResult(requestCode, resultCode, data);       }   }  

 

 

然后我们来亲自实践一个语音搜索,创建一个webview 来进行搜索,就是完整的语音搜索了,结合上述的语音合成,那简直牛的很,

 

 

import android.app.Activity;   import android.content.Intent;   import android.content.pm.PackageManager;   import android.content.pm.ResolveInfo;   import android.os.Bundle;   import android.speech.RecognizerIntent;   import android.view.View;   import android.view.View.OnClickListener;   import android.widget.ArrayAdapter;   import android.widget.Button;   import android.widget.ListView;   import java.util.ArrayList;   import java.util.List;   public class VoiceRecognition extends Activity implements OnClickListener {   private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;          private ListView mList;     public void onCreate(Bundle savedInstanceState)       {          super.onCreate(savedInstanceState);         setContentView(R.layout.voice_recognition);         Button speakButton = (Button) findViewById(R.id.btn_speak);         mList = (ListView) findViewById(R.id.list);          // 检查是否有语音识别活动     PackageManager pm = getPackageManager();        List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);          if (activities.size() != 0)          {              speakButton.setOnClickListener(this);          }           else         {              speakButton.setEnabled(false);             speakButton.setText("Recognizer not present");       }     }     public void onClick(View v)     {         if (v.getId() == R.id.btn_speak)          {             startVoiceRecognitionActivity();         }     }    private void startVoiceRecognitionActivity()     {         //借助Intent传递语音识别的模式   ,注明语音搜索识别模式       Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);        //语言模式和自由形式的语音识别        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);        //提示语音开始        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");       //开始语音识别          startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);     }        //当语音结束时的回调函数onActivityResult      @Override       protected void onActivityResult(int requestCode, int resultCode, Intent data)      {           if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)           {               // 取得语音结果,加入一个选择判断就可以语音控制           ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);              mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));          //进行访问网页的语音搜索,可以结合上述例子实现语音合成朗读,他妈的,太爽了哈                            WebView webView = (WebView) findViewById(R.id.webView);        // 配置浏览器,使其可支持 JavaScript        WebSettings webSettings = webView.getSettings();        webSettings.setJavaScriptEnabled(true);        // 清除浏览器缓存        webView.clearCache(true);        // 指定浏览器地址,就是google搜索关键词的访问格式,检索语音结果        webView.loadUrl("http://www.google.com.hk/search?hl=zh-CN&source=hp&q="+data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)+"&meta=&aq=f&aqi=g10&aql=&oq=&gs_rfai=");        // 指定浏览器需要解析的 html 数据  ,可以结合语音朗读读出        // webView.loadData("<a href="http://webabcd.cnblogs.com/" mce_href="http://webabcd.cnblogs.com/">webabcd</a>", "text/html", "utf-8");          }            super.onActivityResult(requestCode, resultCode, data);       }   }  

 

至此大功告成,本文未经许可,不准转载。否则侵权后果自负。

需要源代码(Andrroid语音控制拨号sample,Andrroid语音自动搜索并朗读结果的语音浏览器sample),请在本人CSDN博客留言,源码将在4.12日VS2010发布大会那一天统一发送源码(仅发送前200楼),请大家踊跃留下Email.后面排队的将等到5.20日。

 

作为语音技术业内专家,提供语音技术开发应用企业咨询顾问,有需要者请联系MSN:yincheng01@163.com,

策划有一套云计算语音交互移动3G商业计划正在实施已经获得天使投资,在移动3G上面有想法的站长们可以联系我共创语音3G时代!

 

另外本人正在参加Google Andrroid软件开发大赛(作品为基于人工智能与语音交互的3D宠物),希望有空大家去捧场!

http://code.google.com/intl/zh-CN/android/

http://code.google.com/intl/zh-CN/android/adc/

 

 本人完成作品时,得到中国科学院陈博士后在人工智能与多线程并行计算上的支持,在此特别感谢!

 

 

 

也特别感谢中国科学院著名的图形学天才专家颜博士后完成了3D智能宠物的所有表情与动作,其效果之炫丽简直是惊天地,泣鬼神!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

这篇关于基于Google的嵌入式系统android开发语音技术 语音搜索,语音朗读文章,语音控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/247774

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.