麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > HTML > 正文

Html5調用手機攝像頭并實現人臉識別的實現

2024-08-26 00:21:13
字體:
來源:轉載
供稿:網友

需求

混合App開發,原生殼子+webApp,在web部分調用原生攝像頭功能并且在網頁指定區域顯示攝像頭內容,同時可以手動拍照并進行人臉識別,將識別結果顯示在網頁上。

技術棧

vue、Html5、video標簽、Android、IOS、百度AI

分析

1、使用navigator.mediaDevices.getUserMedia調用系統原生攝像頭功能
2、video標簽顯示攝像頭內容
3、canvas標簽獲取圖片
4、將圖像上傳服務器,通過百度AI識別圖片
5、web顯示識別結果

核心代碼

1、調用系統原生攝像頭功能并使用video標簽顯示html:

      <video        id="webcam"        :style="videoStyle"        :width="videoWidth"        :height="videoHeight"        loop        preload      >      </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) {        //最新的標準API        navigator.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) {        //舊版API        navigator.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轉換為Blob    dataURItoBlob(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)         @Override         public void onPermissionRequest(final PermissionRequest request) {                   request.grant(request.getResources());        }});

2、IOS系統,Safari11之后可用

3、OverconstrainedError錯誤,部分Android手機會報OverconstrainedError錯誤,原因是攝像頭參數設置不合理,找不到指定設置。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中文在线观看www | 中文字幕网站在线 | 欧美h版在线观看 | 免费观看黄色一级视频 | 欧美 日韩 亚洲 中文 | 久夜草 | 欧美人成在线视频 | 欧美精品一区二区三区久久久 | 九九热在线视频观看 | 色欧美视频 | 欧美精品videos | 青青国产在线视频 | 把娇妻调教成暴露狂 | 国产精品午夜小视频观看 | 欧美成人做爰高潮片免费视频 | 精品一区二区免费 | 欧美一区二区三区中文字幕 | 亚洲第一页综合 | av观看国产 | 久久免费视频一区二区三区 | 成人免费毛片一 | 国产精品成人av片免费看最爱 | 精品少妇v888av | 欧美成人精品一区二区 | 免费一区二区三区 | 国产99久久久国产精品下药 | 国产精品久久久久久久久久iiiii | www.69色 | 国产精品视频中文字幕 | 久久国产精品久久久久久电车 | 快播av在线| 欧美a区| 在线亚洲播放 | 久久久久久久免费看 | 久久成人激情视频 | 久久久入口 | 羞羞视频.www在线观看 | 国产91精品亚洲精品日韩已满 | 美女网站黄在线观看 | 国产 视频 一区二区 | 免费毛片免费看 |