# cnstream-zdxf
**Repository Path**: QAiCode/cnstream-zdxf
## Basic Information
- **Project Name**: cnstream-zdxf
- **Description**: CNStream is a streaming framework with plug-ins. It is used to connect other modules, includes basic functionalities, libraries, and essential elements.
- **Primary Language**: C++
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/QAiCode
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2020-08-27
- **Last Updated**: 2023-08-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Cambricon CNStream #
CNStream is a streaming framework with plug-ins. It is used to connect other modules, includes basic functionalities, libraries,
and essential elements.
CNStream provides the following plug-in modules:
- source: Supports RTSP, video file, and images(H.264, H.265, and JPEG decoding.)
- inference: MLU-based inference accelerator for detection and classification.
- osd (On-screen display): Module for highlighting objects and text overlay.
- encode: Encodes on CPU.
- display: Display the video on screen.
- tracker: Multi-object tracking.
- rtsp_sink:Push RTSP stream to internet
- ipc: Make pipeline across process
## **Cambricon Dependencies** ##
CNStream depends on the CNCodec library and the CNRT library which are packed in Cambricon neuware package.
Therefore, the lastest Cambricon neuware package is required. If you do not have one, please feel free to contact with us.
Our mailbox: service@cambricon.com
### Install Cambricon neuware package ###
#### Ubuntu or Debian ####
```bash
dpkg -i neuware-mluxxx-x.x.x_Ubuntuxx.xx_amd64.deb
cd /var/neuware-mluxxx-x.x.x
dpkg -i cncodec-xxx.deb cnrt_xxx.deb
```
#### Centos ####
```bash
yum -y install neuware-mluxxx-x.x.x.el7.x86_64.rpm
cd /var/neuware-mluxxx-x.x.x
yum -y install cncodec-xxx.rpm cnrt-xxx.rpm
```
After that, Cambricon dependencies that CNStream needed are installed at path '/usr/loacl/neuware'.
Please make sure you must ``not`` install cnstream_xxx.deb or cnstream-xxx.rpm.
### Quick Start ###
This section introduces how to quickly build instructions on CNStream and how to develop your own applications based on CNStream. **We strongly recommend you execute ``pre_required_helper.sh`` to prepare for the environment.** If not, please follow the commands below.
#### **Required environments** ####
Before building instructions, you need to install the following software:
- OpenCV2.4.9+
- GFlags2.1.2
- GLog0.3.4
- Cmake2.8.7+
- SDL22.0.4+ // If build_display=ON
#### Ubuntu or Debian ####
If you are using Ubuntu or Debian, run the following commands:
```bash
OpenCV2.4.9+ >>>>>>>>> sudo apt-get install libopencv-dev
GFlags2.1.2 >>>>>>>>> sudo apt-get install libgflags-dev
GLog0.3.4 >>>>>>>>> sudo apt-get install libgoogle-glog-dev
Cmake2.8.7+ >>>>>>>>> sudo apt-get install cmake
SDL22.0.4+ >>>>>>>>> sudo apt-get install libsdl2-dev
```
#### Centos ####
If you are using Centos, run the following commands:
```bash
OpenCV2.4.9+ >>>>>>>>> sudo yum install opencv-devel.x86_64
GFlags2.1.2 >>>>>>>>> sudo yum install gflags.x86_64
GLog0.3.4 >>>>>>>>> sudo yum install glog.x86_64
Cmake2.8.7+ >>>>>>>>> sudo yum install cmake3.x86_64
SDL22.0.4+ >>>>>>>>> sudo yum install SDL2_gfx-devel.x86_64
```
## Build Instructions Using CMake ##
After finished prerequisites, you can build instructions with the following steps:
1. Run the following command to save a directory for saving the output.
```bash
mkdir build # Create a directory to save the output.
```
A Makefile is generated in the build folder.
2. Run the following command to generate a script for building instructions.
```bash
cd build
cmake ${CNSTREAM_DIR} # Generate native build scripts.
```
Cambricon CNStream provides a CMake script ([CMakeLists.txt](CMakeLists.txt)) to build instructions. You can download CMake for free from .
`${CNSTREAM_DIR}` specifies the directory where CNStream saves for.
| cmake option | range | default | description |
| -------------------- | ---------------------------------------- | ------- | --------------------------- |
| build_display | ON / OFF | ON | build display module |
| build_ipc | ON / OFF | ON | build ipc module |
| build_encode | ON / OFF | ON | build encode module |
| build_inference | ON / OFF | ON | build inference module |
| build_osd | ON / OFF | ON | build osd module |
| build_rtsp_sink | ON / OFF | ON | build rtsp_sink module |
| build_source | ON / OFF | ON | build source module |
| build_track | ON / OFF | ON | build track module |
| build_modules_contrib| ON / OFF | ON | build contributed modules |
| build_tests | ON / OFF | ON | build tests |
| build_samples | ON / OFF | ON | build samples |
| RELEASE | ON / OFF | ON | release / debug |
| WITH_FFMPEG | ON / OFF | ON | build with FFMPEG |
| WITH_OPENCV | ON / OFF | ON | build with OPENCV |
| WITH_CHINESE | ON / OFF | OFF | build with CHINESE |
| WITH_RTSP | ON / OFF | ON | build with RTSP |
3. If you want to build CNStream samples:
a. Run the following command:
```bash
cmake -Dbuild_samples=ON ${CNSTREAM_DIR}
```
b. If wanna cross compile, please follow command to:
```bash
cmake -DCMAKE_TOOLCHAIN_FILE=${CNSTREAM_DIR}/cmake/cross-compile.cmake ${CNSTREAM_DIR}
```
Note: you need to configure toolchain by yourself in cross-compile.cmake
4. Run the following command to build instructions:
```bash
make
```
5. If wanna install CNStream's head files and libraries to somewhere, please add ``` CMAKE_INSTALL_PREFIX ``` to cmake command as below:
```bash
cmake {CNSTREAM_DIR} -DCMAKE_INSTALL_PREFIX=/path/to/install
make
make install
```
## Samples ##
| Classification | Object Detection |
| :----------------------------------------------------------: | :-------------------------------------------: |
|
|
|
| Object Tracking | Secondary Classification |
| :-----------------------------------------: | :------------------------------------------------------: |
|
|
|
### **Demo Overview** ###
This demo shows how to detect objects using CNStream. It includes the following plug-in modules:
- **source**: Decodes video streams with MLU, such as local video files, RTMP stream, and RTSP stream.
- **detector**: Neural Network inference with MLU.
- **osd**: Draws inference results on images.
- **displayer**: Displays inference results on the screen.
In the run.sh script, ``detection_config.json`` is set as the configuration file. In this configuration file, resnet34_ssd.cambricon is the offline model used for inference, which means, the data will be fed to an SSD model after decoding. And the results will be shown on the screen.
In addition, see the comments in ``cnstream/samples/demo/run.sh`` for details.
Also there are several demos as located under ***classification***, ***detection***, ***track***, ***secondary***, ***rtsp*** etc.
### **Run samples** ###
To run the CNStream sample:
1. Follow the steps above to build instructions.
2. Run the demo using the list below:
```bash
cd ${CNSTREAM_DIR}/samples/demo
./run.sh
```
## Best Practices ##
### **How to create an application based on CNStream?** ###
You should find a sample from ``samples/example/example.cpp`` that helps developers easily understand how to develop an application based on CNStream pipeline.
### **How to change the input video file?** ##
Modify the `files.list_video` file, which is under the cnstream/samples/demo directory, to replace the video path. Each line represents one stream. It is recommended to use an absolute path or use a relative path relative to the executor path.
## Documentation ##
[CNStream Read-the-Docs](http://cnstream.readthedocs.io) or [Cambricon Forum Docs](http://forum.cambricon.com/index.php?m=content&c=index&a=lists&catid=85)
Check out the Examples page for tutorials on how to use CNStream. Concepts page for basic definitions
## Community forum ##
[Discuss](http://forum.cambricon.com/list-47-1.html) - General community discussion around CNStream