转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
效果图
源码
亮区扩张,也叫膨胀,要实现这样的效果,我们可以选取一个合适大小的核,用被核覆盖的最大值代替锚点像素。膨胀可以用来融合可能被分割的目标。
我们首先定义一个合适大小的核
|
|
然后调用Imgproc.dilate()
方法把图像的亮区放大
|
|
封装
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
调用
|
|
精于心,简于形
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
亮区扩张,也叫膨胀,要实现这样的效果,我们可以选取一个合适大小的核,用被核覆盖的最大值代替锚点像素。膨胀可以用来融合可能被分割的目标。
我们首先定义一个合适大小的核
|
|
然后调用Imgproc.dilate()
方法把图像的亮区放大
|
|
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
|
|
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
锐化也可以看作是一种线性滤波操作,并且锚点像素有较高的权重,而周围的像素权重较低。
因此,我们可以自定义一个这样的核。
|
|
这里我们将图像的深度设为16SC1
,表示包含一个通道(C1),图像中的每个像素包含一个16比特有符号整型数(16S)。
定义完核以后,我们对图像和核做卷积操作
|
|
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
|
|
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
|
|
|
|
|
|
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
图片处理在子线程处理,处理完通过回调返回。
|
|
|
|
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
|
|
|
|
|
|
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
图片处理在子线程处理,处理完通过回调返回。
|
|
|
|
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
|
|
|
|
|
|
这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
图片处理在子线程处理,处理完通过回调返回。
|
|
|
|
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
之前时间比较紧张,在网上找了很多文章,写了一个人脸识别的程序,也是模棱两可,今天开始抽时间系统学习一下OpenCV在Android上的使用。
后面用到的是OpenCV的2.4.11版本,据说新的3.x的版本和2.x的版本改动较大,2.x的版本学习完可以再看看与3.x版本的区别。毕竟老版本的学习资源更多一些。
我们下载完SDK以后,里面会有一个Library的库供我们使用,但是核心的功能不在这里面,它只是一个调用的工具,我们还需要安装OpenCV Manager,在下载的SDK里有一个apk
的文件夹,里面是对应各个cup架构的Manager,选择对应的Manager安装就可以了。
除了安装OpenCV Manager,也可以直接在工程里添加so,但是这会使我们的APK体积大大增加,不过这不是我们要关心的,我们主要学习怎么使用OpenCV。
OpenCV使用Mat
对象存储图像,该对象保存了图像的行数、列数、数据等能唯一标识该图像的信息,并且可以利用该数据还原图像,不同的图像所包含的信息量也不同,例如彩色图像所包含的信息量就要比灰色图像多得多。因为灰色图是单通道的,彩色图是三通道的。
数字代表指定颜色的亮度
以整数表示时,取值范围是0~255,0表示纯黑色,255表示纯白色。
以浮点数表示时,取值范围是0~1,0表示纯黑色,1表示纯白色。
第一通道表示蓝色,第二通道表示绿色,第三通道表示红色。
有的时候,图像信息量太大,处理的时间就会比较长(有的时候可能不需要这么信息就可以解析出来我们想要的结果了),为了解决这个问题,OpenCV提供了一个线性滤波器,可以对图片进行模糊处理。
很多线性滤波器都利用了称为核的数字向量,核可以看作是沿着像素滑动的窗口,并把计算结果输出给核像素。
下面的图中,是一个3 * 3
的核作用在了一副10 * 10
的图像上。
Android Studio版本:2.1
导入OpenCV Library
File -> New -> Import Module
引用OpenCV Library
安装OpenCV Manager
加载OpenCV Manager,如果诶呦安装会有提示
|
|
到此,准备工作做完,就可以在此工程上学习OpenCV了。
如果你在运行的过程中,遇到这样的问题
这是SDK版本的问题,将targetSdkVersion
改为19即可。
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
科大讯飞 | 灵云语音 | |
---|---|---|
语音能力 | 语音合成、语音识别、语义、命令词、唤醒 | 没有独立的唤醒功能,需要使用命令词实现唤醒。 |
初始化 | 我们购买完离线资源包以后,集成到工程里,就可以保持在离线环境下使用 | 即使使用离线语音能力,第一次使用的时候,也必须要联网,激活离线语音能力以后,才可以使用 |
网络请求 | 各种请求均异步操作,不会阻塞线程。 | 在线文字语义识别,是同步操作,其它是异步操作过程。(同步操作时间超过5秒会导致Android终端抛出NAR异常导致崩溃) |
语义 | 场景定义灵活,开发者可在后台自定义,通过申请的方式,可以开通自定义场景,目前免费开放。语义解析失败,可以将语音转文字。 | 场景的定义需要联系客服人员开通,自定义场景需要付费(说是一般一个场景2万元)。语义解析失败不能转成文字 |
语音唤醒 | 支持(官方自称低功耗) | 实际没有唤醒功能,是使用离线命令词的方式模拟出了唤醒,效果不理想。尚未发现可以发现可以设置门限值等常用参数的API。 |
命令词识别 | 离线使用BNF语法,在线使用ABNF语法,语法可以使用占位符等等的操作符 | 离线和在线都使用JSGF语法。 |
用命令词的方式实现唤醒,用唤醒词做命令词,做好标识,然后循环开启命令词识别,当识别到唤醒的命令词的时候,视为被唤醒了。
个人认为这种方式实现唤醒效果不好,原因如下:
录音都有前端点超时时间和后端点超时时间,这样一来,即使我们准确的说出唤醒词,也要在说完唤醒词以后,保证在后端点时间内不再有声音录入,才能提高被唤醒的几率。
唤醒不是即时的,即使我们准确的说出唤醒词,并保持不再有声音录入,也要至少等待后端点时间过去,录音结束以后,才会识别(被唤醒)。
这种方式的唤醒其实就是在进行语音识别,如果一直开启唤醒,消耗性能,耗电。
科大讯飞语音方面更灵活,更好用。
灵云语音,在人工智能方面提供的技术更全面(还包括图像识别,手写识别,人脸识别,指纹识别、机器翻译等),偏定制(智能家居、车载系统、机器人等智能设备的定制)。
单从语音能力角度来比较,讯飞更好。
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
严格来讲,灵云没有语音唤醒功能,但是通过命令词的方式可以实现
用命令词的方式实现唤醒,用唤醒词做命令词,做好标识,然后循环开启命令词识别,当识别到唤醒的命令词的时候,视为被唤醒了。
我个人认为这种方式实现唤醒意义不大,所以没有做demo,原因如下:
录音都有前端点超时时间和后端点超时时间,这样一来,即使我们准确的说出唤醒词,也要在说完唤醒词以后,保证在后端点时间内不再有声音录入,才能提高被唤醒的几率。
唤醒不是即时的,即使我们准确的说出唤醒词,并保持不再有声音录入,也要至少等待后端点时间过去,录音结束以后,才会识别(被唤醒)。
这种方式的唤醒其实就是在进行语音识别,如果一直开启唤醒,消耗性能,耗电。
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
下载SDK以后,将jar和so导入工程
|
|
|
|
|
|
|
|
|
|
|
|
离线命令词和在线很类似,只需要更改CapKey,导入离线资源包即可,我们先下载离线资源
下载完解压
将里面所有的文件重命名,前面加lib
,后面加.so
,然后导入工程
修改CapKey为asr.local.freetalk
注意,灵云的离线语音功能第一次使用需要联网激活,激活以后才可以使用离线功能。
直接在在线语音识别的基础上实现语义理解更加简单,只要将CapKey换成asr.cloud.dialog
即可
但是需要注意一点的是,想要使用哪个场景,必须开通以后,在参数里加上对应的场景,才是识别出来。
类似这样
|
|
这里的天气,对应的参数是weather
,了解更多场景和对应场景参数可以查看捷通华声灵云公有云能力平台NLU结果开发手册.pdf
转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
下载SDK以后,将jar和so导入工程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
灵云的语义,想要识别哪个场景,必须要先开通对应场景,然后做配置以后才可以使用,类似这样
|
|
这里的天气,对应的参数是weather
,了解更多场景和对应场景参数可以查看捷通华声灵云公有云能力平台NLU结果开发手册.pdf