跳转至

BCD 快速入门

1. 概述与作用

本样例演示 Hi3516CV610 上 BCD(Baby Crying Detection)算法库的调用流程,隶属于音频智能算法域,解决 IPC/育儿机场景下对婴儿哭声的实时检测需求,按 10ms 一帧读取 PCM,调用 ss_baby_crying_detection_process 进行监测,并触发告警回调。

专业名词与缩写:

  • BCD — Baby Crying Detection,婴儿哭声检测算法

2. 执行准备

在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。

2.1 编译

进入样例目录执行 make 即可完成编译:

cd samples/mpp/bcd && make

编译成功之后,在当前目录下会生成一个sample_bcd的可执行文件,可以放社区支持的开发板上运行。

2.2 加载 KO

ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。

由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,加载命令为:

./load3516cv610_20s_debug -i

可以通过-h命令查看具体用法:

./load3516cv610_20s_debug -h
Usage:  ./load3516cv610_20s_debug [-option] [-sensor0~1] 
options:
    -i                       insert modules
    -r                       remove modules
    -a                       remove modules first, then insert modules
    -sensor0~1 sensor_name   config sensor type    [default: hy006_3814_0011]
    -mmz_start               config MMZ start addr [default: 0x42000000]
    -mmz_size                config MMZ mem size [unit: M, default: 96M]
    -ir_auto                 config ir_auto enable [default: 0]
    -profile                 config sys_profile [default: 0]
    -h                       help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1

如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。

如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于/ko目录下,在系统启动后会自动加载这些ko。

2.3 运行时依赖

在运行样例前,需要提前准备:

  • 启动MPP服务

当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:

```shell
cd samples/mpp/sdk_server && make
```

在单板上执行./sdk_server &即可启动MPP服务。

  1. sdk_server同样依赖soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;
  2. 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于/usr/bin目录下,并在系统启动时会自动启动sdk_server。
  • 样例运行时候需要的资源文件

准备包含婴儿哭声的pcm文件(如 crying.pcm),文件格式为16kHz/16bit/单通道,文件路径作为命令函参数 argv[1] 传入。

2.4 运行样例

调用语法:./sample_bcd <file_path>,无交互菜单;运行中按 Ctrl+C 退出。可以执行./sample_bcd -h查看用法。

# ./sample_bcd -h

Usage:./sample_bcd <file_path>
    file format: 16kHz 16bit 1chn.

3. 执行

调用命令

./sample_bcd crying.pcm

执行结果验证

  1. 成功启动后,串口打印:

    Notes: The BCD only supports processing mono audio data with sampling rate of 16kHz.
    
  2. 当算法每检测到pcm文件中的婴儿哭声,会在串口打印检测结果:

    [H:MM:SS:ms]sample_bcd_callback now, id = N.
    
  3. 算法检测完整个文件后自动退出,并打印:

    [H:MM:SS:ms]## result ## bcd detect over, total_count = N.
    

软件配置流程

  1. 初始化哭声检测模块,配置算法参数,参考ss_baby_crying_detection_init接口。
  2. 从哭声码流文件循环读取数据送算法处理接口进行检测,算法检测到哭声后会调用配置的回调函数,参考ss_baby_crying_detection_process接口。
  3. 去初始化哭声检测模块,参考ss_baby_crying_detection_deinit接口。