百度EasyDL导出SDK部署在树莓派上(香橙派也可),Python代码执行图片推理


前言

树莓派现在价格涨到天上去了。可以考虑用国产的板子来替代一下。香橙派的板子就很便宜,质量也可以。还是国产的。


一、百度EasyDL导出SDK文件后怎么操作?

百度EasyDL的教程参考官网,已经非常详细了。这里只讲一下把SDK部署到树莓派上或香橙派的步骤。下图是我的模型执行性能报告。

图片说明,树莓派或者香橙派,实时跑推理的话基本不可能,一张图片的预测时间RK3399开发板都达到500多毫秒,而且还是C++代码。

下载对应的SDK:
在这里插入图片描述
里面有2个文件夹:
在这里插入图片描述
进入CPP文件夹,里面有2个压缩文件:
在这里插入图片描述
如果你的开发板是树莓派的,选择armv7hf版本,如果是香橙派的,选择aarch64版本。然后将压缩包解压。
以树莓派为例,看下图。(我是在WIN10上讲解步骤,所以截图是WIN10界面,实际应该是在树莓派或者香橙派内执行)进入这个压缩包以后执行以下代码:
在这里插入图片描述

第一  cd src
第二  mkdir build && cd build
第三  cmake .. && make【这步报错可能没安装cmake,sudo apt-get install cmake安装一下】`
第四   ./easyedge_serving    ../../../RES【你的RES文件夹途径】 "1111-1111-1111-1111"【你的激活码】 0.0.0.0【你的开发板IP】  24401

这里有个问题, 第4行代码执行如果报错的话,需要核对一下执行的途径。因为目前没测试,不太记得在那个文件里执行,最多也就返回上一层的另外一个文件执行即可。

为什么这样操作?为什么用serving模式?

因为导出的SDK都是cpp文件,此时不好结合python和串口去做一些项目。但是如果把开发板当成主机做serving服务,则处于同一网络内的树莓派或者香橙派甚至PC都可以通过python代码调用主机的服务做图片识别


二、怎么使用python代码实现图片的推理?

python调用代码如下(示例):

import requests

with open('./1.jpg', 'rb') as f:
    img = f.read()
    result = requests.post('http://127.0.0.1【你的主机开发板IP】:24401/',params='threshold': 0.1},data=img).json()

代码很简单,只要打开你的图片即可实现图片的推理,如果视频要推理,可以把视频转成一帧一帧的图片进行推理,但推一张图片都要半秒钟,视频推理基本没得玩了。


总结

使用EasyDL的SDK是要付出代价的,就是产生模型需要付费。激活码需要申请,一个模型好像是300元,但是有3个月以上的试用时间,对于大部分人来说其实够了。
有没有从百度产生免费模型的方法呢?有,下次讲。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
在 Android 使用 EasyDL 结合 OpenCV 实现在图片查找目标物体,可以按照以下步骤进行: 1. 在 EasyDL 平台上创建一个物体检测模型,并部署EasyDL SDK 上。 2. 在 Android 项目添加 EasyDL SDK 和 OpenCV 的依赖项。在 build.gradle 文件添加以下依赖项: ``` dependencies { implementation 'com.baidu.ai:easydl-sdk:1.0.1' implementation 'org.opencv:opencv-android:3.4.3' } ``` 3. 在代码加载模型,并使用模型进行物体检测。以下是一个简单的示例代码: ``` // 加载 EasyDL 模型 EasyDLClient client = new EasyDLClient("<your model id>", "<your api key>"); // 加载 OpenCV 图像 Mat image = Imgcodecs.imread("<your image path>"); // 使用 EasyDL 模型进行物体检测 EasyDLResult result = client.predict(image); // 解析检测结果 List<Object> outputs = result.getOutputs(); for (Object output : outputs) { // 处理检测结果 } ``` 在上面的代码,`<your model id>` 和 `<your api key>` 是在 EasyDL 平台上创建的模型 ID 和 API Key,`<your image path>` 是需要进行物体检测的图片路径。 4. 处理检测结果,并在图片标记出目标物体的位置。以下是一个简单的示例代码: ``` // 获取检测结果 List<Object> outputs = result.getOutputs(); // 遍历检测结果 for (Object output : outputs) { if (output instanceof DetectionOutput) { DetectionOutput detectionOutput = (DetectionOutput) output; List<DetectionOutput.BBox> bBoxes = detectionOutput.getBboxes(); for (DetectionOutput.BBox bbox : bBoxes) { // 获取物体位置信息 int x1 = (int) (bbox.getX1() * image.width()); int y1 = (int) (bbox.getY1() * image.height()); int x2 = (int) (bbox.getX2() * image.width()); int y2 = (int) (bbox.getY2() * image.height()); // 在图片上标记出物体位置 Imgproc.rectangle(image, new Point(x1, y1), new Point(x2, y2), new Scalar(0, 0, 255), 2); } } } ``` 在上面的代码,我们首先判断输出是否是 DetectionOutput 类型,然后获取其的物体位置信息,并使用 OpenCV 的 rectangle 方法在图片上标记出物体的位置。 注意:在使用 OpenCV 的方法时,需要在代码加载 OpenCV 的本地库。具体可以在 build.gradle 文件添加以下配置: ``` android { // ... defaultConfig { // ... ndk { // ... abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } // ... } // 加载 OpenCV 的本地库 static { System.loadLibrary("opencv_java3"); } ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粒子白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值