MaixSense R329板开箱 - 音频视频测试
MaixSense 开发板是Sipeed公司基于全志 R329-N4 打造的堪称最小Linux 卡片电脑, 整个套件加上3D打印的外壳,尺寸大约35mm x 55mm。
全志 R329-N4芯片,含有双核 ARM Cortex™[email protected](ARM v8 架构),搭载周易TZ1AIPU(最大支持0.25TOPS@600MHz),芯片内集成两颗HIFI4 DSP@400MHz(32KB L1 I-cache + 32KB L1 D-cache per core,2MB SRAM),可以做音频的预处理和后处理,片上集成SIP 256MB DDR3,减少BOM成本,便于PCB制板。
套件包含一个搭载的高度集成 SOM 核心板,以及一个多功能 IO 扩展底板,可以运行 Linux 系统, 并具备出色的扩展功能,套件包含两个模拟MEMS麦克风(平均灵敏度91dB SPL@1kHz),一个小喇叭,一个摄像头(出厂默认OV9732,最高支持720P@30fps HD,采用USB-C连接器,支持正反插,可分别用作前后摄),1.5寸SPI总线屏幕(接口采用0.5mm 12P FPC,分辨率240*240)。
可以将它用于搭建个人服务器、开发智能语音助手、设计机器人等场景。它通过内置的周易 AIPU 处理器同时支持智能语音和视频图像处理,开发者可以直接在开发板上跑通相关 CV , NLP 等 AI 模型。
1. 烧录配置系统
按照 MaixSense 简介 - Sipeed Wiki 步骤,在Windows 10下,使用Etcher,烧录armbian 系统。
插入烧录好的SD卡,连接USB串口线,作为电源和串口连接。打开串口终端,进行连接:
使用 nmtui 指令,进入可视化的WIFI配置界面, 选择自己的 SSID ,输入连接密码,确认即可。
使用 ifconfig 指令,查看本机的网络参数。
当WIFI配置好后,可以通过WIFI进行新的 PuTTY 连接,速度更快。
使用 armbian-config 指令,设置armbian 的国内 APT源。
选中Personal,选择Mirrors,找到国内的apt源,选清华大学的镜像。
安装Neofetch,
apt install neofetch
运行Neofetch,查看系统基本信息。
使用SFTP在上位机和开发板之间传递文件。
2. 测试摄像头和屏幕
固件里带有ffmpeg,可以采用该命令从摄像头采集100帧视频,并在屏幕上显示:
ffmpeg -i /dev/video0 -vframes 100 -s 240*240 -pix_fmt rgb565le -vf transpose=2,transpose=2 -f fbdev /dev/fb0
屏幕上显示摄像头采集的视频,说明这两个设备工作正常。PuTTY终端显示如下:
root@maixsense:~# ffmpeg -i /dev/video0 -vframes 10 -s 240*240 -pix_fmt rgb565le -vf transpose=2,transpose=2 -f fbdev /dev/fb0
ffmpeg version 4.3.2-0+deb11u2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10 (Debian 10.2.1-6)
configuration: --prefix=/usr --extra-version=0+deb11u2 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 2774.270943, bitrate: 147456 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 147456 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[swscaler @ 0xaaaadac902f0] full chroma interpolation for destination format 'rgb565le' not yet implemented
Output #0, fbdev, to '/dev/fb0':
Metadata:
encoder : Lavf58.45.100
Stream #0:0: Video: rawvideo (RGB[16] / 0x10424752), rgb565le, 240x240, q=2-31, 9216 kb/s, 10 fps, 10 tbn, 10 tbc
Metadata:
encoder : Lavc58.91.100 rawvideo
frame= 10 fps=7.2 q=-0.0 Lsize=N/A time=00:00:01.70 bitrate=N/A speed=1.23x
video:1125kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
root@maixsense:~#
3. 测试麦克风和喇叭
使用 arecord 和 aplay 录制和播放音频。
#使用麦克风录音arecord test.wav#使用喇叭播放录音aplay test.wav#录制48KHz采样音频arecord -f dat test48.wav
缺省情况下,录音和播放的声音都很小,需要通过 alsamixer 调整音量。
查看arecord的使用帮助,
root@maixsense:~# arecord
Usage: arecord [OPTION]... [FILE]...
-h, --help help
--version print current version
-l, --list-devices list all soundcards and digital audio devices
-L, --list-pcms list device names
-D, --device=NAME select PCM by name
-q, --quiet quiet mode
-t, --file-type TYPE file type (voc, wav, raw or au)
-c, --channels=# channels
-f, --format=FORMAT sample format (case insensitive)
-r, --rate=# sample rate
-d, --duration=# interrupt after # seconds
-s, --samples=# interrupt after # samples per channel
-M, --mmap mmap stream
-N, --nonblock nonblocking mode
-F, --period-time=# distance between interrupts is # microseconds
-B, --buffer-time=# buffer duration is # microseconds
--period-size=# distance between interrupts is # frames
--buffer-size=# buffer duration is # frames
-A, --avail-min=# min available space for wakeup is # microseconds
-R, --start-delay=# delay for automatic PCM start is # microseconds
(relative to buffer size if <= 0)
-T, --stop-delay=# delay for automatic PCM stop is # microseconds from xrun
-v, --verbose show PCM structure and setup (accumulative)
-V, --vumeter=TYPE enable VU meter (TYPE: mono or stereo)
-I, --separate-channels one file for each channel
-i, --interactive allow interactive operation from stdin
-m, --chmap=ch1,ch2,.. Give the channel map to override or follow
--disable-resample disable automatic rate resample
--disable-channels disable automatic channel conversions
--disable-format disable automatic format conversions
--disable-softvol disable software volume control (softvol)
--test-position test ring buffer position
--test-coef=# test coefficient for ring buffer position (default 8)
expression for validation is: coef * (buffer_size / 2)
--test-nowait do not wait for ring buffer - eats whole CPU
--max-file-time=# start another output file when the old file has recorded
for this many seconds
--process-id-file write the process ID here
--use-strftime apply the strftime facility to the output file name
--dump-hw-params dump hw_params of the device
--fatal-errors treat all errors as fatal
Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW A_LAW IMA_ADPCM MPEG GSM S20_LE S20_BE U20_LE U20_BE SPECIAL S24_3LE S24_3BE U24_3LE U24_3BE S20_3LE S20_3BE U20_3LE U20_3BE S18_3LE S18_3BE U18_3LE U18_3BE G723_24 G723_24_1B G723_40 G723_40_1B DSD_U8 DSD_U16_LE DSD_U32_LE DSD_U16_BE DSD_U32_BE
Some of these may not be available on selected hardware
The available format shortcuts are:
-f cd (16 bit little endian, 44100, stereo)
-f cdr (16 bit big endian, 44100, stereo)
-f dat (16 bit little endian, 48000, stereo)
4. mplayer播放音视频
mplayer 可以播放 MP3 和 MP4 格式的文件。
固件里没有mplayer,需要自己安装:
root@maixsense:~# apt install mplayerroot@maixsense:~# mplayer gsls.mp3MPlayer 1.4 (Debian), built with gcc-10 (C) 2000-2019 MPlayer Teamdo_connect: could not connect to socketconnect: No such file or directoryFailed to open LIRC support. You will not be able to use your remote control.Playing gsls.mp3.libavformat version 58.45.100 (external)Audio only file format detected.Load subtitles in ./==========================================================================Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, IIIAUDIO: 44100 Hz, 2 ch, s16le, 64.0 kbit/4.54% (ratio: 8000->176400)Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)==========================================================================AO: [pulse] Init failed: Connection refusedFailed to initialize audio driver 'pulse'AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)Video: no videoStarting playback...A: 152.1 (02:32.1) of 152.0 (02:32.0) 0.8%Exiting... (End of file)
播放MP3文件正常。
播放MP4报错,回头有空再查查是什么原因。
root@maixsense:~# mplayer record2.mp4
MPlayer 1.4 (Debian), built with gcc-10 (C) 2000-2019 MPlayer Team
do_connect: could not connect to socket
connect: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing record2.mp4.
libavformat version 58.45.100 (external)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xffffac1f8020]moov atom not found
LAVF_header: av_open_input_stream() failed
Exiting... (End of file)
5. 小结
这款板子采用全志的R329芯片,主打音频处理,SIP的DDR3只有256MB,做音频应该够用;做小尺寸的视频处理还行,想做大尺寸、复杂算法,估计就有些捉襟见肘了。
试了一下,板子的麦克风录音效果还好,噪音比较小,录音最大采样率支持到48KHz;喇叭的效果就很一般了,用来做做算法就得了,就不要追求享受了,想要享受的话,可以试试 Xiaomi Sound智能音箱,用的是同一款芯片,据说效果很好。
老徐 2021/9/26