Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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 SNNF Demo Introduction.
If you want to compile the SNNF demo, please read this document carefully.

HW Environment

C3V_IO_BOARD_V1.1.png

Camera

The SNNF demo supports obtaining input data through a camera or a video file. The camera can be connected through MIPI or USB.

MIPI

Currently, the sensor we support for the MIPI interface is OV5640. The sensor needs to be connected to MIPI-RX4_2D on the platform, the MIPI Sensor interface as shown in the diagram above.

If you plan to use it, you need to make the following modifications before building the C3V image.

  1. modify the linux/kernel/arch/arm64/boot/dts/sunplus/sp7350-dm.dts,enable OV5640_IN4

@@ -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
  1. 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.

@@ -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.

root@ubuntu:/snnf_demo_release# echo 1 > /sys/module/videobuf2_dma_contig/parameters/remap

USB

USB Camera supports USB 2.0 and USB 3.0. If you want to use USB 3.0, Set the jump cap in the below figure to the OFF state.

C3V_IO_BOARD_V1.1_USB_JUMP.png

Display

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.

MIPI and HDMI displays cannot be used simultaneously. The specific switching method is as follows:

C3V_IO_BOARD_V1.1_DISPLAY_JUMP.png

Switch to MIPI

Set the jump cap in the above figure to the ON state and unplug the HDMI cable.

Switch to HDMI

Set the jump cap in the above figure to OFF, power off the Panel connected to MIPI, and plug in the HDMI cable.

Source code

Please get the SNNF Demo V1.0.0 release source code here.

Folder structure

snnf_demo_floder_1.pngsnnf_demo_floder_2.pngsnnf_demo_floder_3.png
  • 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 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 environment variable.

How to build SNNF Demo

Compile on C3V platform

  1. Copy the release folder to C3V Linux;

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
  1. cd snnf_demo_src

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
  1. Ensure that "CROSS_COMPILE" in the makefile is set to "NO"

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
  1. Make

  2. Run snnf_demo, please refer to How to run SNNF Demo.

Cross-compile SNNF Demo

  1. Copy the release folder to Cross-compile Linux;

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
  1. cd snnf_demo_src

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
  1. Ensure that "CROSS_COMPILE" in the makefile is set to "YES",and modify the toolchain path("TOOLCHAIN_PREFIX") in the makefile

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
  1. make

  2. Copy the newly compiled snnf_demo program and the folder named "dependency_libraries" from the snnf_demo_delease folder to C3V Linux.

/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
  1. Run snnf_demo, please refer to How to run SNNF Demo.

Setup the running environment

  1. Copy the newly compiled snnf_demo program and the folder named "dependency_libraries" from the snnf_demo_release folder to C3V Linux.

/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

Copy according to the following directory structure.

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 ..
-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

root@ubuntu:/snnf_demo_release# ls -al dependency_libraries/
total 52
drwxr-xr-x 13 10860 11400 4096 Nov  7 10:54 .
drwxr-xr-x  5 10860 11400 4096 Nov  7 11:30 ..
drwxr-xr-x  5 10860 11400 4096 Nov  7 10:41 demo_assist
drwxr-xr-x  4 10860 11400 4096 Nov  7 10:41 face_match
drwxr-xr-x  3 10860 11400 4096 Nov  7 10:41 ffmpeg-4.4.2-prebuilt
drwxr-xr-x  3 10860 11400 4096 Nov  7 10:41 freetype-2.12.1
drwxr-xr-x  4 10860 11400 4096 Nov  7 10:41 libdrm-2.4.100-prebuilt
drwxr-xr-x  3 10860 11400 4096 Nov  7 10:41 libpng-1.6.37
drwxr-xr-x  4 10860 11400 4096 Nov  7 10:41 lvgl-9.1.0-prebuilt
drwxr-xr-x  3 10860 11400 4096 Nov  7 10:41 opencv-4.9.0-prebuilt
drwxr-xr-x  8 10860 11400 4096 Nov  7 10:41 snnf_release
drwxr-xr-x  2 10860 11400 4096 Nov  7 10:41 vsi_lib
drwxr-xr-x  2 10860 11400 4096 Nov  7 10:41 yuvconvert
  1. Copy the resource files to C3V Linux.

The path of resource files:dependency_libraries/snnf_release/resource

#cp dependency_libraries/snnf_release/resource/* ==> <C3V Platform>/etc/snnf/
root@ubuntu:/snnf_demo_release# mkdir -p /etc/snnf
root@ubuntu:/snnf_demo_release# cp dependency_libraries/snnf_release/resource/* /etc/snnf -rf
root@ubuntu:/snnf_demo_release# ls -l /etc/snnf/
total 20
drwxr-xr-x 2 root root 4096 Nov  6 15:42 config.
drwxr-xr-x 2 root root 4096 Nov  6 15:42 font
drwxr-xr-x 2 root root 4096 Nov  6 15:43 image
drwxr-xr-x 2 root root 4096 Nov  6 15:44 model
drwxr-xr-x 2 root root 4096 Nov  6 15:44 video
  1. Setup environment variable(Just need to set it once)

Switch to the directory where the dependency_libraries are located, then setup environment variable.

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
  1. Turn off Display Manager Service (This step is only required for Ubuntu XFCE)

The status of lightdm service enabled is as follows

snnf_demo_lightdm_enabled.png
  • Temporary stop

sunplus@ubuntu:~$ sudo systemctl stop lightdm
snnf_demo_lightdm_stop.png
  • Permanently Closed

sunplus@ubuntu:~$ sudo systemctl disable lightdm
sunplus@ubuntu:~$ sudo systemctl daemon-reload
snnf_demo_lightdm_disabel_1.pngsnnf_demo_lightdm_disabel_2.png
  1. 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.

sunplus@ubuntu:/snnf_demo_release$ sudo -s
root@ubuntu:/snnf_demo_release#

How to run SNNF Demo

  1. Before running snnf_demo, please refer to Setup the running environment.

  2. Run snnf_demo.

    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

        root@ubuntu:/snnf_demo_release# ./snnf_demo
      • Set the video size/fps/YUV format by cmd.

        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.

        root@ubuntu:/snnf_demo_release# v4l2-ctl --list-formats-ext -d /dev/video40
        snnf_demo_camera_format.png
    • Obtaining input data through the video file

      root@ubuntu:/snnf_demo_release# ./snnf_demo -v /etc/snnf/video/humanCount.mp4
  3. See the demo's effects please refer to SNNF Demo Introduction.

  • No labels