机器视觉-EasyDL商品检测-标准版-Demo
机器视觉-EasyDL商品检测-标准版
功能:
EasyDL是百度大脑中的一个定制化训练和服务平台,EasyDL零售版是EasyDL针对零售场景推出的行业版,定制商品检测服务是EasyDL零售版的一项服务,专门用于训练货架合规性检查、自助结算台、无人零售货柜等场景下的定制化商品检测AI模型,训练出的模型将以API的形式为客户提供服务,API接口可以返回商品的名称和商品在图中的位置,适用于识别货架中的商品信息,商品计数,辅助货架商品陈列合规检查,如铺货率、陈列情况等。具体细节(包括操作步骤)请看相关API技术文档:
https://ai.baidu.com/docs#/EasyDL_Retail_Intro/top
下面是我写的Demo,目前平天上没提供相关Demo。一开始用PHP写的,后来为了兼容公司这边实际情况,改成了NODEJS了,开发过程中遇到了很多坑点,参数交互的时候,一定要细心。百度大脑后台对应的服务器有的支持Ajax跨域,有的不支持,这个是自己实际测出来的,这个要注意,还有就是我的这个Demo是本地通过请求获取token,然后在拿着token直接在本地访问百度的接口,把图片的base64编码扔了过去,实际情况可能不是这样的,比如图片的话你可能自己服务器也要存,这种情况请根据实际业务需求进行对应更改。切记不要暴露自己的 API KEY 和 Secret Key 。同时百度的EasyDL分两个模式,一个是定制版一个是标准版,我这次整理的是标准版的接口,标准版不涉及到自己训练数据。所以相对简单。同时标准版和定制版的Demo可以通用的。只是定制版本再加上自己去平台训练数据参数调整等一些额外的操作等。还有很多流程和细节,请直接看上面API文档链接。
server.js
var http = require("http");
var https = require('https');
var fs = require('fs');
var url = require('url');
function gettoken(response) { // 浏览器端发来get请求
var apikey = "XXX换成自己的"; //API Key
var secretkey = "XXXX换成自己的"; //Secret Key
var url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkey;
https.get(url,function(res){ //通过get方法获取对应地址中的页面信息
var chunks = [];
var size = 0;
res.on('data',function(chunk){ //监听事件 传输
chunks.push(chunk);
size += chunk.length;
});
res.on('end',function(){ //数据传输完
var data = Buffer.concat(chunks,size);
var html = data.toString();
var obj = JSON.parse(html);
var token = obj.access_token;
console.log(token);
response.write(token);
response.end();
});
});
}
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html"});//text/plain
var pathname = url.parse(request.url).pathname;
console.log(pathname);
if(pathname == "/token"){
console.log("request get token!");
gettoken(response);
}else{
fs.readFile(pathname.substr(1), function (err, data) {
if (err) {
console.log(err);
// HTTP 状态码: 404 : NOT FOUND
// Content Type: text/html
response.writeHead(404, {'Content-Type': 'text/html'});
}else{
// HTTP 状态码: 200 : OK
// Content Type: text/html
response.writeHead(200, {'Content-Type': 'text/html'});
// 响应文件内容
response.write(data.toString());
}
// 发送响应数据
response.end();
});
}
//response.write("Hello World");
//response.end();
}).listen(8888);
console.log("nodejs start listen 8888 port!");
console.log("http://127.0.0.1:8888/client.html");
client.html
<div style="width: 100%;height: 100%">
<div style="position:absolute;left:0;top:0px;">
<input accept="image/*" id="upload_file" type="file">
</div>
<div style="background-color: #5bc0de; position:absolute;width:48%;height:200px;left:1%;top:30px;">
<img src="" id="productimg" width="100%" height="100%" />
</div>
<div style="position:absolute;width:48%;height:200px;left:51%;top:30px;">
<textarea id="base64_output" style="height: 100%;width:100%"></textarea>
</div>
<div style="position:absolute;width:98%;height:400px;left:1%;top:250px;">
<textarea id="imgmessage" style="height: 100%;width:100%"></textarea>
</div>
</div>
<script>
document.getElementById("upload_file").onchange = function (e) {
var file = e.target.files[0];
$_("productimg").src=URL.createObjectURL(file);
gen_base64();
};
function $_(id) {
return document.getElementById(id);
}
function gen_base64() {
var file = $_('upload_file').files[0];
r = new FileReader(); //本地预览
r.onload = function(){
$_('base64_output').value = r.result;
var imgbase64 = r.result;
work(imgbase64);
}
r.readAsDataURL(file); //Base64
}
document.getElementById("upimage").onchange = function () {
gen_base64();
};
</script>
<script>
function work(imgbase64) {
var url = "./token";
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', url, true);
httpRequest.setRequestHeader("Content-type","application/json");
httpRequest.send();
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var token = httpRequest.responseText;//获取到json字符串,还需解析
//console.log(json);
//document.write(json);
getimgmessage(imgbase64,token);
}
};
}
function getimgmessage(imgbase64,token){
var index = imgbase64.indexOf(',');
imgbase64 = imgbase64.substring(index+1,imgbase64.length);
//document.write(imgbase64);
var obj = { "image": imgbase64};
var httpRequest = new XMLHttpRequest();
var url = "https://aip.baidubce.com/rpc/2.0/easydl/v1/retail/drink?access_token=" + token;
httpRequest.open('POST', url, true);
httpRequest.setRequestHeader("Content-type","application/json");
httpRequest.send(JSON.stringify(obj));
/**
* 获取数据后的处理程序
*/
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var json = httpRequest.responseText;
var analysisresults =unescape(json.replace(/\\u/g, '%u'));
//console.log(json);
//document.write(unescape(json.replace(/\\u/g, '%u')));
var analysisresultss = JSON.parse(analysisresults);
document.getElementById('imgmessage').value = dealstring(analysisresultss);
}
};
}
function dealstring(analysisresultss){
var string = "log_id:" + analysisresultss.log_id + "\n";
string = string + "results " + analysisresultss.results.length + "\n";
for(var index = 0 ;index <analysisresultss.results.length ;index ++){
var strtmp = "";
if(index < 10) strtmp = "000";
else if(index < 100)strtmp = "00";
else strtmp = "0";
string = string + strtmp + index + "." + JSON.stringify(analysisresultss.results[index]) + "\n";
}
return string;
}
</script>
运行结果:(NODE+Win7)


机器视觉-EasyDL商品检测-标准版-Demo的更多相关文章
- 酷睿彩票合买代购网站管理系统 v2016 - 源码下载 有合买功能 有免费版 标准版 高级版
源码介绍 免费版下载地址 电信 浙江腾佑 网鼎科技 正易网络下载 联通 网鼎联通 标准版联系QQ:1395239152 彩票合买代购网站管理系统公司独立开发,完全拥有软件自主知识产权.具有电脑We ...
- Windows 2003 Server 标准版启动问题解决(资源转贴)
维护的系统之一是部署在windows2003 Server标准版的服务器上,可能是由于某个应用问题,导致远程重启失败,害得我在机房呆了一早晨,可算是够折腾的.最后按照官方文档解决,刚放文档地址是:ht ...
- Rational AppScan 标准版可扩展性和二次开发能力简介
下载:IBM® Rational® AppScan 标准版 | Web 应用安全与 IBM Rational AppScan 工具包 获取免费的 Rational 软件工具包系列,下载更多的 R ...
- oracle 11g R2 标准版 64位linux安装
安装环境:Redhat es 5.5 64位 ,系统内存8G,swap 10G ,oracle 11G R2 标准版 一,Oracle 安装前的准备检查一下包,必须全部安装:binutils-2.17 ...
- 下载-MS SQL Server 2005(大全版)含开发人员版、企业版、标准版【转】
中文名称:微软SQL Server 2005 英文名称:MS SQL Server 2005资源类型:ISO版本:开发人员版.企业版.标准版发行时间:2006年制作发行:微软公司地区:大陆语言:普通话 ...
- SQL Server 2016 SP1 标准版等同企业版?!
上周微软发布了SQL Server的历史性公告:SQL Server 标准版的SP1提供你和企业版一样得功能.你不信的话?可以点击这里. 这改变了整个关系数据库市场,重重打击了Oracle.在今天的文 ...
- 五一干货来袭!开源Moon.Orm标准版发布!
标准版源代码下载: 链接:http://pan.baidu.com/s/1i3xj0f7 因五一早过(现在中旬了),解压码获取请到: http://www.cnblogs.com/humble/p/3 ...
- SQL Server 2008 标准版不支持Reporting Services的数据驱动订阅
今天开发同事找我,说为什么Reporting Services服务器的报表管理的订阅选项里面只有"新建订阅"选项, 没有"数据驱动订阅"选项,说实话,我也基本上 ...
- SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)
一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified) File Name: cn_sq ...
随机推荐
- phpMyAdmin Transformation 任意文件包含/远程代码执行漏洞
漏洞参考 https://yq.aliyun.com/articles/679633 国外提供了一个在线测试的靶场 默认密码 root toor https://www.vsplate.c ...
- java基础:数据类型拓展
public static void main(String[] args) { //单行注释 //输出hello,world! //System.out.println("hello,wo ...
- Memory Networks02 记忆网络经典论文
目录 1 Recurrent Entity Network Introduction 模型构建 Input Encoder Dynamic Memory Output Model 总结 2 hiera ...
- wireshark如何抓取分析https的加密报文
[问题概述] https流量基于ssl/tls加密,无法直接对报文进行分析. [解决方案] 方案1 -- 利用"中间人攻击"的代理方式抓包分析.整个方案过程比较简单,这里不赘述,大 ...
- Banner信息扫描
Banner信息扫描 Banner一般用于表示对用户的欢迎,但其中可能包含敏感信息.获取Banner也属于信息搜索的范畴.在渗透测试中,典型的4xx.5xx信息泄露就属于Banner泄露的一种.在Ba ...
- Elasticsearch 结构化搜索、keyword、Term查询
前言 Elasticsearch 中的结构化搜索,即面向数值.日期.时间.布尔等类型数据的搜索,这些数据类型格式精确,通常使用基于词项的term精确匹配或者prefix前缀匹配.本文还将新版本的&qu ...
- I - Tetrahedron HDU - 6814
题目链接:https://vjudge.net/problem/HDU-6814 题意:在[1,n]中随机取三个数a,b,c作为直角四面体的三条直角棱,求顶点d到ABC面的高的倒数平方的数学期望. 思 ...
- Jaeger Client Go 链路追踪|入门详解
目录 从何说起 Jaeger 部署 Jaeger 从示例了解 Jaeger Client Go 了解 trace.span tracer 配置 Sampler 配置 Reporter 配置 分布式系统 ...
- Android 之 ToolBar 踩坑笔记
写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...
- Web 前端 - 优雅地 Callback 转 Promise :aw
前言 当今 ES7 标准大行其道,使用 async + await 将异步逻辑同步书写已经普及,但是却有许多旧库或旧代码尚未完全 Promise 化,急需一个小工具去挖去这代码中藓疾. 设计和实现 由 ...