在laravel中运行python脚本

在laravel中运行python脚本,python,php,laravel,opencv,Python,Php,Laravel,Opencv,有一个用于人脸识别的python脚本,我想修改它,并在我的laravel应用程序中运行它,让用户能够使用人脸识别访问页面。但我不知道该怎么做 以下是原始html(不是我的应用程序): 拍摄快照并将图像与文件夹中的图像进行比较 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=de

有一个用于人脸识别的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>

登录



登录

//-------------------- //获取用户媒体代码 //-------------------- navigator.mediaDevices.getUserMedia=(navigator.getUserMedia|| navigator.webkitGetUserMedia|| navigator.mozGetUserMedia|| navigator.msGetUserMedia); var视频; 网络摄像机流; if(navigator.getUserMedia){ navigator.getUserMedia( //约束条件 { 视频:没错, 音频:错误 }, //成功回调 函数(localMediaStream){ video=document.querySelector('video'); video.srcObject=localMediaStream; webcamStream=localMediaStream; }, //错误回调 功能(err){ log(“发生以下错误:“+err”); } ); }否则{ log(“不支持getUserMedia”); } var画布,ctx; 函数init(){ //获取画布并为其获取上下文 //吸纳 mcanvas=document.getElementById(“myCanvas”); ctx=mcanvas.getContext('2d'); } 函数登录(){ //将当前图像从视频元素绘制到画布中 ctx.drawImage(视频,0,0,mcanvas.width,mcanvas.height); var dataURL=mcanvas.toDataURL('image/png'); document.getElementById(“当前图像”).value=dataURL; }
还有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>")
#!“C:\Users\aya-i\AppData\Local\Programs\Python\Python38\Python.exe”
导入cgi
从base64导入B64解码
导入人脸识别
formData=cgi.FieldStorage()
面匹配=0
image=formData.getvalue(“当前图像”)
email=formData.getvalue(“电子邮件”)
数据uri=图像
标头,encoded=data_uri.split(“,”,1)
数据=B64解码(编码)
以open(“image.png”、“wb”)作为f:
f、 写入(数据)
获取图像=人脸识别。加载图像文件(“image.png”)
现有图片=人脸识别。加载图片文件(“学生/”+电子邮件+“.jpg”)
got_图像面部特征=面部识别。面部编码(got_图像)[0]
现有图像面部特征=面部识别。面部编码(现有图像)[0]
结果=面部识别。比较面部([现有面部特征],获得面部特征)
如果(结果[0]):
面匹配=1
其他:
面匹配=0
打印(“内容类型:文本/html”)
打印()
如果(面匹配==1):
打印(“警报(‘欢迎’、电子邮件“)”)
其他:
打印(“警报(‘面未识别’))

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

PHP具有函数
exec()
运行外部程序,也许您可以使用它来运行python代码,但我只会使用python来识别face和rest,我会在Laravel中这样做-这意味着使用表单显示HTML,从表单获取值,将其发送到python脚本,从python获取结果,并在HTMLTANK中显示结果,但我如何将窗体的值传递给我的python脚本?
exec()
获取程序名和参数-
exec(“python script.py arg1 arg2”)
。如果有文本值,则直接使用字符串;如果有图像,则将其保存在文件中,并将路径用作参数。在Python中,使用
sys.argv
获取参数。并使用
print()
将值发送回
PHP
,它应该以文本的形式获取。只需使用Google查找有关
exec()
的更多信息。最终,在PHP中,您可以将数据保存在文件中并用Python打开此文件,在Python中,将结果保存在文件中并用PHP打开。请参阅PHP文档:和。唯一的问题可能是在某些服务器上,出于安全原因,
exec()
可能会被阻止。我尝试了这个简单的代码来检查它是否工作:test.py:
import sys x=sys.argv[1]print(x)
,在我的控制器中:
$output=exec(“python test.py$request->email”);dd(产出)我得到一个:“谢谢,但是我如何才能将表单的值传递到我的python脚本中呢?@Nielson您的命令是一个字符串,例如“cd~&&ls”。如果您在控制器中,您必须使用用户提供的数据创建命令字符串,然后运行
exec('cd~&&ls',$output)
输出是您的输出。