EasyDL图像Windows-x86-加速版SDK集成快速开始
更新时间:2020-11-28
简介
Windows CPU加速版SDK是适用于EasyDL图像模型快速部署的工具包。SDK中包含了EasyDL训练的模型资源文件、SDK和demo文件。
测试前的准备
-
Windows x86的硬件及开发环境
- 详情参考下方文档
-
EasyDL平台的Windows x86 加速版SDK
- 以图像分类为例,前往操作台训练模型后,选择发布为Windows x86的通用设备端SDK并勾选加速版,发布成功后即可从平台下载
-
用于激活通用设备端加速版SDK的序列号
- 前往控制台申请用于激活通用设备端SDK的序列号,注意选择加速版序列号
- 首次使用SDK或者更换序列号、更换设备时,需要联网激活。激活成功之后,有效期内可离线使用
安装依赖
在使用SDK之前,首先要确认自己的硬件类型和相应的依赖库安装是否已经符合要求。
硬件要求:
- Intel Xeon with AVX2 and AVX512
- Intel Core Processors with AVX2
- Intel Atom Processors with SSE
软件要求:
- 64位 Windows 10
- .NET Framework 4.5
- Visual C++ Redistributable Packages for Visual Studio 2013
- Visual C++ Redistributable Packages for Visual Studio 2015
- Openvino 2020.1
其他要求:
- 第一次使用SDK请确保联网
SDK结构
获取到的SDK解压后的目录结构是:
其中:
- bootstrap是SDK的入口脚本。
- data/model文件夹下是EasyDL训练得到的模型资源文件。
- tools文件夹下提供的是模型更新工具,用在迭代训练模型后,直接拉取新训练的模型,而不用重新下载SDK。
运行demo
打开EasyEdge.exe,输入Serial Num 点击"启动服务",等待数秒即可启动成功,本地服务默认运行在
http://127.0.0.1:24401/
服务运行成功,此时可直接在浏览器中输入http://127.0.0.1:24401
,在h5中测试模型效果。
Http服务集成
服务运行成功后,除网页直接访问外,也可以通过http请求的方式执行模型的预测并获取预测结果。
图像服务调用说明
Python 使用示例代码如下
import requests
with open('./1.jpg', 'rb') as f:
img = f.read()
## params 为GET参数 data 为POST Body
result = requests.post('http://127.0.0.1:24401/', params={'threshold': 0.1},
data=img).json()
C# 使用示例代码如下
FileStream fs = new FileStream("./img.jpg", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] img = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
string url = "http://127.0.0.1:8402?threshold=0.1";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
Stream stream = request.GetRequestStream();
stream.Write(img, 0, img.Length);
stream.Close();
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
Console.WriteLine(sr.ReadToEnd());
sr.Close();
response.Close();
C++ 使用示例代码如下,需要安装curl
#include <sys/stat.h>
#include <curl/curl.h>
int main(int argc, char *argv[]) {
const char *post_data_filename = "./img.jpg";
FILE *fp = NULL;
struct stat stbuf = { 0, };
fp = fopen(post_data_filename, "rb");
if (!fp) {
fprintf(stderr, "Error: failed to open file \"%s\"\n", post_data_filename);
return -1;
}
if (fstat(fileno(fp), &stbuf) || !S_ISREG(stbuf.st_mode)) {
fprintf(stderr, "Error: unknown file size \"%s\"\n", post_data_filename);
return -1;
}
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl != NULL) {
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:24401?threshold=0.1");
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,(curl_off_t)stbuf.st_size);
curl_easy_setopt(curl, CURLOPT_READDATA, (void *)fp);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
fclose(fp);
return 0;
}
请求参数
字段 | 类型 | 取值 | 说明 |
---|---|---|---|
threshold | float | 0 ~ 1 | 置信度阈值 |
HTTP POST Body直接发送图片二进制。
返回参数
字段 | 类型 | 取值 | 说明 |
---|---|---|---|
confidence | float | 0~1 | 分类或检测的置信度 |
label | string | 分类或检测的类别 | |
index | number | 分类或检测的类别 | |
x1, y1 | float | 0~1 | 物体检测,矩形的左上角坐标 (相对长宽的比例值) |
x2, y2 | float | 0~1 | 物体检测,矩形的右下角坐标(相对长宽的比例值) |
关于矩形坐标
x1 * 图片宽度 = 检测框的左上角的横坐标
y1 * 图片高度 = 检测框的左上角的纵坐标
x2 * 图片宽度 = 检测框的右下角的横坐标
y2 * 图片高度 = 检测框的右下角的纵坐标
图像分割
返回结果格式参考API调用文档 代码参考 https://github.com/Baidu-AIP/EasyDL-Segmentation-Demo
声音服务调用说明
Python 使用示例代码如下
import requests
with open('./1.mp3', 'rb') as f:
audio = f.read()
## params 为GET参数 data 为POST Body
result = requests.post('http://127.0.0.1:24401/', params={'threshold': 0.1},
data=audio).json()
C# 使用示例代码如下
FileStream fs = new FileStream("./audio.mp3", FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] audio = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
string url = "http://127.0.0.1:8402?threshold=0.1";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
Stream stream = request.GetRequestStream();
stream.Write(audio, 0, audio.Length);
stream.Close();
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
Console.WriteLine(sr.ReadToEnd());
sr.Close();
response.Close();
C++ 使用示例代码如下,需要安装curl
#include <sys/stat.h>
#include <curl/curl.h>
int main(int argc, char *argv[]) {
const char *post_data_filename = "./audio.mp3";
FILE *fp = NULL;
struct stat stbuf = { 0, };
fp = fopen(post_data_filename, "rb");
if (!fp) {
fprintf(stderr, "Error: failed to open file \"%s\"\n", post_data_filename);
return -1;
}
if (fstat(fileno(fp), &stbuf) || !S_ISREG(stbuf.st_mode)) {
fprintf(stderr, "Error: unknown file size \"%s\"\n", post_data_filename);
return -1;
}
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl != NULL) {
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:24401?threshold=0.1");
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,(curl_off_t)stbuf.st_size);
curl_easy_setopt(curl, CURLOPT_READDATA, (void *)fp);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
fclose(fp);
return 0;
}
请求参数
字段 | 类型 | 取值 | 说明 |
---|---|---|---|
threshold | float | 0 ~ 1 | 置信度阈值 |
HTTP POST Body直接发送声音二进制。
返回参数
字段 | 类型 | 取值 | 说明 |
---|---|---|---|
confidence | float | 0~1 | 分类或检测的置信度 |
label | string | 分类或检测的类别 | |
index | number | 分类或检测的类别 |