在laravel中运行python脚本
有一个用于人脸识别的python脚本,我想修改它,并在我的laravel应用程序中运行它,让用户能够使用人脸识别访问页面。但我不知道该怎么做 以下是原始html(不是我的应用程序): 拍摄快照并将图像与文件夹中的图像进行比较在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
<!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)
输出是您的输出。