[Streamer] Basic framework, YAML parser, ppyoloe demo and video decoder demo (#863)

* support trt installed in sys dir

* streamer init

* link elements and run

* create source bin

* add config

* restruct dirs

* set property

* link elements

* integrate perf

* add bbox parser

* parse yaml to string, video decoder

* use try pull for decoder and nits

* streamer ppyoloe cpp

* update readme

* video decoder cpp dir

* add cn readme

* update readme

* cmake nits

* refactor perf measurement
This commit is contained in:
Wang Xinyu
2022-12-19 10:14:17 +08:00
committed by GitHub
parent 95beb2bbf6
commit 81eaeddbd0
35 changed files with 1635 additions and 13 deletions

View File

@@ -0,0 +1,30 @@
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROJECT(video_decoder C CXX)
CMAKE_MINIMUM_REQUIRED (VERSION 3.10)
option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.")
include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)
include_directories(${FASTDEPLOY_INCS})
set(FDSTREAMER_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/../../../src/)
include_directories(${FDSTREAMER_INCLUDE_DIR})
link_directories(${PROJECT_SOURCE_DIR}/../../../build/)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GSTAPP gstreamer-app-1.0 REQUIRED)
include_directories(${GSTAPP_INCLUDE_DIRS})
add_executable(video_decoder main.cc)
target_link_libraries(video_decoder fd_streamer ${FASTDEPLOY_LIBS})

View File

@@ -0,0 +1 @@
README_EN.md

View File

@@ -0,0 +1,20 @@
简体中文 | [English](README_EN.md)
# FastDeploy Streamer Video Decoder Example
## 编译和运行
1. 需要先FastDeploy Streamer, 请参考[README](../../../README.md)
2. 编译Example
```
mkdir build && cd build
cmake .. -DFASTDEPLOY_INSTALL_DIR=[PATH-OF-FASTDEPLOY-INSTALL-DIR]
make -j
```
3. 运行
```
cp ../streamer_cfg.yml .
./video_decoder
```

View File

@@ -0,0 +1,20 @@
English | [简体中文](README_CN.md)
# FastDeploy Streamer Video Decoder Example
## Build and Run
1. Build FastDeploy Streamer first, [README](../../../README.md)
2. Build Example
```
mkdir build && cd build
cmake .. -DFASTDEPLOY_INSTALL_DIR=[PATH-OF-FASTDEPLOY-INSTALL-DIR]
make -j
```
3. Run
```
cp ../streamer_cfg.yml .
./video_decoder
```

View File

@@ -0,0 +1,43 @@
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "fd_streamer.h"
#include "fastdeploy/utils/perf.h"
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
auto streamer = fastdeploy::streamer::FDStreamer();
streamer.Init("streamer_cfg.yml");
streamer.RunAsync();
int count = 0;
fastdeploy::FDTensor tensor;
fastdeploy::TimeCounter tc;
tc.Start();
while (1) {
bool ret = streamer.TryPullFrame(tensor);
if (!ret) {
if (streamer.Destroyed()) break;
std::this_thread::sleep_for(std::chrono::milliseconds(1));
continue;
}
count++;
tensor.PrintInfo();
cv::Mat mat(tensor.shape[0], tensor.shape[1], CV_8UC3, tensor.Data());
cv::imwrite("out/" + std::to_string(count) + ".jpg", mat);
}
std::cout << "Total number of frames: " << count << std::endl;
tc.End();
tc.PrintInfo();
return 0;
}

View File

@@ -0,0 +1,19 @@
app:
type: video_decoder
enable-perf-measurement: true
perf-measurement-interval-sec: 5
nvurisrcbin:
uri: file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_ride_bike.mov
gpu-id: 0
nvvideoconvert:
gpu-id: 0
capsfilter:
caps: video/x-raw,format=(string)BGR
appsink:
sync: true
max-buffers: 60
drop: false