SNNF demo includes the following SNNF demo includes the following model samples
yolov8n_pose_opti;
yolov8n_segment_opti;
yolov8n_detection_opti;
det_10g + w600k_r50; (face match)
lightFace;
age;
yolov8n_detection_opti + humanAttr;
Human tracking;
Human falling detection;
OCRDet + OCRCls + OCRRec;
If you want to see the demo's effects more quickly, please refer to the SNNF Demo Introduction.
If you Please read this document carefully if you want to compile the SNNF demo, please read this document carefully.
HW Environment
...
Camera
The SNNF demo supports obtaining input data through a camera or a video file. The camera can be connected through MIPI or USB.
...
If you plan to use it, you need to must make the following modifications before building the C3V image.
modify Modify the linux/kernel/arch/arm64/boot/dts/sunplus/sp7350-dm.dts ,enable before building the C3V image, enable OV5640_IN4.
Code Block | ||
---|---|---|
| ||
@@ -19,7 +19,7 @@ //#define IMX708_IN5 //#define OV5640_IN2 //#define OV5640_IN3 -//#define OV5640_IN4 +#define OV5640_IN4 //#define OV5640_IN5 //#define OV5647_IN2 //#define OV5647_IN3 |
To improve the speed of reading data from the sensor, you can make the following settings:
Permanently modification
modify the linux/kernel/drivers/media/common/videobuf2/videobuf2-dma-contig.c,
set the remap to true.
Code Block | ||
---|---|---|
| ||
@@ -22,7 +22,7 @@
#include <media/videobuf2-dma-contig.h>
#include <media/videobuf2-memops.h>
#if defined(CONFIG_SOC_SP7350)
-static bool remap;
+static bool remap = true;
#endif
struct vb2_dc_buf {
struct device *dev; |
Temporary modification
...
execute the following command before running the SNNF demo.
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release# cat /sys/module/videobuf2_dma_contig/parameters/remap N root@ubuntu:/snnf_demo_release# echo 1 > /sys/module/videobuf2_dma_contig/parameters/remap root@ubuntu:/snnf_demo_release# cat /sys/module/videobuf2_dma_contig/parameters/remap Y |
USB
The USB Camera supports USB 2.0 and USB 3.0. If you want to use USB 3.0, Set the jump cap in the figure below figure to the OFF state.
...
Display
Info |
---|
SNNF demo requires a display screen by default. If you do not connect the display screen, the program will run incorrectly. |
The display screen supports MIPI or HDMI connection, and the currently supported MIPI display screen is the official 7-inch display screen of Raspberry Pi.
...
Set the jump cap in the above figure to the ON state and unplug the HDMI cable.
...
Set the jump cap in the above figure to OFF, power off the Panel connected to MIPI, and plug in the HDMI cable.
...
dependency_libraries: the library that snnf_demo depends on.
demo_assist
face_match
ffmpeg-4.4.2-prebuilt
freetype-2.12.1
libdrm-2.4.100-prebuilt
libpng-1.6.37
lvgl-9.1.0-prebuilt
opencv-4.9.0-prebuilt
snnf_release
vsi_lib
yuvconvert
snnf_demo_src:demo : demo source code.
src
menu: code related to UI.
nn: sample code for SNNF and code for processing the NN results.
stream: reading video stream and displaying NN results.
makefile
out: the generation path of the snnf_demo program.
bin: snnf_demo, Prebuild sample programs that can run on the c3v Linux platform.
snnf_demo_env.sh:setup : setup environment variable.
How to build SNNF Demo
Compile on the C3V platform
Copy the release folder to C3V Linux;
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release# ls -al total 24 drwxr-xr-x 5 10860 11400 4096 Nov 7 11:30 . drwxr-xr-x 4 root root 4096 Nov 7 11:17 .. drwxr-xr-x 3 10860 11400 4096 Nov 7 10:52 bin drwxr-xr-x 13 10860 11400 4096 Nov 7 10:54 dependency_libraries -rw-r--r-- 1 10860 11400 1887 Nov 7 11:30 snnf_demo_env.sh drwxr-xr-x 5 10860 11400 4096 Nov 7 12:09 snnf_demo_src |
cd snnf_demo_src
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release/snnf_demo_src# ls -al total 80 drwxr-xr-x 5 10860 11400 4096 Nov 7 12:09 . drwxr-xr-x 5 10860 11400 4096 Nov 7 11:30 .. -rw-r--r-- 1 10860 11400 6770 Nov 7 11:00 main.cpp -rw-r--r-- 1 root root 40776 Nov 7 12:09 main.o -rw-r--r-- 1 10860 11400 4653 Nov 7 11:00 makefile drwxr-xr-x 2 10860 11400 4096 Nov 7 12:09 out drwxr-xr-x 5 10860 11400 4096 Nov 7 10:53 snnf_demo -rw-r--r-- 1 10860 11400 1803 Nov 7 11:00 snnf_demo_env.sh drwxr-xr-x 5 10860 11400 4096 Nov 7 10:44 src |
Ensure that "CROSS_COMPILE" in the makefile is set to "NO"
Code Block | ||
---|---|---|
| ||
PLATFORM_ROOT = ../../../../../../ PROJECT_ROOT = ../ OUT_DIR = out CROSS_COMPILE := NO ifeq ($(CROSS_COMPILE), YES) ###config toolchain # TOOLCHAIN_PREFIX = $(PLATFORM_ROOT)/crossgcc/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- include $(PLATFORM_ROOT)/crossgcc/toolchain.config TOOLCHAIN_PREFIX=$(TOOLCHAIN_AARCH64_PATH)/bin/$(TOOLCHAIN_AARCH64_PREFIX)- CC = ${TOOLCHAIN_PREFIX}gcc CXX = ${TOOLCHAIN_PREFIX}g++ else CC = gcc CXX = g++ endif |
Makemake
Run snnf_demo, please refer to the How to run SNNF Demo.
Cross-compile SNNF Demo
...
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release# ls -al total 24 drwxr-xr-x 5 10860 11400 4096 Nov 7 11:30 . drwxr-xr-x 4 root root 4096 Nov 7 11:17 .. drwxr-xr-x 3 10860 11400 4096 Nov 7 10:52 bin drwxr-xr-x 13 10860 11400 4096 Nov 7 10:54 dependency_libraries -rw-r--r-- 1 10860 11400 1887 Nov 7 11:30 snnf_demo_env.sh drwxr-xr-x 5 10860 11400 4096 Nov 7 12:09 snnf_demo_src |
cd snnf_demo_src
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release/snnf_demo_src# ls -al total 80 drwxr-xr-x 5 10860 11400 4096 Nov 7 12:09 . drwxr-xr-x 5 10860 11400 4096 Nov 7 11:30 .. -rw-r--r-- 1 10860 11400 6770 Nov 7 11:00 main.cpp -rw-r--r-- 1 root root 40776 Nov 7 12:09 main.o -rw-r--r-- 1 10860 11400 4653 Nov 7 11:00 makefile drwxr-xr-x 2 10860 11400 4096 Nov 7 12:09 out drwxr-xr-x 5 10860 11400 4096 Nov 7 10:53 snnf_demo -rw-r--r-- 1 10860 11400 1803 Nov 7 11:00 snnf_demo_env.sh drwxr-xr-x 5 10860 11400 4096 Nov 7 10:44 src |
Ensure that "CROSS_COMPILE" in the makefile is set to "YES",and , and modify the toolchain path("TOOLCHAIN_PREFIX") in the makefile
Code Block | ||
---|---|---|
| ||
PLATFORM_ROOT = ../../../../../../ PROJECT_ROOT = ../ OUT_DIR = out CROSS_COMPILE := YES ifeq ($(CROSS_COMPILE), YES) ###config toolchain # TOOLCHAIN_PREFIX = $(PLATFORM_ROOT)/crossgcc/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- include $(PLATFORM_ROOT)/crossgcc/toolchain.config TOOLCHAIN_PREFIX=$(TOOLCHAIN_AARCH64_PATH)/bin/$(TOOLCHAIN_AARCH64_PREFIX)- CC = ${TOOLCHAIN_PREFIX}gcc CXX = ${TOOLCHAIN_PREFIX}g++ else CC = gcc CXX = g++ endif |
make
Copy the newly compiled snnf_demo program and the folder named "dependency_libraries" from the snnf_demo_delease folder to C3V Linux.
Code Block | ||
---|---|---|
| ||
/snnf_demo_release# cp snnf_demo_src/out/snnf_demo ==> <C3V Platform>/snnf_demo_release /snnf_demo_release# cp snnf_demo_env.sh ==> <C3V Platform>/snnf_demo_release /snnf_demo_release# cp dependency_libraries ==> <C3V Platform>/snnf_demo_release |
Run snnf_demo, please refer to the How to run SNNF Demo.
Setup the running environment
Copy the newly compiled snnf_demo program and the folder named "dependency_libraries" from the snnf_demo_release folder to C3V Linux.
Code Block | ||
---|---|---|
| ||
/snnf_demo_release# cp snnf_demo_src/out/snnf_demo ==> <C3V Platform>/snnf_demo_release /snnf_demo_release# cp snnf_demo_env.sh ==> <C3V Platform>/snnf_demo_release /snnf_demo_release# cp dependency_libraries ==> <C3V Platform>/snnf_demo_release |
...
The path of resource files:dependency_libraries/snnf_release/resource
Code Block | ||
---|---|---|
| ||
#cp dependency_libraries/snnf_release/resource/* ==> <C3V Platform>/etc/snnf/ |
...
Switch to the directory where the dependency_libraries are located, then setup set the environment variable.
Code Block | ||
---|---|---|
| ||
root@ubuntu:/snnf_demo_release/snnf_demo_src#cd ../
root@ubuntu:/snnf_demo_release/# ls -al
total 24
drwxr-xr-x 5 10860 11400 4096 Nov 7 11:30 .
drwxr-xr-x 4 root root 4096 Nov 7 11:17 ..
drwxr-xr-x 3 10860 11400 4096 Nov 7 10:52 bin
-rwxr-xr-x 1 10860 11400 675448 Nov 7 10:58 snnf_demo
drwxr-xr-x 13 10860 11400 4096 Nov 7 10:54 dependency_libraries
-rw-r--r-- 1 10860 11400 1887 Nov 7 11:30 snnf_demo_env.sh
drwxr-xr-x 5 10860 11400 4096 Nov 7 12:09 snnf_demo_src
root@ubuntu:/home/app/snnf_demo_release/#source snnf_demo_env.sh |
Turn off Display Manager Service (This step is only required for Ubuntu XFCE)
The status of the lightdm service enabled is as follows.
Code Block |
---|
sunplus@ubuntu:~$ sudo systemctl status lightdm |
...
Temporary stop
Code Block | ||
---|---|---|
| ||
sunplus@ubuntu:~$ sudo systemctl stop lightdm
sunplus@ubuntu:~$ sudo systemctl status lightdm |
...
Permanently Closed
Code Block | ||
---|---|---|
| ||
sunplus@ubuntu:~$ sudo systemctl disable lightdm
sunplus@ubuntu:~$ sudo systemctl daemon-reload
sunplus@ubuntu:~$ sudo systemctl status lightdm |
...
Before running, please ensure that the account you are logged into has root privileges. If you are logging in with a non-root account, please execute the following command before running the demonstration program.
Code Block | ||
---|---|---|
| ||
sunplus@ubuntu:/snnf_demo_release$ sudo -s
[sudo] password for sunplus:
root@ubuntu:/snnf_demo_release# |
...
Before running snnf_demo, please refer to Setup the running environment.
Run snnf_demo.
Code Block language bash root@ubuntu:/snnf_demo_release# ./snnf_demo -h Usage: ./snnf_demo [options] Options: -h, --help Print this help message and exit -v, --video ARG Specify the video file or device (default: /dev/video0, e.g., /dev/video40, /mnt/test.mp4) -f, --format ARG Specify the video capture format (default: YUYV, only YUYV, UYVY, YUY2 are supported) -s, --size ARG Specify the video capture size (default: 640x480, e.g., 1920x1080, 1280x720) -r, --framerate ARG Specify the video capture frame rate (default: 30)
Obtaining input data through the camera
Use default param
Code Block language bash root@ubuntu:/snnf_demo_release# ./snnf_demo
Set the video size/fps/YUV format by cmd.
Code Block language bash root@ubuntu:/snnf_demo_release# ./snnf_demo -v /dev/video40 -s 1280x720 -f UYVY -r 30
How to get the format supported by the camera.?
Code Block language bash root@ubuntu:/snnf_demo_release# v4l2-ctl --list-formats-ext -d /dev/video4040
Obtaining input data through the video file
Code Block language bash root@ubuntu:/snnf_demo_release# ./snnf_demo -v /etc/snnf/video/humanCount.mp4
See the demo's effects please refer to the SNNF Demo Introduction.