在laravel中运行python脚本

时间:2020-06-20 01:04:25

标签: python php laravel opencv

有一个用于面部识别的python脚本,我想在laravel应用程序中对其进行修改并运行该脚本,以使用户可以使用面部识别来访问页面。但是我不知道该怎么做。

这是原始的html(不是我的应用程序之一): 您拍摄快照并将图像与文件夹中的图像进行比较

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/style.css">
    <title>Login</title>
</head>
<body onload="init()">
<nav class="navbar text-white navbar-dark bg-dark">
<a href="#" class="navbar-brand">
Login 
</a>
</nav>
     <p>

    </p>
    <div class="container text-center bordered" style="width:280px">
    <form action="login.py" method="post" enctype="multipart/form-data">
    <video onclick="snapshot(this);" width=250 height=250 id="video" controls autoplay></video>
    <br>
    <input type="email" placeholder="Email" name="email" class="form-control form-control-sm text-left">
    <br>
    <input type="text" accept="image/png" hidden name="current_image" id="current_image">
       <button  onclick="login()" class="btn-dark" value="login">Login </button>
       <br>
       <br>
    </form>
    </div>
      <canvas  id="myCanvas" width="400" height="350" hidden></canvas>  
  </body>
  <script>
      //--------------------
      // GET USER MEDIA CODE
      //--------------------
          navigator.mediaDevices.getUserMedia = ( navigator.getUserMedia ||
                             navigator.webkitGetUserMedia ||
                             navigator.mozGetUserMedia ||
                             navigator.msGetUserMedia);

      var video;
      var webcamStream;
        if (navigator.getUserMedia) {
           navigator.getUserMedia (

              // constraints
              {
                 video: true,
                 audio: false
              },

              // successCallback
              function(localMediaStream) {
                  video = document.querySelector('video');
                 video.srcObject = localMediaStream;
                 webcamStream = localMediaStream;
              },

              // errorCallback
              function(err) {
                 console.log("The following error occured: " + err);
              }
           );
        } else {
           console.log("getUserMedia not supported");
        }  



      var canvas, ctx;

      function init() {
        // Get the canvas and obtain a context for
        // drawing in it
mcanvas = document.getElementById("myCanvas");
        ctx = mcanvas.getContext('2d');
      }

      function login() {
         // Draws current image from the video element into the canvas
        ctx.drawImage(video,0,0,mcanvas.width,mcanvas.height);
        var dataURL = mcanvas.toDataURL('image/png');
         document.getElementById("current_image").value=dataURL;

      }

  </script>
</html>

和python:

#!"C:\Users\aya-i\AppData\Local\Programs\Python\Python38\python.exe"
import cgi
from base64 import b64decode
import face_recognition
formData = cgi.FieldStorage()
face_match=0

image=formData.getvalue("current_image")
email=formData.getvalue("email")
data_uri = image
header, encoded = data_uri.split(",", 1)
data = b64decode(encoded)

with open("image.png", "wb") as f:
    f.write(data)

got_image = face_recognition.load_image_file("image.png")

existing_image = face_recognition.load_image_file("students/"+email+".jpg")

got_image_facialfeatures = face_recognition.face_encodings(got_image)[0]

existing_image_facialfeatures = face_recognition.face_encodings(existing_image)[0]

results= face_recognition.compare_faces([existing_image_facialfeatures],got_image_facialfeatures)

if(results[0]):
    face_match=1
else:
    face_match=0

print("Content-Type: text/html")
print()

if(face_match==1):
    print("<script>alert('welcome ",email," ')</script>")
else:
    print("<script>alert('face not recognized')</script>")

1 个答案:

答案 0 :(得分:0)

任何外部命令,例如unix终端命令,python命令和...,都应使用PHP的exec()函数运行。该函数运行您的命令,并具有获取命令输出的选项,您必须自己处理错误和成功输出。