Giter Site home page Giter Site logo

rokid-openvoice-process-android-pro's Introduction

Rokid Open Voice SDK快速集成指南

简介

Rokid开放平台SDK包含Siren、NLP、ASR、TTS几大模块。使用Rokid开放平台的SDK之前,首先需要有一套 Android 源码,然后下载以下SDK模块:

Android 6.0 使用

git clone https://github.com/Rokid/rokid-openvoice-sdk-deps-protobuf -b android23

命令获取protobuf。另外,这里为大家提供了rokid-openvoice_process-android-pro代码帮忙大家快速集成。

接下来会从以下6个步骤完整讲述如何为自己的项目部署Rokid开放平台的SDK:

1 目录结构

命名建议与上图一致,先在 Android 根目录建一个 openvoice 文件夹,把上图中的库放进去

rokid-openvoice_process-android-pro 与整个的业务逻辑相关,其中包含一个 openvoice_proc 的C++服务和一个 VoiceClient 的Java服务,以及MIC HAL。C++服务用于为Siren提供pcm流,然后传递由Siren滤波降噪过的纯净语音给NLP或ASR,NLP或ASR经过云端处理返回结果,还有一个最重要的点就是维持Siren与NLP或ASR之间的状态。Java服务用于解析NLP或ASR返回结果,处理应用层逻辑。

2 配置

1、进入Rokid开放平台申请Rokid账号,已经有Rokid账号的同学可直接登录(但需进行部分信息补全)。

2、登录后点选「语音接入」进行设备认证信息申请。

3、具体做法:语音接入 > 创建新设备 > 填写设备名称 > 创建认证文件。之后您将获得:

account_id、device_type_id、device_id、secret、key

通过以上信息,您就可以获取Rokid语音服务了,然后把申请得到的账号信息写入到 /rokid-openvoice_process-android-pro/etc/openvoice-profile.json文件中。

{
    "host": "apigwws.open.rokid.com",
    "event_req_host": "apigwrest.open.rokid.com",
    "port": "443",
    "branch": "/api",
    "key": "rokid_test_key",
    "device_type_id": "rokid_test_device_type_id",
    "device_id": "rokid_test_device_id",
    "secret": "rokid_test_secret",
    "api_version":"1",
    "lang": "zh",
    "codec": "opu",
    "vad_mode": "cloud",
    "vend_timeout": 500
}

请添加如下内容到 /device/xxxx/p230/p230.mk,每个人的路径是不一样的。这一步是为了让SDK编译出来的东西打包进system.img。

注意SDK存放位置

include openvoice/rokid-openvoice_process-android-pro/device/xxxx/p230/openvoice.mk

3 处理权限问题

Android 基于Linux引入了selinux,这是专门为Linux设计的一套安全机制。它有三种工作模式,Android4.2 以前一直处于Permission模式,之后便工作在enforcing模式,这就需要我们根据selinux的规范添加相应的.te文件,建议在开发阶段设回Permission,省掉一大堆权限问题。

/system/core/init/init.cpp 

static selinux_enforcing_status selinux_status_from_cmdline() {
	selinux_enforcing_status status = SELINUX_ENFORCING;
	修改为
	selinux_enforcing_status status = SELINUX_PERMISSIVE;
}  

4 添加系统启动项

进入到 /device/xxxx/common/products/mbox/init.xxxx.rc加入如下内容,每个人的目录是不一样的。因为rokid-openvoice_process-android-pro中的C进程编译出来为openvoice_proc,所以我们加在这里,让init进程帮我们启动。

service openvoice_proc /system/bin/openvoice_proc
    class main
    user root
    group root root 

5 编译

如果你的开发板使用的是USB MIC,你需要定义宏 USB_AUDIO_DEVICE,具体操作如下:

/rokid-openvoice_process-android-pro/Android.mk

LOCAL_CPPFLAGS += -DUSB_AUDIO_DEVICE

请修改如下内容:

/rokid-openvoice-sdk/Android.mk

include $(LOCAL_PATH)/JavaLibrary.mk
修改为
#include $(LOCAL_PATH)/JavaLibrary.mk

单编 :

先编译 Andorid,然后使用 mm 依次编译:rokid-openvoice-sdk-deps-protobuf,rokid-openvoice-sdk-deps-poco,rokid-openvoice-sdk,rokid-blacksiren,rokid-openvoice_process--android-pro。

整编 :

./build/envsetup.sh
lunch <your config>
make aprotoc -j8
make -j8

6 调试

以上是一套完整的集成流程,到目前为止已经完成了50%的工作。调试主要围绕MIC这块,拾音以及语音识别准确度都围绕在这里,建议大家分两步:

第一步:测试硬件是否OK,我们使用tinycap命令抓取pcm裸数据,这个命令是从kernel层直接拿数据,不经过HAL层,这样可以定位问题。然后用 Audacity 或 Adobe 工具分析波形,不能有杂音或奇怪的波形出现。

adb shell
stop openvoice_proc
cd /sdcard
tinycap file.wav [-D card] [-d device] [-c channels] [-r rate] [-b bits] [-p period_size] [-n n_periods]

card        :选择一个MIC设备,可以执行`cat /proc/asound/cards` 下查看
device      :0代表输入,1代表输出
channels    :通道数
rate        :采样率,Siren采样率最小必须为48K
bits        :比特率,32/24/16
period_size :周期
periods     :点

例:
tinycap 1.wav -D 0 -d 0 -c 8 -r 48000 -b 32 -p 1024 -n 8
adb pull sdcard/1.wav ./

第二步:拾音

附件1:

如图,MIC可以呈三维立体设计,但一般都是二维的。不管怎样,只要找到圆心,顺时针测量从圆心到MIC之间的距离。例如上面pos.0的坐标:x=0.00000000,y=0.03000000,z=0.00000000,单位为”米“。

rokid-openvoice-process-android-pro's People

Contributors

insswer avatar smile-xuc avatar gateway11 avatar

Stargazers

 avatar  avatar liubiqu avatar  avatar  avatar  avatar

Watchers

Louis Liu avatar Joseph avatar James Cloos avatar garl avatar  avatar  avatar Yorkie Makoto avatar etc avatar  avatar xyslion avatar  avatar  avatar vraink avatar jiang.deng avatar  avatar guunergooner avatar  avatar  avatar

rokid-openvoice-process-android-pro's Issues

android 接入

看了一天还是没明白怎么把语音接入app中 是要手机root权限吗?还是要编译源码 然后指南里面说的framework 文件夹 gitbub里面并没有啊? 可否来分详细指南 照顾下android小白

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.