_django百度ai">
赞
踩
需要技术:
1、python Django框架(用于搭建网页)
2、学习调用百度AI人工智能库
(本文主要提供项目思路,后端代码主要应用百度AI库文档中的代码无需研究)
思路:
1、获取一张人脸照片
2、用ajax技术将人脸传向后台
3、在后台利用百度AI库进行人脸查找,判断该人是否在人脸库中(人脸库中的照片需要自己添加)
4、返回判断结果
前端代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>欢迎进入人脸识别系统</title> <meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" name="viewport"> <link rel="stylesheet" href="/cdnjs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="/cdnjs/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="/cdnjs/admin-lte/2.4.8/css/AdminLTE.min.css"> <script src="/cdnjs/jquery/3.5.0/jquery.min.js"></script> <script src="/cdnjs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic"> </head> <body class="hold-transition login-page" style="overflow-y:hidden"> <div class="login-box"> <div class="login-logo"> <a href="#" style="color:#32779f">人脸识别系统</a> </div> <div> <input type="button" class="btn btn-primary btn-block btn-flat" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()" /> <button id="snap" class="btn btn-primary btn-block btn-flat" onclick="takePhoto()">拍照</button> <video id="video" width="300px" height="300px" autoplay="autoplay"></video> <canvas id="canvas" width="300px" height="300px"></canvas> </div> </div> <script>function postLoginRequest(){console.log("login");var e=$("#username").val(),n=$("#password").val();0!==e.length?0!==n.length?$.ajax({url:"/api/mgr/signin",type:"POST",data:"username="+e+"&password="+n,success:function(e,n,t){0===e.ret?window.location.href="/mgr/index.html":(alert("登录失败 : "+e.msg),$("#password").val(""))},error:function(e,n,t){alert("错误: "+e.status+t)}}):alert("请输入密码"):alert("请输入用户名")}function curTimestamp(){var e=(new Date).getTime();return Math.floor(e/1e3)}var lastSendReqTime=0;function on_return(e){if(13==e){var n=curTimestamp();if(n-window.lastSendReqTime<5)return;window.lastSendReqTime=n,postLoginRequest()}}document.onkeydown=function(e){on_return(window.event?window.event.keyCode:e.which)} function getMedia() { let constraints = { //参数 video: { width: 300, height: 300 }, audio: false }; //获得video摄像头区域 let video = document.getElementById("video"); //返回的Promise对象 let promise = navigator.mediaDevices.getUserMedia(constraints); //then()异步,调用MediaStream对象作为参数 promise.then(function (MediaStream) { video.srcObject = MediaStream; video.play(); }); } function takePhoto() { //获得Canvas对象 let video = document.getElementById("video"); let canvas = document.getElementById("canvas"); let width = parseInt(video.videoWidth) let height = parseInt(video.videoHeight) let ctx = canvas.getContext('2d'); //绘图 ctx.drawImage(video,0,0,300,300); img=canvas.toDataURL('image/jpg') img=img.split(',')[1] //将照片以base64用ajax传到后台 $.ajax({ type:"POST", url:'baidu_api', data:{ message:img }, success:function (callback) { if(callback=='no'){ alert( '登入失败!' ); }else { alert( '录入成功!' ); window.location.href=callback } }, error:function (callback) { alert( '登入失败!' ); } }) } </script> </body> </html>
后端代码
import datetime import os from django.http import JsonResponse, request, HttpResponse import requests import base64 #调用百度api,需要先学习怎么调用 # client_id 为官网获取的AK, client_secret 为官网获取的SK host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=rXoEbmpmCyMqwc7G9fjwocTK&client_secret=VZtqZm8MGnlNqfxZS64GUPlOPaMthp8j' response = requests.get(host) token = response.json() if response: print(token['access_token']) ''' 人脸注册 ''' #def add(img64): # request_url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add" # with open('C:/Users/yky/Pictures/yky.jpg', 'rb') as f: # img = f.read() # img64 = base64.b64encode(img).decode() # params = {} # params['image'] = img64 # params['image_type'] = 'BASE64' # params['group_id'] = 1 # params['user_id'] = 1 # params['quality_control'] = 'NORMAL' # params['liveness_control'] = 'LOW' # access_token = token['access_token'] # request_url = request_url + "?access_token=" + access_token # headers = {'content-type': 'application/json'} # response = requests.post(request_url, data=params, headers=headers) # if response: # print (response.json()) """ 实现人脸查找 """ # with open('C:/Users/yky/Pictures/yky2.jpg', 'rb') as f: # img = f.read() # img64 = base64.b64encode(img).decode() def search(img64): shuxing = {} shuxing['image'] = img64 shuxing['image_type'] = 'BASE64' shuxing['group_id_list'] = 1 shuxing['quality_control'] = 'NORMAL' shuxing['liveness_control'] = 'LOW' ''' 人脸搜索 ''' request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search" access_token = token['access_token'] request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/json'} response = requests.post(request_url, data=shuxing, headers=headers) if response: print(response.json()) fanhui = response.json() result = fanhui['result'] user_list = result['user_list'] score = user_list[0]['score'] return int(score) def duibi(request): """人脸登录验证""" if request.POST: time = datetime.datetime.now().strftime('%Y%m%d%H%M%S') strs = request.POST['message'] #imgdata = base64.b64decode(strs) if search(strs) >= 80: return HttpResponse('index.html') else: return HttpResponse('no') return HttpResponse('no') # if __name__ =='__main__': # with open('C:/Users/yky/Pictures/yky2.jpg', 'rb') as f: # img = f.read() # img64 = base64.b64encode(img).decode() # print(search(img64))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。