Easyar php cloud,EasyAR WebAR 快速入门
二、开发步骤¶
因不同浏览器对摄像头处理的方式不尽相同,本文档示例使用 webrtc/adapter 类库,简化兼容问题处理。
本文档示例,以最简化方式说明开发WebAR的步骤,未详尽考虑Android、iOS等平台的兼容。
列出设备上所有的摄像头
navigator.mediaDevices.enumerateDevices()
.then((devices) => {
devices.find((device) => {
if (device.kind === 'videoinput') {
const option = document.createElement('option');
option.text = device.label || 'camera '+ (videoDeviceElement.length + 1).toString();
option.value = device.deviceId;
// 将摄像头id存储在select元素中,方便切换前、后置摄像头
videoDeviceElement.appendChild(option);
}
});
if (videoDeviceElement.length === 0) {
reject('没有摄像头');
} else {
resolve(true);
}
})
.catch((err) => {
reject(err);
});
打开摄像头
// 摄像头参数
// 更多参数请查看 https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints
// deviceId是select元素中储存的摄像头id
const constraints = {
audio: false,
video: {deviceId: {exact: deviceId}}
};
navigator.mediaDevices.getUserMedia(constraints)
.then((stream) => {
// videoElement为video元素,将摄像头视频流绑定到video上实时预览
videoElement.srcObject = stream;
videoElement.style.display = 'block';
videoElement.play();
resolve(true);
})
.catch((err) => {
reject(err);
});
截取摄像头图像
// canvasElement为canvas元素
// canvasContext为canvas的context 2d对象
// videoSetting为video元素的宽、高
canvasContext.drawImage(videoElement, 0, 0, videoSetting.width, videoSetting.height);
const image = canvasElement.toDataURL('image/jpeg', 0.5).split('base64,')[1];
将图像发送到服务器识别
图像识别有两种方式,区别如下图所示:
1). 方式一: 使用Token直接访问云识别服务器。
请在EasyAR官网获取,如下图所示:
Token会过期,支持动态刷新,获取刷新token接口参见 POST /token/
Token是写在JavaScript文件中的,适用于安全要求较低的环境中使用,完整示例,请查看 Token使用示例。
// 云图库的Client-end URL
const url = '您云图库的Client-end URL/search';
// 云图库的Cloud Token
const token = '';
const http = new XMLHttpRequest();
http.onload = () => {
try {
const msg = JSON.parse(http.responseText);
if (http.status === 200) {
if (msg.statusCode === 0) {
resolve(msg.result);
} else {
reject(msg);
}
} else {
reject(msg);
}
} catch (err) {
reject(err);
}
};
http.onerror = (err) => {
reject(err);
};
// 发送到云图库服务器
http.open('POST', url);
http.setRequestHeader('Content-Type', 'application/json;Charset=UTF-8');
// 将Cloud Token写在请求头中
http.setRequestHeader('Authorization', token);
// image为截取的摄像头图片数据,如:{image: '/9j/4AAQSkZJRgA...'}
http.send(JSON.stringify(image));
2). 方式二,使用Cloud Key与Cloud Secret,将图像数据发送到你的服务器,并在服务器上将图像及云识别相关参数签名后,再发送到云识别服务器。
请在EasyAR官网获取,如下图所示:
可以使用jQuery等类库,将上一步的image发送到服务器端识别。
服务器端处理,本文档以PHP示例,Java、C#等示例,请查看这里 。
// 云图库配置信息
define('CLOUDKEY', '');
define('CLOUDSECRET', '');
define('CLOUDURL', 'http:///search');
// 获取浏览器发送的图片信息
$image = '';
$data = @file_get_contents('php://input');
if ($data) {
$obj = json_decode($data);
$image = $obj->image;
}
// 将图片信息与云图库信息签名
$params = [
// Unix时间戳(毫秒)
'timestamp' => time() * 1000,
'appKey' => CLOUDKEY,
'image' => $image,
];
// 使用字典顺序将key排序后,将所有的key与value拼接,最后拼接上CLOUDSECRET,然后使用sha256加密
// 参数签名方法,请参考“EasyAR CRS文档”。
$params['signature'] = getSign($params, CLOUDSECRET);
// 发送到云识别服务器
$str = httpPost(CLOUDURL, json_encode($params));
// 检测返回结果
// 如果statusCode为0,则表示识别成功
$obj = json_decode($str);
if ($obj->statusCode != 0) {
// 识别失败或未识别到目标
} else {
// 识别成功
// 识别的结果为$obj->result->target
}
检测识别结果
如果未识别到内容,则继续识别,否则停止识别,可将识别的结果,如targetId, meta等信息取出处理。
完整示例
Easyar php cloud,EasyAR WebAR 快速入门相关推荐
- eclipse theia_如何在Ubuntu 18.04上设置Eclipse Theia Cloud IDE平台[快速入门]
eclipse theia 介绍 (Introduction) Eclipse Theia is an extensible cloud IDE running on a remote server ...
- spring cloud入门_Spring Boot 2.x基础教程:快速入门
简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...
- ibm cloud怎么使用_使用VueJS,FeathersJS和GraphQL快速入门IBM Cloud
ibm cloud怎么使用 by Thomas Reinecke 由托马斯·雷内克(Thomas Reinecke) 使用VueJS,FeathersJS和GraphQL快速入门IBM Cloud ( ...
- 使用Cloud DB构建APP 快速入门 - Android篇
概述 此示例应用演示了如何快速的使用Cloud DB构建简单的图书管理服务.通过快速入门和示例应用,您将会了解到如下信息: 如何使用Cloud DB进行应用开发. 应用数据如何写入到Cloud DB. ...
- dataflow_Java中的Cloud Dataflow快速入门
dataflow 在你开始之前 选择或创建一个Cloud Platform Console项目. 转到项目页面 为您的项目启用结算. 启用帐单 启用Cloud Dataflow,Compute Eng ...
- Spring Cloud Spring Boot mybatis分布式微服务云架构(一)快速入门
2019独角兽企业重金招聘Python工程师标准>>> 快速入门 本章主要目标完成Spring Boot基础项目的构建,并且实现一个简单的Http请求处理,通过这个例子对Spring ...
- Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...
- springcloud项目打包_SpringCloud 快速入门
前言 最近入职了新公司,主要负责Java后端开发工作.目前正在开展一个全新的业务,技术选型为SpringCloud全家桶,项目的骨架由我负责搭建.由于前几家公司的微服务框架都是使用Dubbo + Sp ...
- SpringBoot系列: RestTemplate 快速入门
==================================== 相关的文章 ==================================== SpringBoot系列: 与Sprin ...
- Spring Boot 2.x基础教程:快速入门
点击蓝色"程序猿DD"关注我哟 来源:http://t./ <Star最多的Spring Boot教程继续更新了> 牛皮吹过了! Git仓库和博客专题页也改版完成! 是 ...
最新文章
- Spring Boot Web 开发相关总结
- 漫谈时序设计(3)走进时序约束的大门!
- Hibernate 集合映射
- SAP 既是供应商,又是客户-互清(清账 F110中使用)
- 纯java生成excel
- 计算机配置里 无 管理模板,组策略里打开后没有管理模板
- python 正则表达式判断字符串是否为回文_JS使用栈判断给定字符串是否是回文算法示例...
- Spring Boot笔记-get请求发送json数据(方便前端vue解析)
- GitHub 上最受欢迎的 5 大 Java 项目
- 破解StarUML4.1.6
- cocos2dx-lua 骨骼动画spine使用心得(cocos2dx版本 3.17 spine版本3.6.53)
- 破解版的ABBYY FineReader OCR文字识别软件,真的好用吗?
- [已解决]关于python无法显示中文的问题:SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no enc
- oracle 执行计划中出现 merge join cartesian
- 会议记录管理系统(4) - 会议记录添加模块
- 【opencv】动态背景下运动目标检测 SURF配准差分
- NoSQL从小白到码神 火推08
- 编译原理 最新版 (龙书) 简介and sources
- 教育培训python
- PHP+Mysql制作一个学生成绩查询模块
热门文章
- kali扫描内网ip_kali 局域网嗅探
- 第五章、 Linux 常用网络指令
- 堪称神器的办公工具,国产精品福昕PDF编辑器上榜
- 微pe添加网络组件_(已解决)干掉peset后如何启动PE的网络组件?
- flash 加载外部flash怎么卸载干净
- 身份证扫描件用手机怎么弄?手把手教你生成电子身份证
- HTML背景图片的设置
- 淘宝店铺层级作用 店铺层级低有哪些影响
- 基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入
- python标准库math中用来计算平方根的函数_Python程序设计试题(卷)库