Android使用讯飞实现语音转文本

Android Studio+讯飞实现语音转文本详细步骤

进入讯飞开放平台注册账号https://passport.xfyun.cn/register

注册完毕后登陆账号,点击右上角“控制台”选项,进入后创建一个应用:

创建完成后,点击右边的“SDK下载”:

添加自己想要的功能:

选择“语音听写”选项,当然如果你想要语音播报功能的话,可以一并下载“在线语音合成”:

选择SDK打包下载:

解压下载后的压缩包,将libs目录下的jar包放到Android Studio工程文件app/libs中:

由于本Demo中会用到json的东西,所以还得自己去网上下一个json的jar包,一并引进去(以及加入你在项目完善过程中所需要的jar包,我这里多余的是为了完成我除了语言转文本之外的功能):

这里需要注意的是!!你可以重新build一下gradle,但为了以防万一,可以现在gradle的配置文件中写明你添加的jar包以便编译:

改过后记得刷新一下:

之后在main目录下新建一个jniLibs目录,将 SDK中 libs 目录下的armeabi 拷进去,如下图所示:

讯飞为我们提供了一套语音听写时的UI,这个需要我们先将 SDK 资源包 assets 路径下的资源文件拷贝至 Android 工程asstes 目录下(没有的话自己新建,但是一般项目都是有的):

接下来开始添加代码,首先在AndroidManifest中添加一下权限(AndroidManifest在app/src/main目录下):

<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!--SD卡读写的权限(如果需要保存音频文件到本地的话)-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

然后开始编写或者在原有的基础上更改你的MainActivity:

下面我放一个比较官方的Demo代码

package zhaoq_qiang.xunfeidemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_click;
private EditText mResultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_click = (Button) findViewById(R.id.btn_click);
mResultText = ((EditText) findViewById(R.id.result));
SpeechUtility.createUtility(this, SpeechConstant.APPID + "= 此处需要填写你所申请的appId");
btn_click.setOnClickListener(this);
}
@Override
public void onClick(View v) {
btnVoice();
}
//TODO 开始说话:
private void btnVoice() {
RecognizerDialog dialog = new RecognizerDialog(this,null);
dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
dialog.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
printResult(recognizerResult);
}
@Override
public void onError(SpeechError speechError) {
}
});
dialog.show();
Toast.makeText(this, "请开始说话", Toast.LENGTH_SHORT).show();
}
//回调结果:
private void printResult(RecognizerResult results) {
String text = parseIatResult(results.getResultString());
// 自动填写地址
mResultText.append(text);
}
public static String parseIatResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i &lt; words.length(); i++) {
// 转写结果词,默认使用第一个结果
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
JSONObject obj = items.getJSONObject(0);
ret.append(obj.getString("w"));
}
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
}

 

最后大概就是这个样子的(我对按钮等做了改动,所以看上去会不一样,最基础的只要在activity_main.xml文件里设置一个按钮(Button)和一个文本框(TextView)即可):

Python turtle库入门学习笔记(一)

Python 海龟绘图——命令尝试

为了方便运用,可以先将引入的turtle命名为tu或者自己习惯的名字。

import turtle as tu

1、朝着画笔方向画直线——

tu.forward(距离)

2、转换画笔朝向(左转或者右转)——

tu.left(角度)/tu.right(角度)

3、朝着画笔反方向画直线——

tu.backward(距离)

4、抬起画笔,可移动但不绘制——

tu.penup()

5、放下画笔(默认开始是就是放下的)——

tu.pendown()

6、去指定的位置——

tu.goto(x,y)

7、指定去往x轴/y轴的位置——

tu.setx(数值)/tu.sety(数值)

8、画圆(半径的正负表示圆心在画笔的左右)——

tu.circle(半径)

9、直接设置画笔的角度(以水平向右为基准)——

tu.setheading(角度)

10、回归起始状态(画笔回到起点,朝向右)——

tu.home()

Linux虚拟机(Ubuntu)快速配置SSH

SSH登录虚拟机

1.安装SSH:

sudo apt-get install ssh

或者使用:sudo apt-get install openssh-client

2.启动服务:

sudo service ssh start

(停止服务:sudo service ssh stop)

(重启服务:sudo service ssh restart)

3.用SSH登录本机验证是否安装成功

博主可以说是两步搞定,如果出现的问题有提示,可以按照提示的输入,若是一直报错,那就只能再针对问题寻求答案喽。

CentOS安装gitlab快速教程

阿里云服务器搭建自己的gitlab(无具体解析)

先新建并配置一个文件

vim /etc/yum.repos.d/gitlab-ce.repo

i开始编辑,将一下文字复制进去,并按Esc回到一般模式,输入:wq保存并退出。

[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key

安装依赖包

sudo yum install curl openssh-server openssh-clients postfix cronie

安装 GitLab 社区版

sudo yum install gitlab-ce

初始化

GitLab sudo gitlab-ctl reconfigure

然后你需要等待半个到一个小时(画面最后一个单词将会在run上停留很长的时间)

此时你已经安装完成,可以通过IP访问并修改账号密码啦。如需要汉化,开通邮件服务,配置地址等,再做具体的操作。

初入Ruby自学笔记(一)

Ruby入门——环境(Ruby、NetBeans)搭建

笔者听说Ruby是一种跨平台、面向对象的动态类型编程语言,十分注重均衡性和简练性,它不需要编译就可以直接运行,不需要申明变量,所有的东西都是对象,Ruby的语句甚至就像是我们说话一样,非常便于使用。

出于好奇,我开始了一个菜鸡的自学之旅程,下面我们来看一段简单易懂的代码——该实例摘自《Ruby完全自学手册》:

#Robot类
#可以说话的机器人
class Robot
#说话
def say(words)
puts words
end
#说你好!
def say_hello
say "你好!"
end
my_robot = Robot.new
my_robot.say_hello

这是我看到的一个例子,学过一到两门语言的孩子应该会觉得比较好理解,简单感受一下Ruby的便捷。

那么现在我们来安装一下Ruby的环境(当然你也可以根据自己的喜好下载不同的Ruby环境,这边主要是Ruby和NetBeans)

安装过程中的选项按照默认的来就OK,

安装成功即刻运行的界面如下,

明显,Java Platform(JDK)9与NetBeans with JDK 是不一样的,我们选择右边这个,然后根据自己的电脑选择相应的类型。

安装时自己选择安装位置,点击[下一步(N)>]将进入一段较长时间的安装过程:

安装成功进入后界面如下,

哈哈哈,环境装完了!可以开始你的基础练习咯!

Linux入门指令(三)

管道命令学习过程(未补全)

很多时候,我们将管道命令理解为能够将一个命令的执行结果经过筛选,最后保留我们想要的内容的命令,它只要就是使用“|”这个界定符,那么它到底有哪些具体的操作呢?下面简单讲一下我学习到的一些基础知识:

打个比方,我们在用ls查询某些信息时,信息量大到一屏幕都显示不下,这样会使得我们看不到前面的内容,这个时候就需要将信息筛选一下啦!这边主要罗列一些比较常用到的命令:

cut -d '分隔字符' -f fields

cut本身是一个按行处理信息的选取命令,可以通过cut –help来查看它的具体介绍,而上面那句指令的意思是,将查询到的结果按照单引号中的分隔字符切割并编号,最后显示-f后面数字所指向的那一块或者几块内容,演示如下:

从图中我们可以看到,test.txt文本中的内容是很长一段以逗号隔开的字母,我们按照逗号切割后取出第2部分,结果就是hdakhdkshdk。如果你想取出不止其中一截的话,-f 2,3即可(用逗号将你要获取的截数写明)。

cut -c 长度范围

这句话的意思是,在你输出或者输入数据时,可以规定每一行的字符长度,它可以是   5-   形式,也可以是   5-10   形式(数字代表了你自己想要的长度)。

grep '想要搜索的内容'

可以将内容中包含单引号的所有行输出:

grep  -v '不想要搜索的内容'

可以将内容中不包含单引号的所有行输出:

grep还可以配合着cut一起使用,读者可以自己尝试更多新的玩法^.^

 

Linux入门指令(二)

自主定义登录主机后信息的显示情况

一个小小的指令,编辑motd文档:

 vi /etc/motd

按    i    编辑,按    Esc    进入一般模式,    :wq    (冒号别漏了哦)保存并退出:

哈哈哈哈哈,超级简单的一个小操作!

Linux指令入门(一)

vim的块选择

这里要从vi先讲起,vi是所有Linux都会内置的文本编辑器,而vim则更像是一个vi的升级版,可以说是一个程序开发工具。

目前大部分的distributions都以vim来代替vi的功能,如果你在文本的编辑模式下,编辑一个文件时,出现的界面有以下特点:

1.会有彩色字 2.光标位置在右下角给出

那么你现在看到的就是vim形式啦,比如我随意打开的passwd.conf

.conf是一个配置文件,所以vim会进行语法的检验,就像你看到的图中以‘#’开头的蓝色文字内容,左下角的18L,568C说明这个文件有18行,568个字符。

接下来,我们来示范一下vim的块选择——给每一行后面都添加相同的内容,为了方便学习,可以先找一个地方创建一个文件夹——

mkdir XXX

(XXX为你的文件夹名称),再创建文件——

vim text.txt

,把顺手找的文字段先复制粘贴进去并保存,具体操作如下:

Ctrl+C

复制一段文字,按

i

进入编辑模式

Ctrl+V

粘贴进text.txt,如下图

然后,将光标移到你需要复制的内容的起点,按下

Ctrl+V

,并再次移动光标到你需要复制的内容的终点,并按下

y

定下你的复制内容(下图白色部分就是整块复制的内容):

此时,你已经把整个块复制下来,并且进入的一般模式(无法添加内容),按

i

再次进入编辑模式,找个空位(案例中是第一行最右边再空两格),然后

Esc

回到一般模式,按下

p

键后粘贴成功。

是不是感觉还蛮有意思的!

 

 

Android Studio之APP项目创建

AS新手入门(一)

在Android Studio下载安装完毕后,双击打开,此处需要注意的是,如果出现以下两个错误,可以这样处理:

  • unable to access android sdk add-on list

解决方法:在自己安装的目录下找到:bin\idea.properties用文本打开这个文件,在末尾添加一行disable.android.first.run=true

  • Your Android SDK is missing, out of date, or is missing templates. You can configure your SDK via Configure | Project Defaults | Project Structure | SDKs

解决方法:按以上选项打开Project Structure后填写你下载的SDK和JDK的路径(若是还没有下载,需要下载一下;若是版本未更新,用SDK Manager.exe更新一下)

如果你没有上述问题,就在开始界面选择“Start a new Android Studio project”

出现以下配置界面:

配置项目,确定各个名称和存放项目存放路径;                                    Application name:项目名称  Company Domain:公司域名                            Package name:app打包名称  project location:存放路径

接下来设定兼容的安卓的最小版本,这依情况而定,我这里设定为安卓4.0.3版本(如果不确定各个版本的区别,可以点击“help me choose”,在打开的窗口中介绍了各个安卓版本的功能)。

点击“Next”,初始化组件:

再次点击“Next”,进入选择项目的活动类型界面,这里有很多现成的模板可以使用,新手选择默认即可。

接下来设定活动名称,界面布局的名称,点击finish完成项目的创建:

创建完后,在项目名->app->src->main->res->layout下双击xml文件就是打开活动界面设计窗口了:

若出现以上报错,更改gradle.propertiesorg.gradle.jvmargs=-Xmx512m即可:

然后重新打开就没有问题了!可以去学习编写完善APP啦!

VirtualBox安装Linux(之Ubuntu)详细教程

手把手教你VirtualBox安装Linux

首先第一步,就是打开VirtualBox的官网:

https://www.virtualbox.org/

打开最中间大大的下载按钮:

由于本文的电脑是Windows系统,所以选择以下选项中的第一条:

双击打开VirtualBox-win.exe,打开安装向导,点击「下一步(N) >」开始安装。

下一个界面是选择要安装的功能组件,按顺序分别是主程序(必选),VirtualBox USB驱动支持(安装后可以支持外接USB),虚拟机的网络支持(包括桥接的跟主机模式的网络)以及最后一个就是VirtualBox的Python 2.X的支持。这里可以不用动直接默认就行了。路径可以自己更改,然后点击「下一步(N) >」,然后安装自己的喜好选择安装功能的方式。

这里会弹出警告界面,提示安装网络组件会重置当前网络,点击「是(Y)」,并选择安装。

在安装工程中弹出Windows安全提示框,勾选“始终信任来自Oracle Corporation的软件(A)”,点击「 安装 (I)」。

如果出现以下界面,就说明你VirtualBox安装完成啦!

点击「 完成 (F)」就OK啦,如果你一路上碰到的都是英文,接下来也会自动转换成中文的。

至此,我们的第一步已经顺利完成,接下来就是安装Linux了。

这之前呢,我们需要下载Ubuntu的镜像文件,打开Linux官网https://www.linux.org/

点击“DownLoad Linux”,选择你要下载的版本,本文选的是Ubuntu最新版。

然后回归VirtualBox开始建虚拟电脑,点击“新建(N)”,为你的虚拟电脑取名并选择类型:

设置内存大小,推荐选择默认(最小不能低于516M):

下一步选择虚拟硬盘(首次进入都是选择新建一个虚拟硬盘):

虚拟硬盘文件类型选择VDI、动态分配:

大小根据自己的需求来,博主自己选了16G:

出现以下界面就算是创建好啦!

然后我们需要设置一下虚拟机,右键选择设置:

在系统选项取消软驱:

在网络选项配置网卡(如果虚拟机需要上外网,设置第二块网卡)

设置系统镜像文件:在“存储”—>“没有盘片”点击“第二IDE控制器主通道”边上的光盘标志,选择Ubuntu镜像文件,也就是我们一开始下载的那个.iso文件。

然后,点击“启动”,启动虚拟机,进入安装程序,语言的话,我这里选了中文(简体):

点击“安装Ubuntu”,出现以下界面选择“继续”:

下一步请注意,如果你与博主一样使用虚拟机,建议选择清除整个磁盘并安装 Ubuntu,但如果你要装到实体机与 Windows 形成双系统时,请选择其他选项,但这要求你对 Linxu 有一定的了解且具备一定的基础进行分区操作。

点击“现在安装”后将会跳出以下弹框,选择“继续”即可,地点根据自己的情况填写,语言选择汉语:

然后,进行用户设定,计算机名是主机名,用户名是登录时用的账户名称,密码则是你所设用户名的登录密码:

然后,接下来请耐心等待安装过程(不要点击SKIP哦!

安装成功,重启你就可以登录啦!恭喜哟!