[EN](README.md)|CN
# Cambricon® Easy Development Kit
EasyDK(Cambricon® Neuware Easy Development Kit)提供了一套面向
MLU(Machine Learning Unit,寒武纪机器学习单元)设备的高级别的接口(C++11标准),
用于面向MLU平台(MLU270,MLU220)快速开发和部署深度学习应用。
EasyDK共包含如下6个模块:
- Device: 提供MLU设备上下文及内存等相关操作
- EasyCodec: 提供支持视频与图片的MLU硬件编解码功能
- EasyInfer: 提供离线模型推理相关功能
- EasyBang: 提供简易调用Bang算子的接口,目前支持的算子有ResizeConvertCrop和ResizeYuv
- EasyTrack: 提供目标追踪的功能
- cxxutil: 其他模块用到的部分cpp实现
![modules](docs/source/images/software_stack.png)
## 快速入门 ##
本节将简单介绍如何从零开始构建EasyDK,并运行示例代码完成简单的深度学习任务。
### 配置要求 ###
寒武纪EasyDK仅支持在寒武纪MLU270和MLU220平台上运行。
#### **构建和运行环境依赖** ####
构建和运行EasyDK有如下依赖:
- CMake 2.8.7+
- GCC 4.8.5+
- GLog 0.3.4
- Cambricon NEUWARE
测试程序和示例有额外的依赖:
- OpenCV 2.4.9+
- GFlags 2.1.2
- FFmpeg 2.8 3.4 4.2
#### Ubuntu or Debian ####
如果您在使用Ubuntu或Debian,可以运行如下命令安装依赖:
```bash
sudo apt install libgoogle-glog-dev
# samples dependencies
sudo apt install libgflags-dev libopencv-dev
```
#### CentOS ####
如果您在使用CentOS,可以运行如下命令安装依赖:
```bash
sudo yum install glog
# samples dependencies
sudo yum install gflags opencv-devel
```
### 编译项目 ###
Easydk仅支持源码编译的方式使用,按如下步骤编译Easydk (`${EASYDK_DIR}` 代表easydk源码目录):
1. 创建编译文件夹存储编译结果。
```bash
cd ${EASYDK_DIR}
mkdir build # Create a directory to save the output.
```
2. 运行CMake配置编译选项,并生成编译指令,该命令将会在build目录下生成Makefile文件。
```bash
cd build
cmake ${EASYDK_DIR} # Generate native build scripts.
```
Cambricon EasyDK提供了一个CMakeLists.txt描述编译流程,您可以从 http://www.cmake.org/ 免费下载和使用cmake。
| cmake 选项 | 范围 | 默认值 | 描述 |
| ------------------ | --------------- | ------- | ------------------------ |
| BUILD_SAMPLES | ON / OFF | OFF | 编译samples |
| BUILD_TESTS | ON / OFF | OFF | 编译tests |
| WITH_CODEC | ON / OFF | ON | 编译EasyCodec |
| WITH_INFER | ON / OFF | ON | 编译EasyInfer |
| WITH_TRACKER | ON / OFF | ON | 编译EasyTracker |
| WITH_BANG | ON / OFF | ON | 编译EasyBang |
| WITH_INFER_SERVER | ON / OFF | ON | 编译infer-server |
| WITH_TURBOJPEG | ON / OFF | OFF | 编译turbo-jpeg |
| ENABLE_KCF | ON / OFF | OFF | Easytrack支持KCF |
| SANITIZE_MEMORY | ON / OFF | OFF | 检查内存 |
| SANITIZE_ADDRESS | ON / OFF | OFF | 检查地址 |
| SANITIZE_THREAD | ON / OFF | OFF | 检查多线程 |
| SANITIZE_UNDEFINED | ON / OFF | OFF | 检查未定义行为 |
示例:
```bash
cd build
# build with samples and tests
cmake ${EASYDK_DIR} \
-DBUILD_SAMPLES=ON \
-DBUILD_TESTS=ON
```
3. 运行编译指令。
```bash
make
```
编译后的库文件存放在 `${EASYDK_DIR}/lib` ,头文件在 `${EASYDK_DIR/include}`