<em id="fzvj9"><form id="fzvj9"><nobr id="fzvj9"></nobr></form></em>

      <sub id="fzvj9"><listing id="fzvj9"></listing></sub>
        <address id="fzvj9"><nobr id="fzvj9"><nobr id="fzvj9"></nobr></nobr></address>

            <form id="fzvj9"><nobr id="fzvj9"><meter id="fzvj9"></meter></nobr></form>

            <form id="fzvj9"></form>

            • 自動秒收錄
            • 軟件:1973
            • 資訊:56516|
            • 收錄網站:199641|

            IT精英團

            SpringBoot實現人臉識別功能!就這么簡單

            SpringBoot實現人臉識別功能!就這么簡單

            瀏覽次數:
            評論次數:
            編輯: 澤洋
            信息來源: ITPUB
            更新日期: 2022-06-07 21:08:38
            摘要

            人臉識別因為起安全、便捷的特點,在當下的互聯網產品中,可以說隨處可見;常常用來解鎖、授權、登錄等,雖然用起來方便,但是要想自行實現,不僅難度高,耗時還長,好在有實力的互聯網大廠已經為我們提供了現成SD

            • 正文開始
            • 相關閱讀
            • 推薦作品

            人臉識別安全方便,所以在現在的互聯網產品中隨處可見。它通常用于解鎖、授權、登錄等。雖然使用起來很方便,但是靠自己實現不僅困難而且費時。好在有實力的互聯網廠商給我們提供了現成的SDK,不用簡單幾步就能輕松實現。這里有一個SpringBoot整合百度云實現人臉識別的案例;

            原地址:http://dw-z.ink/0V8D2

            去年公司參與了某機場建設智能機場的一個項目,人臉登機就是其中一個功能模塊。當時只是寫后臺接口,調用人臉識別設備的api,向閘機發回數據信號,保證這個功能的正常使用。

            當時因為項目進度比較緊,手里還有其他項目趕進度,沒有時間分享這個功能的實現。前幾天刷臉進公司大樓,突然想起來應該寫一個類似功能的demo來分享一些個人經驗。當時項目中刷臉的設備終端是購買某AI公司的。當然不能買demo里的那種東西隨便玩,就拿系統刷臉登錄練手。人臉識別解決方案是百度云的。當然,騰訊和阿里在這方面也很牛逼。

            需求分析

            一、人臉注冊

            step1:肖像集。在注冊頁面,用html中的視頻組件和js調用筆記本相機,抓取人像圖片。帶筆記本電腦和臺式機不帶攝像頭的童鞋,請離開,離開。

            step2:的肖像被上傳到項目文件夾。頁面上采集的人像數據轉換成bash64字符,傳輸到web后臺。后臺將bash64轉換成圖片上傳到項目文件夾。

            step3:將用戶的注冊信息寫入數據庫,并將用戶的照片存儲在path中。

            step4:將采集到的人像信息(bash64)上傳到百度云的人臉識別云服務器。這個ps實現也可以線下私有化,有興趣的童鞋可以自己研究。

            二、人臉登錄

            step1:肖像集。在登錄頁面,用html調用帶有視頻組件和js的筆記本攝像頭,抓取人像圖片。

            step2:人像數據傳輸。將捕獲的人臉圖片信息發送回web后臺。

            step3:肖像比較。在web后臺實例化調用百度云人臉識別的sdk,將登錄頁面采集的圖像數據與注冊的圖像信息進行比對(這一塊是百度云人臉識別解決方案實現的,也是最好的地方)。如果返回的分數大于95分,就可以實現登錄。

            具體實現

            好了,序言和需求分析已經嗶嗶響了這么久,接下來就是實現和代碼加載了。

            一、人臉注冊

            首頁代碼

            !DOCTYPEhtml

            超文本標記語言

            元字符集='UTF八國集團'

            標題插入標題此處/標題

            styletype='text/css '

            /* *解決瀏覽器兼容性問題* */

            * { margin:劃:}

            html,body { width :100%;身高:100%;}/**/

            body { background : URL(img/bg03 . jpg)no-repeat center;}

            h1 { color: # ffftext-align : center;行高:80 px;}。媒體{ width:534pxheight:400pxmargin:40pxauto

            }

            # register { width:200pxheight:50px背景色: # 2196 F3;margin:60pxauto

            text-align : center;行高:50 px;color: # fffborder-radius :10 px;}

            # canvas { display:none}

            #s

            huru{width: 200px;height:50px;background-color: #2196f3; margin: 20px auto ;}
             </style>
            </head>
            <body>
             <h1>百度云人臉注冊</h1>
             <div id="shuru">
             用戶名:
             <input type="text" name="username" id="username"/>
             </div>
             
             <div class="media">
              <video id="video" width="450" height="300" src="" autoplay></video>
              <canvas id="canvas" width="450" height="300"></canvas>
              
             </div>
             <button id="register" >確定注冊</button>
             <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
             <script type="text/javascript">
             /**調用攝像頭,獲取媒體視頻流**/
             var video = document.getElementById('video');
             //返回畫布二維畫圖環境
             var userContext = canvas.getContext("2d");
             var getUserMedia = 
              //瀏覽器兼容,表示在火狐、Google、IE等瀏覽器都可正常支持
              (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia)
              //getUserMedia.call(要調用的對象,約束條件,調用成功的函數,調用失敗的函數)
              getUserMedia.call(navigator,{video: true,audio: false},function(localMediaStream){
               //獲取攝像頭捕捉的視頻流
               video.srcObject=localMediaStream;
              },function(e){
               console.log("獲取攝像頭失?。?!")
              });
             //點擊按鈕注冊事件
              var btn = document.getElementById("register");
             
             btn.onclick = function () {
              var username = $("#username").val();
              alert($("#username").val());
               if(username != null){
                //點擊按鈕時拿到登陸者面部信息
                         userContext.drawImage(video,,,450,300);
                         var userImgSrc = document.getElementById("canvas").toDataURL("img/png");
                         //拿到bash64格式的照片信息
                         var faceBase = userImgSrc.split(",")[1];
                         
                         //ajax異步請求
                         $.ajax({
                          url: "register",
                          type: "post",
                          data: {"faceBase": faceBase,
                           "userName": username
                          },
                          success: function(result){
                           if(result === '1'){
                            alert("注冊成功??!,點擊確認跳轉至登錄頁面");
                            window.location.href="toLogin";
                           }else if(result === '2'){
                            alert("您已經注冊過啦??!");
                           }else{
                            alert("系統錯誤??!");
                           }
                           
                          }
                         })
               }else{
                alert("用戶名不能為空");
               }
                       
                   } 
             </script>
            </body>
            </html>

            頁面截圖,本人太帥,先行打碼,嘿嘿

            后臺具體代碼如下:

             private static final String APP_ID = "****";
             
             private static final String API_KEY = "*******";
             
             private static final String SECRET_KEY = "*******";
             
             @Autowired
             private IUserService userService;
             
             
             @RequestMapping(value = "register",method = RequestMethod.POST)
             public String register(String userName,String faceBase) throws IOException {
              if(!StringUtils.isEmpty(userName) && !StringUtils.isEmpty(faceBase)) {
                //文件上傳的地址
                     String upPath = ResourceUtils.getURL("classpath:").getPath()+"static\\photo";
                     //用于查看路徑是否正確
                     System.out.println(upPath);
                     // 圖片名稱
                     String fileName = userName+System.currentTimeMillis() + ".png";
                     System.out.println(upPath+"\\"+fileName);
                     File file = new File(upPath+"\\"+fileName);
               //初始化百度云的AipFace
               AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
               
               //往自己demo數據庫里插入一條用戶數據
               Users user = new Users();
               user.setUserName(userName);
               user.setUserPhoto(upPath+"\\"+fileName);
               Users exitUser = userService.selectUserByName(user);
               if(exitUser != null) { 
                return "2";
               }
               userService.addUsers(user);
               
               
               // 往自己demo服務器里面上傳攝像頭捕獲的圖片
               GenerateImage(faceBase, file);
               //向百度云人臉庫插入一張人臉
               facesetAddUser(client,faceBase,userName);
              }
              return "1";
              
             }

            APP_ID 、API_KEY、SECRET_KEY三個參數分別為百度云人臉識別上面的三個數據項,如下圖

            點擊完注冊按鈕后,就會得到以下的數據

            • 用戶信息

              包含用戶名,本地文件地址

            • 本地文件

            • 云端人臉數據

            到這里,一個用戶就算注冊成功了,個人這張大帥臉也算是錄進去了,下面就是刷臉登錄了。

            二、刷臉登錄

            當我注冊完后就會進入登錄頁面

            這時我點擊登錄按鈕,js觸發后臺方法,具體入下:

            @RequestMapping(value = "login",method = RequestMethod.POST)
             public String login(String faceBase) {
              String faceData = faceBase;
              //進行人像數據對比
              AipFace client = new AipFace(APP_ID,API_KEY,SECRET_KEY);
              Double num = verifyUser(faceData,client);
              if(num>95) {
               return "1";
              }else {
               return "2";
              }
              
             }
             
             /**
              * 人臉比對
              * @param imgBash64 照片轉bash64格式
              * @param imgType 類型
              * @param groupList 百度云人臉識別用戶組
              * @return
              */
             public Double verifyUser(String imgBash64,AipFace client) {
              // 傳入可選參數調用接口
                 HashMap<String, String> options = new HashMap<String, String>();
                 
                 JSONObject res = client.search(imgBash64, "BASE64", "user_01", options);
                 
                 System.out.println(res.toString(2));
                 System.out.println(res.getJSONObject("result"));
                 System.out.println(res.getJSONObject("result").getJSONArray("user_list"));
                 JSONObject user = (JSONObject) res.getJSONObject("result").getJSONArray("user_list").get();
                 Double score = (Double) user.get("score");
                 
              return score;
             }

            接著我正面面對攝像頭,點擊登錄按鈕,就進入了一個大大的success頁面

            我側臉或者拿照片試一下,不好意思,您老只能是404了

            以上就是整個實現的思路和一些步驟了,綜合而言實現還是比較簡單的,牛逼的地方都在人家百度云那邊呢,咱們只是根據需求合理利用人家的解決方案罷了。其實如果不是很牛逼的專項技術研發公司,做項目能合理利用別人的產品是最有效率的,項目建設最重要的還是投入產出比嘛。與其自己團隊苦苦研究,花點成本買人家的成品直接用它不香嗎?




            一篇文章中關于Python讀取文件的所有知識
            ? 上一篇 2022-06-07
            • 一篇文章中關于Python讀取文件的所有知識
              0閱讀 0條評論 個贊
              文件是無處不在的,無論我們使用哪種編程語言,處理文件對于每個程序員都是必不可少的文件處理是一種用于創建文件、寫入數據和從中讀取數據的過程,Python擁有豐富的用于處理不同文件類型的包,從而使得我們……
            • 分享:Linux的6個實際應用
              0閱讀 0條評論 個贊
              眾所周知,Linux為全球數百萬臺服務器和臺式機提供支持。但是這個開源操作系統還有其他應用嗎?如果您在桌面上使用Linux,您可能想知道您正在使用的操作系統有哪些實際用途。幸運的是,今天有很多L……
            • 通過Java輕松實現AI人臉識別登錄
              0閱讀 0條評論 個贊
              想自己搞一個人臉識別玩玩,隨著開始查找資料來研究這方面的信息,還好有好幾家公司都有提供這方面的免費API,也是省下來很多功夫。一開始采用的是face++,但是在執行到最后一步人臉搜索時出現問題,一直提……
            • NodeJs高級開發和超全性能優化指南
              0閱讀 0條評論 個贊
              原文鏈接:https://juejin.cn/post/7095354780079357966作者:九兒的小書屋相信對于前端同學而言,我們去開發一個自己的簡單后端程序可以借助很多的nodeJs的框架……
            • Kubernetes拋棄Docker 不要慌!這里有一套實用的方法告訴你~
              0閱讀 0條評論 個贊
              導讀Kubernetes是一個可移植、可擴展的開源平臺,用于管理容器化的工作負載和服務,可促進聲明式配置和自動化。Kubernetes擁有一個龐大且快速增長的生態系統,其服務、支持和工具的使用范圍……
            發表評論 共有條評論
            用戶名: 密碼:
            驗證碼: 匿名發表
            • MySQL減肥3種方法 還有誰不行?
              2閱讀 0條評論 個贊
              在使用SQL提數的時候,常會遇到表內有重復值的時候,比如我們想得到uv(獨立訪客),就需要做去重。在MySQL中通常是使用distinct或groupby子句,但在支持窗口函數的sq……
            • Linux GNU C對標準C語言的擴展和增強
              1閱讀 0條評論 個贊
              正文Linux上可用的C編譯器是GNUC編譯器,它建立在自由軟件基金會的編程許可證的基礎上,因此可以自由發布。GNUC對標準C進行一系列擴展,以增強標準C的功能。1.零長度和變量長度數組……
            • 運維 放下監控——也放下自己
              1閱讀 0條評論 個贊
              來源公眾號:云原生技術應用(ID:sreguide)根據多年和運維打交道的經歷,我發現,運維常常讓監控變得無效。。。1.我的監控故事我做過兩年多的運維工作,后面就轉做運維平臺開發了,也一步步看著監控……
            • 記得保命!捕捉Linux下的所有高危命令!
              1閱讀 0條評論 個贊
              1、rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前……
            • 低代碼的實現原理是什么?
              1閱讀 0條評論 個贊
              我們在低代碼領域探索了很多年,從2015開始研發低代碼前端渲染(amis),從2018年開研發后端低代碼數據模型,發布了愛速搭低代碼平臺,這些年調研過了幾乎所有市面上的相關技術和產品,發現雖然每……
            • MySQL為什么不能用uuid作為主鍵?
              12閱讀 0條評論 個贊
              前言在mysql中設計表的時候,mysql官方推薦不要使用uuid或者不連續不重復的雪花id(long形且唯一,單機遞增),而是推薦連續自增的主鍵id,官方的推薦是auto_increment,那么為……
            • 內存數據庫如何利用內存?
              1閱讀 0條評論 個贊
              與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
            • 運維數字化轉型的幾點思考
              1閱讀 0條評論 個贊
              這個月底要召開一個企業運維數字化轉型的研討會,昨天一個合作伙伴和我討論一些研討會的話題問題。數字化轉型是近期十分熱門的話題,各大國企央企也把數字化轉型作為未來幾年的工作重點。不過針對于IT運維,數字化……
            • 臉書數據庫項目負責人:我從做基礎設施中學到的42件事
              2閱讀 0條評論 個贊
              最近讀到了分布式系統研究者MaheshBalakrishnan的一篇博客《42thingsIlearnedfrombuildingaproductiondatabase》。同樣做……
            • 前端面試必須解決網絡中的跨域問題
              10閱讀 0條評論 個贊
              什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
            • 運維必備!Linux運維數據實時同步服務部署
              1閱讀 0條評論 個贊
              sersync服務介紹sersync服務特點sersync服務原理sersync環境部署sersync啟動方案sersync擴展使用企業數據存儲需求在生產環境中,有部分服務可能會實時更新數據。如果不小……
            • 重溫SQL Server的行到列和列到列的變化 并采訪常見問題
              1閱讀 0條評論 個贊
              行轉列,列轉行是我們在開發過程中經常碰到的問題。行轉列一般通過CASEWHEN語句來實現,也可以通過SQLSERVER的運算符PIVOT來實現。用傳統的方法,比較好理解。層次清晰,而且比較習……
            • Linux命令行提示-!感嘆號的使用
              0閱讀 0條評論 個贊
              bash的歷史記錄里保留了輸入的命令行記錄。以下是如何充分利用該記錄和!符號的使用教程。history的基礎HISTSIZE變量值設置保存在歷史列表中的命令數。默認情況下,該值為500。這些先前……
            • SQL Server實現行列轉換
              0閱讀 0條評論 個贊
              工作中經常需要查詢一些數據,需要寫sql語句來寫報表。最近就在業務中使用到了轉置,現在已經不再使用case方式了,而是使用sqlserver內置的pivot函數來實現轉置。業務很邏輯,需要從多個表中……
            • 通過Java輕松實現AI人臉識別登錄
              0閱讀 0條評論 個贊
              想自己搞一個人臉識別玩玩,隨著開始查找資料來研究這方面的信息,還好有好幾家公司都有提供這方面的免費API,也是省下來很多功夫。一開始采用的是face++,但是在執行到最后一步人臉搜索時出現問題,一直提……
            • SpringBoot實現人臉識別功能!就這么簡單
              0閱讀 0條評論 個贊
              人臉識別因為起安全、便捷的特點,在當下的互聯網產品中,可以說隨處可見;常常用來解鎖、授權、登錄等,雖然用起來方便,但是要想自行實現,不僅難度高,耗時還長,好在有實力的互聯網大廠已經為我們提供了現成SD……
            • MySQL主從式 6分鐘帶你掌握!
              0閱讀 0條評論 個贊
              以下文章來源于公眾號-樓仔,作者樓仔MySQL主從一直是面試???,里面的知識點雖然基礎,但是能回答全的同學不多。比如我之前面試小米,就被問到過主從復制的原理,以及主從延遲的解決方案,你之前面試,有遇……
            • 如何在K8S的Pod中連續執行容器?不要錯過這個方法
              1閱讀 0條評論 個贊
              出于某些目的,有時需要在Kubernetes的一個Pod中,連續依次運行多個Container。這種有明確結束預期的運行,即Kubernetes的Job。但是,雖然一個Job可以在……
            • MySQL的行格式是什么?
              1閱讀 0條評論 個贊
              行格式(rowformat)決定了我們插入的一行數據,是如何存儲在數據庫中的,MySQL有4種行格式,分別是REDUNDANT,COMPACT,DYNAMIC,COMPRESSED。不同行格式區別:……
            • 如何正確計算Kubernetes容器的CPU利用率
              1閱讀 0條評論 個贊
              本文轉自博客園,原文:https://www.cnblogs.com/apink/p/15767687.html,版權歸原作者所有。參數解釋使用Prometheus配置kubernetes環境……
            最近發布資訊
            更多
            风流少妇大战洋吊

            <em id="fzvj9"><form id="fzvj9"><nobr id="fzvj9"></nobr></form></em>

                <sub id="fzvj9"><listing id="fzvj9"></listing></sub>
                  <address id="fzvj9"><nobr id="fzvj9"><nobr id="fzvj9"></nobr></nobr></address>

                      <form id="fzvj9"><nobr id="fzvj9"><meter id="fzvj9"></meter></nobr></form>

                      <form id="fzvj9"></form>