EAGLEEYE图像应用开发框架针对于快速将图像算法推向落地而设计。依靠统一通用的模块接口定义和数据流管线架构设计,极度简化团队协同开发。
- 异步视频流处理
- 异步多模型协同
- 参数快速可视化调试
TODO UI可视化,参数调节控件自动生成,管线结构自动生成
编译EAGLEEYE核心库,支持android,linux x86-64,和linux arm64
# 编译android版本库
bash android_build.sh
# 编译linux x86-64版本库
bash linux_x86_64_build.sh
# 编译linux arm64版本库
bash linux_arm64_v8a_build.sh
注意:对于android版本,需要提前安装Android NDK,并创立 ANDROID_NDK_HOME 环境变量
安装脚手架
cd scripts
pip3 install -r requirements.txt
python3 setup.py install
eagleeye-cli project --project=PLUGIN_NAME \\ 定义要生成的插件名字
--version=1.0.0.0 \\ 定义插件版本
--signature=xxxxx \\ 定义插件签名(目前未启用)
--build_type=Release \\ 定义编译版本
--abi=arm64-v8a \\ 定义abi
--eagleeye=EAGLEEYE_PATH \\ 定义eagleeye路径
运行后将生成模板工程。如果您使用的是VSCODE编辑器,那么脚手架将生成工程配置信息。
工程目录结构如下
PLUGIN_NAME
- .vscode
- c_cpp_properties.json
- cmake-kits.json
- settings.json
- tasks.json
- PLUGIN_NAME_plugin.h // 插件头文件
- PLUGIN_NAME_plugin.cpp // 插件源文件
- PLUGIN_NAME_demo.cpp // 可执行程序,用于测试插件
- CMakeLists.txt
- build.sh // 构建&编译插件和可执行程序,并安装
- run.sh // 运行可执行程序
- package // 插件包(编译后,将把生成的插件.so放置于此处)
- resource
- config.json
xxx.so
实现c=a+b功能,在PLUGIN_NAME_plugin.cpp文件中
#include "eagleeye/processnode/Placeholder.h"
#include "eagleeye/processnode/Add.h"
#include "eagleeye/framework/pipeline/SignalFactory.h"
namespace eagleeye{
// 注册算法管线
EAGLEEYE_PIPELINE_REGISTER(PLUGIN_NAME, 1.0.0.0, xxxxx);
// 初始换算法管线
EAGLEEYE_BEGIN_PIPELINE_INITIALIZE(PLUGIN_NAME)
// 第一步:建立占位符节点
Placeholder<ImageSignal<float>>* placeholder_a =
new Placeholder<ImageSignal<float>>();
Placeholder<ImageSignal<float>>* placeholder_b =
new Placeholder<ImageSignal<float>>();
// 第二步:建立加操作节点
Add<ImageSignal<float>,ImageSignal<float>>* add =
new Add<ImageSignal<float>,ImageSignal<float>>();
// 第三步:将节点加入管线
PLUGIN_NAME->add(placeholder_a,"placeholder_a");
PLUGIN_NAME->add(placeholder_b,"placeholder_b");
PLUGIN_NAME->add(add,"add");
// 第四步:建立节点间的关系(a->c,b->c)
// 实现 c=a+b
PLUGIN_NAME->bind("placeholder_a",0,"add",0);
PLUGIN_NAME->bind("placeholder_b",0,"add",1);
EAGLEEYE_END_PIPELINE_INITIALIZE
在PLUGIN_NAME_demo.cpp文件中
// 1.step initialize PLUGIN_NAME module
const char *config_folder = NULL; // PLUGIN_NAME module configure folder
eagleeye_PLUGIN_NAME_initialize(config_folder);
// 2.step set input of pipeline
float *a_data = (float*)malloc(sizeof(float)*10*10);
for(int i=0; i<10*10; ++i){
a_data[i] = 1.0f;
}
int a_data_size[] = {10, 10, 1};
eagleeye_PLUGIN_NAME_set_input("placeholder_a/0", (void*)a_data, a_data_size, 3, 0, 6);
float *b_data = (float*)malloc(sizeof(float)*10*10);
for(int i=0; i<10*10; ++i){
b_data[i] = 2.0f;
}
int b_data_size[] = {10, 10, 1};
eagleeye_PLUGIN_NAME_set_input("placeholder_b/0", (void*)b_data, b_data_size, 3, 0, 6);
// 3.step run pipeline
eagleeye_PLUGIN_NAME_run();
// 4.step get output from pipeline
void *out_data;
int out_data_size[3];
int out_data_dims = 3;
int out_data_type = 6;
eagleeye_PLUGIN_NAME_get_output("add/0", out_data, out_data_size, out_data_dims,out_data_type);
float* out_data_float = (float*)out_data;
// 5.step release PLUGIN_NAME module
eagleeye_PLUGIN_NAME_release();
- VSCODE开发环境
- 按下SHIFT + COMMAND + P,选择CMAKE: Configure。 如果提示Select a kit for ...,则选择Android Clang。然后继续进行CMAKE: Configure。
- 按下SHIFT + COMMAND + P,选择CMAKE: Build。
- 控制台 运行 bash ./build.sh
运行前,确保手机已经连接,并开启USB调试状态
- VSCODE开发环境
- 按下SHIFT + COMMAND + P,选择Tasks: Run Task。
- 在弹出的任务列表中,选择 PLUGIN_NAME run,便可执行。
- 控制台 运行 bash ./run.sh
项目文件夹,由运行脚本自动生成,位于 /data/local/tmp/PLUGIN_NAME 所有依赖库和可执行程序均自动放置于此文件夹下。