需求

混合App开发,原生壳子+webApp,在web部分调用原生摄像头功能并且在网页指定区域显示摄像头内容,同时可以手动拍照并进行人脸识别,将识别结果显示在网页上。

技术栈

vue、Html5、video标签、Android、IOS、百度AI

分析

1、使用navigator.mediaDevices.getUserMedia调用系统原生摄像头功能
2、video标签显示摄像头内容
3、canvas标签获取图片
4、将图像上传服务器,通过百度AI识别图片
5、web显示识别结果

核心代码

1、调用系统原生摄像头功能并使用video标签显示

 html:<videoid="webcam":style="videoStyle":width="videoWidth":height="videoHeight"looppreload></video>
JavaScript:initVideo() {let that = this;this.video = document.getElementById("webcam");setTimeout(() => {if (navigator.mediaDevices.getUserMedia ||navigator.getUserMedia ||navigator.webkitGetUserMedia ||navigator.mozGetUserMedia) {//调用用户媒体设备, 访问摄像头this.getUserMedia({video: {width: {ideal: that.videoWidth,max: that.videoWidth},height: {ideal: that.videoHeight,max: that.videoHeight},facingMode: "user",    //前置摄像头frameRate: {ideal: 30,min: 10}}},this.videoSuccess,this.videoError);} else {this.$toast.center("摄像头打开失败,请检查权限设置!");}}, 300);},getUserMedia(constraints, success, error) {if (navigator.mediaDevices.getUserMedia) {//最新的标准APInavigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);} else if (navigator.webkitGetUserMedia) {//webkit核心浏览器navigator.webkitGetUserMedia(constraints, success, error);} else if (navigator.mozGetUserMedia) {//firfox浏览器navigator.mozGetUserMedia(constraints, success, error);} else if (navigator.getUserMedia) {//旧版APInavigator.getUserMedia(constraints, success, error);}},videoSuccess(stream) {this.mediaStreamTrack = stream;this.video.srcObject = stream;this.video.play();},videoError(error) {console.error(error);this.$toast.center("摄像头打开失败,请检查权限设置!");},

2、canvas获取摄像头图片

JavaScript:this.canvas = document.createElement("canvas");....let context = this.canvas.getContext("2d");context.drawImage(this.video, 0, 0, this.videoWidth, this.videoHeight);this.imgSrc = this.canvas.toDataURL("image/png");

3、调用百度AI识别图片

JavaScript:let that = this;let base64Data = this.canvas.toDataURL();let blob = this.dataURItoBlob(base64Data);           //var file = new FormData();file.append("file", blob);file.append("key", that.uuid);util.ajax.post("XXXXXXXXXX", file, {headers: {"Content-Type": "multipart/form-data"}}).then(function(response) {if ((response.status = 200)) {.....识别成功,显示结果} else {......识别失败}}).catch(function(error) {console.error(error);});//base64转换为BlobdataURItoBlob(base64Data) {var byteString;if (base64Data.split(",")[0].indexOf("base64") >= 0)byteString = atob(base64Data.split(",")[1]);else byteString = unescape(base64Data.split(",")[1]);var mimeString = base64Data.split(",")[0].split(":")[1].split(";")[0];var ia = new Uint8Array(byteString.length);for (var i = 0; i < byteString.length; i++) {ia[i] = byteString.charCodeAt(i);}return new Blob([ia], { type: mimeString });},

手机适配

1、由于Android6之后,Android的权限管理出现变化,Android原生的壳子,需要做如下处理:

myWebView.setWebChromeClient(new WebChromeClient() {@TargetApi(Build.VERSION_CODES.LOLLIPOP)@Overridepublic void onPermissionRequest(final PermissionRequest request) {request.grant(request.getResources());}
});

2、IOS系统,Safari11之后可用
3、OverconstrainedError错误,部分Android手机会报OverconstrainedError错误,原因是摄像头参数设置不合理,找不到指定设置。

我的视频课

下面是我录制的一些视频课,欢迎大家围观~

《Android HyBrid App开发实战》

本课程为Android HyBrid App开发实战课程,由浅入深,从三种App的历史和特点开始,介绍了Android WebView的使用、Java和JS交互的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最后通过一个网上商城的实战综合全部内容,让同学们掌握并深入理解Android HyBrid App开发。

《彻底搞定JVM》

JVM是Java中重要的也是较难理解的内容;
面试者对JVM的了解程度某种程度上反映了面试者技术深度,所以JVM也是面试时经常考察的内容;
本课程从JVM运行流程、数据运行时区域组成部分、类加载机制、垃圾回收机制、内存模型、常见面试题讲解等角度出发,帮你彻底搞定JVM,拿下心仪Offer;

《Android性能优化参考》

本课程包含了Android中的App启动优化、UI优化、内存优化、图片优化、耗电量等常见的性能优化场景,通过学习此课程,你将对整个Android性能优化体系有清晰的认识。

性能优化作为Android高级开发的必备技能,也是大厂面试必考的题目,是体现一个人技术深度最好的试金石。

《面试之排序算法》

排序算法是我们面试被问到最多的基础算法,本课程详细介绍了七种排序算法,包括插入排序、选择排序、冒泡排序、谢尔排序、快速排序、堆积排序和二路并归排序。每种算法都详细介绍了核心思想、详细步骤、时间复杂度和代码实现,希望帮助大家深入理解排序算法,搞定面试!

《AI导论》

介绍人工智能AI的诞生历史和到现在为止的不同发展阶段;介绍了AI领域中常见的名词概念和其关系,包括机器学习、深度学习、神经网络结构搜索 NAS、生成对抗网络 GAN等;最后对AI发展做出展望。
本课程属于导论课程,旨在帮助同学们从宏观层面把握AI,建立AI的知识体系。

《Java注解精讲》

本课程详细介绍了Java中的注解机制,包括注解的定义和分类,注解的使用和自定义,注解的源码和架构分析;
本课程语言简单凝练,视频短小精悍,让你一次彻底搞懂Java注解!

《Java反射精讲》

反射是Java中重要的也是较难理解的内容;
本课程从反射的定义、作用、原理和使用出发,全方位帮你彻底搞定反射;

好家伙,随手就是一个赞~


给作者买瓶咖啡提提神~

Html5调用手机摄像头并实现人脸识别相关推荐

  1. Python+OpenCV 调用手机摄像头并实现人脸识别

    文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...

  2. 基于opencv第三方视觉库,通过内网IP调用手机摄像头,实现人脸识别与图形监测

    1. 安装opencv视觉库 OpenCV 是一个开源的计算机视觉库,OpenCV 库用C语言和 C++ 语言编写,可以在 Windows.Linux.Mac OS X 等系统运行.同时也在积极开发 ...

  3. html5 调用手机摄像头详解

    html5 调用手机摄像头详解   首先,我们看看HTML代码结构,当然,这部分的DOM内容应该是在用户允许使用其摄像头事件出发后,动态加载生成的.  注意: 我们采用的是 640X480的分辨率,如 ...

  4. 原生html调手机拍照,如何让HTML5调用手机摄像头拍照——实践就是一切

    原文:如何让HTML5调用手机摄像头拍照--实践就是一切 NanShan 小编将思路提供给了大家,学编程最重要的是实践,我这虽然有完善的代码,但是希望大家都可以自己写出属于自己的代码 HTML5 Th ...

  5. html5调用手机摄像头

    在一个响应式网站项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api  然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 input fil ...

  6. html5调用手机摄像头,实现拍照上传功能

    http://www.glve.net/html5-calls-cell-phone-cameras-to-achieve-photo-upload-feature.html 今天做手机网站,想实现手 ...

  7. 使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  8. html调起苹果手机摄像头_使用HTML5+调用手机摄像头和相册

    前言: 前端时间使用HTML5作了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了很多时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法 ...

  9. html5调用手机摄像头和相册,h5 调用手机摄像头/相册

    html 部分 js 部分 getBase64: function (file, callback) { var maxWidth = 640 if (file.files && fi ...

最新文章

  1. Mysql依赖库Boost的源码安装,linux下boost库的安装
  2. linux命令 把文件夹拷贝一遍_cp 快捷命令:复制文件到多个目录
  3. 2d与2.5d坐标转换_Three.js 地理坐标和三维空间坐标的转换
  4. Equipment download和自动生成的IBASE DB 信息
  5. 华为ECS云服务器 Ubuntu 安装和配置FTP教程
  6. linux 离线安装nfs,ubuntu 上离线安装包制作与安装之NFS搭建
  7. 《天天数学》连载48:二月十七日
  8. 程序员选择公司的8个标准
  9. 拉格朗日插值法及代码
  10. 查询至少具有两份工作员工的姓名和其公司名
  11. 打破微信扫码进群限制,我用webot社群助手是怎么办到的?
  12. cordova-plugin-battery-status监听电池状态
  13. 精选C#毕业设计83套——源码+论文完整资源
  14. js动态添加样式和jQuery动态添加样式
  15. 程序员的江湖:从黑木崖到回龙观
  16. 5大UX设计谬论,如何去补救?
  17. 快来看看输入文字自动生成诗词的软件叫什么
  18. ICP许可证申请误区一:我是创业型小公司,开发了一款APP,需不需要申请ICP许可证,该怎么办?
  19. puzzle(0919)一个白球一个坑、图形对位
  20. QT实战2:QWT的安装和使用(qwt6.1.4,win10,QT5.12.3)

热门文章

  1. 如何生成带附加码的EAN13商品条码
  2. oral-b app Android,oral b app
  3. 好用的翻译插件-一键自动翻译插件软件
  4. 一个月瘦10斤的计划
  5. js 已知角度和斜边,求直角边
  6. java double 占位符_Java输出格式化之占位符
  7. PAT-L2-027(名人堂与代金券)(结构体排序)
  8. Oracle存储过程中loop、for循环的用法
  9. oracle在linux自启动和停止脚本
  10. 京冀41所医院和急救中心成为北京冬奥会定点医院