文档简介:
简介
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 | 分类或检测的类别 |