gpt4 book ai didi

php - 在 Laravel 中运行 python 脚本

转载 作者:太空狗 更新时间:2023-10-29 17:58:31 26 4
gpt4 key购买 nike

因此,我正在尝试在我的 Laravel 5.3 中运行 python 脚本。

这个函数在我的 Controller 中。这只是将数据传递给我的 python 脚本

public function imageSearch(Request $request) {
$queryImage = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\query.png'; //queryImage
$trainImage = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\2nd.png'; //trainImage
$trainImage1 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\3rd.png';
$trainImage2 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\4th.jpg';
$trainImage3 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\1st.jpg';

$data = array
(
array(0, $queryImage),
array(1, $trainImage),
array(3, $trainImage1),
array(5, $trainImage2),
array(7, $trainImage3),
);

$count= count($data);
$a = 1;
$string = "";

foreach( $data as $d){
$string .= $d[0] . '-' . $d[1];

if($a < $count){
$string .= ",";
}
$a++;

}

$result = shell_exec("C:\Python27\python c:\xampp\htdocs\identificare_api\app\http\controllers\ORB\orb.py " . escapeshellarg($string));

echo $result;
}

我的 python 脚本是一个 ORB 算法,它在将训练图像与查询图像进行比较后返回最小距离及其 ID。所以,这是我的 python 脚本:

import cv2
import sys
import json
from matplotlib import pyplot as plt

arrayString = sys.argv[1].split(",")

final = []

for i in range(len(arrayString)):
final.append(arrayString[i].split("-"))

img1 = cv2.imread(final[0][1], 0)

for i in range(1, len(arrayString)):

img2 = cv2.imread(final[i][1], 0)

# Initiate STAR detector
orb = cv2.ORB_create()

# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

# Match descriptors.
matches = bf.match(des1,des2)

# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)

# Draw first 10 matches.
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], None, flags=2)

if i == 1:
distance = matches[0].distance
else:
if distance > matches[0].distance:
distance = matches[0].distance
smallestID = final[i][0]

print str(smallestID) + "-" + json.dumps(distance)

我已经尝试在不使用 Laravel 的情况下运行这两个文件,并且运行良好。但是当我尝试将 php 代码集成到我的 Laravel 时,它什么也不显示。状态代码为 200 OK。

编辑:问题已解决。在 PHP 代码中,只需更改

$result = shell_exec("C:\Python27\python c:\xampp\htdocs\identificare_api\app\http\controllers\ORB\orb.py " . escapeshellarg($string));

$result = shell_exec("python " . app_path(). "\http\controllers\ORB\orb.py " . escapeshellarg($string));

那你也可以这样做

$queryImage = public_path() . "\gallery\herbs\query.png";

最佳答案

使用 Symfony 进程。 https://symfony.com/doc/current/components/process.html

安装:

composer require symfony/process

代码:

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

$process = new Process(['python', '/path/to/your_script.py']);
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}

echo $process->getOutput();

关于php - 在 Laravel 中运行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com