Skip to content

这个DeskBot_demo例程详见demo仓库的文件夹,他依赖了AIChat_demo这个子工程,如果在Echo ARM开发板上运行的话,还会依赖yolov5_demo这个例程,跑AI相机。

1.上手编译使用

1.1.编译deskbot

  1. 在电脑上运行SDL仿真

    注意更改conf/dev_conf, 将LV_USE_SIMULATOR1

    sh
    cd ./DeskBot_demo
    mkdir ./build
    cd ./build
    cmake ..
    make

    然后就可以在ubuntu上运行了

    sh
    cd ../bin
    ./main
  2. 编译到开发板上运行

    注意更改conf/dev_conf, 将LV_USE_SIMULATOR0

    sh
    cd ./build
    cmake .. -DTARGET_ARM=ON
    make

    然后把可执行文件所在的文件夹/bin, 复制到开发板, 在开发板上就能运行了

    注意:

    sh
    cd ../bin
    ./main

1.2.Server运行

python环境搭建详见AI语言助手demo(Server端), 然后进入你搭好的虚拟环境中,运行即可

sh
python ./main.py --access_token="123456"

1.3.注意

!! 使用前请先修改./bin/system_para.conf中的内容 !!

  1. ./bin/system_para.conf中有高德API key,需要换成你的API key,用于天气等数据的获取

  2. 每个page可视为一个APP, 想要自行添加可以参考模版添加

  3. 你的个人电脑运行服务端server时, 需要跟开发板Client端, 连接到同一个网络下, AI chat才能正常访问. 当然, 你也可以使用电脑进行网络共享(默认开发板是172.32.0.93, 电脑是172.32.0.100).

2.如何修改唤醒词

首先进入snowboy唤醒词网站,录制唤醒词,然后生成之后只需要把文件下载的xxxx.pmdl文件放到model目录下即可,我这里生成了echo.pmdl,然后放入到AIChat_demo/Client/third_party/snowboy/resources/models这个文件夹即可,编译的时候,我的Cmake会复制这个文件到你的bin特定文件夹中的,可以自行看一下cmake中怎么写的。

然后进入AIChat_demo/Client/Application/UserStates/Idle.cc这个文件,更换你的.pmdl唤醒词文件,然后就可以了

cpp
void IdleState::Run(Application* app) {
    USER_LOG_INFO("Idle state run.");
    SnowboyDetect* detector = SnowboyDetectConstructor("third_party/snowboy/resources/common.res",
                                                     "third_party/snowboy/resources/models/echo.pmdl");
    SnowboyDetectSetSensitivity(detector, "0.5");
    SnowboyDetectSetAudioGain(detector, 1);
    SnowboyDetectApplyFrontend(detector, false);
    std::vector<int16_t> data;
    while (state_running_.load() == true) {
        if(app->audio_processor_.recordedQueueIsEmpty() == false) {
            app->audio_processor_.getRecordedAudio(data);
            // 检测唤醒词
            int result = SnowboyDetectRunDetection(detector, data.data(), data.size(), false);
            if (result > 0) {
                // 发生唤醒事件
                USER_LOG_INFO("Wake detected.");
                app->eventQueue_.Enqueue(static_cast<int>(AppEvent::wake_detected));
                break;
            }
        }
    }
    SnowboyDetectDestructor(detector);
}