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

首頁 > 開發 > HTML5 > 正文

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

2024-09-05 07:22:45
字體:
來源:轉載
供稿:網友

需求

混合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錯誤,原因是攝像頭參數設置不合理,找不到指定設置。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中国女警察一级毛片视频 | 极品国产91在线网站 | 国产精品视频一区二区三区四 | 久久99国产伦子精品免费 | 国产午夜精品一区二区三区四区 | 日本网站一区二区三区 | 日本在线视频一区二区三区 | 天天都色| 欧美日本免费一区二区三区 | 玖草在线资源 | 在线视频 中文字幕 | 欧美精品网址 | 久草在线资源福利站 | 深夜小视频在线观看 | 国产精品久久久免费观看 | 亚洲第一视频在线 | 国产亚洲精品久久久久久网站 | 成年免费视频黄网站在线观看 | 欧美日韩国产一区二区三区在线观看 | 视频一区二区三区免费观看 | 国内精品视频饥渴少妇在线播放 | 久久久久久久一区二区三区 | 久久免费视频3 | 色七七网站 | 国产91丝袜在线播放0 | 欧美成人精品一区 | 国产精品av久久久久久网址 | 国产成人精品一区二区视频免费 | 亚洲精品免费播放 | 亚洲午夜视频 | 欧美成人一区二区三区 | 欧美城网站地址 | 久久国产精品99国产 | 久久久久久久亚洲视频 | 91麻豆精品国产91久久久更新资源速度超快 | 国产午夜精品一区二区三区嫩草 | 免费国产成人高清在线看软件 | 色人阁在线视频 | 国产精品久久久久久久久久尿 | 国产精品久久久久国产精品三级 | 亚洲成人福利网站 |