./detection.sh -i /dev/video21 --show-fps
I modified the detection.sh file as follows to run the newly created yolov8n.hef.
--------------------------------------------------------------------------------------------------------------#!/bin/bash
set -e
function init_variables() {
print_help_if_needed $@
script_dir=$(dirname $(realpath "$0"))
source $script_dir/../../../../../scripts/misc/checks_before_run.sh
readonly POSTPROCESS_DIR="$TAPPAS_WORKSPACE/apps/h8/gstreamer/libs/post_processes/"
readonly RESOURCES_DIR="$TAPPAS_WORKSPACE/apps/h8/gstreamer/rockchip/detection/resources"
readonly DEFAULT_POSTPROCESS_SO="$POSTPROCESS_DIR/libyolo_hailortpp_post.so"
readonly DEFAULT_NETWORK_NAME="yolov8n"
readonly DEFAULT_BATCH_SIZE="1"
readonly DEFAULT_VIDEO_SOURCE="$RESOURCES_DIR/detection.mp4"
readonly DEFAULT_HEF_PATH="$RESOURCES_DIR/yolov8n.hef"
readonly DEFAULT_JSON_CONFIG_PATH="$RESOURCES_DIR/configs/yolov8.json"
video_sink_element=$([ "$XV_SUPPORTED" = "true" ] && echo "xvimagesink" || echo "ximagesink")
video_sink="fpsdisplaysink video-sink=$video_sink_element text-overlay=false"
postprocess_so=$DEFAULT_POSTPROCESS_SO
network_name=$DEFAULT_NETWORK_NAME
input_source=$DEFAULT_VIDEO_SOURCE
batch_size=$DEFAULT_BATCH_SIZE
hef_path=$DEFAULT_HEF_PATH
json_config_path=$DEFAULT_JSON_CONFIG_PATH
nms_score_threshold=0.3
nms_iou_threshold=0.45
thresholds_str="nms-score-threshold=${nms_score_threshold} nms-iou-threshold=${nms_iou_threshold}"
hailonet_props="output-format-type=HAILO_FORMAT_TYPE_FLOAT32"
print_gst_launch_only=false
additional_parameters=""
stats_element=""
debug_stats_export=""
sync_pipeline=false
device_id_prop=""
}
function print_help_if_needed() {
while test $# -gt 0; do
if [ "$1" = "--help" ] || [ "$1" == "-h" ]; then
print_usage
fi
shift
done
}
function print_usage() {
echo "Detection pipeline usage:"
echo ""
echo "Options:"
echo " -h --help Show this help"
echo " --network NETWORK Set network to use. choose from [yolov5, nanodet], default is yolov5"
echo " -i INPUT --input INPUT Set the input source (default $input_source)"
echo " --show-fps Print fps"
echo " --print-gst-launch Print the ready gst-launch command without running it"
echo " --print-device-stats Print the power and temperature measured"
exit 0
}
function parse_args() {
while test $# -gt 0; do
if [ $1 == "--network" ]; then
if [ $2 == "nanodet" ]; then
network_name="nanodet_repvgg"
hef_path="$RESOURCES_DIR/nanodet_repvgg.hef"
postprocess_so="$POSTPROCESS_DIR/libnanodet_post.so"
json_config_path="null"
thresholds_str=""
hailonet_props=""
elif [ $2 != "yolov8" ]; then
echo "Received invalid network: $2. See expected arguments below:"
print_usage
exit 1
fi
shift
elif [ "$1" = "--print-gst-launch" ]; then
print_gst_launch_only=true
elif [ "$1" = "--print-device-stats" ]; then
hailo_bus_id=$(hailortcli scan | awk '{ print $NF }' | tail -n 1)
device_id_prop="device_id=$hailo_bus_id"
stats_element="hailodevicestats $device_id_prop"
debug_stats_export="GST_DEBUG=hailodevicestats:5"
elif [ "$1" = "--show-fps" ]; then
echo "Printing fps"
additional_parameters="-v | grep -e hailo_display -e hailodevicestats"
elif [ "$1" = "--input" ] || [ "$1" == "-i" ]; then
input_source="$2"
shift
else
echo "Received invalid argument: $1. See expected arguments below:"
print_usage
exit 1
fi
shift
done
}
init_variables $@
parse_args $@
If the video provided is from a camera
if [[ $input_source =~ “/dev/video” ]]; then
source_element="v4l2src device=$input_source name=src_0 ! videoflip video-direction=horiz"
else
source_element="filesrc location=$input_source name=src_0 ! decodebin"
fi
PIPELINE="${debug_stats_export} gst-launch-1.0 ${stats_element} \
$source_element ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
videoscale qos=false n-threads=2 ! video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1 ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
videoconvert n-threads=2 qos=false ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
hailonet hef-path=$hef_path $device_id_prop batch-size=$batch_size $thresholds_str $hailonet_props ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
hailofilter function-name=$network_name so-path=$postprocess_so config-path=$json_config_path qos=false ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
hailooverlay qos=false ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
videoconvert n-threads=2 qos=false ! \
queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! \
$video_sink name=hailo_display sync=$sync_pipeline ${additional_parameters}"
echo “Running $network_name”
echo ${PIPELINE}
if [ “$print_gst_launch_only” = true ]; then
exit 0
fi
eval ${PIPELINE}
When you run the above code, an error occurs as follows.
pi@CM3588:~/Downloads/tappas_v3.30.0/apps/h8/gstreamer/rockchip/detection$ ./detection.sh -i /dev/video21 --show-fpsNo XV adaptors found, using ximagesink instead
Printing fps
Running yolov8n
gst-launch-1.0 v4l2src device=/dev/video21 name=src_0 ! videoflip video-direction=horiz ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! videoscale qos=false n-threads=2 ! video/x-raw, width=640, height=480, format=NV12, pixel-aspect-ratio=1/1 ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! videoconvert n-threads=2 qos=false ! video/x-raw, format=RGB ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! hailonet hef-path=/home/pi/Downloads/tappas_v3.30.0/apps/h8/gstreamer/rockchip/detection/resources/yolov8n.hef batch-size=1 nms-score-threshold=0.3 nms-iou-threshold=0.45 output-format-type=HAILO_FORMAT_TYPE_FLOAT32 ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! hailofilter function-name=yolov8n so-path=/home/pi/Downloads/tappas_v3.30.0/apps/h8/gstreamer/libs/post_processes//libyolo_hailortpp_post.so config-path=/home/pi/Downloads/tappas_v3.30.0/apps/h8/gstreamer/rockchip/detection/resources/configs/yolov8.json qos=false ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! hailooverlay qos=false ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! videoconvert n-threads=2 qos=false ! queue leaky=no max-size-buffers=30 max-size-bytes=0 max-size-time=0 ! fpsdisplaysink video-sink=ximagesink text-overlay=false name=hailo_display sync=false -v | grep -e hailo_display -e hailodevicestats
Please give me some advice and steps to take.
WARNING: erroneous pipeline: could not link queue2 to hailonet0