Jump to content

Chamar ficheiro .exe de python em php


daniel_silva

Recommended Posts

Olá, 

Eu gostaria de saber como é que consigo chamar o meu executável de python em php para disparar o output em web. 

Ou seja, eu tenho um ficheiro .py que com o pyinstaller tornei-o em ficheiro executável e chamando esse ficheiro na linha de comandos ele dispara o output correto. O que eu queria fazer era um ficheiro em PHP que executasse no localhost. 

Mas não aparece a string desejada...

Na linha de comandos insiro:

1. cd C:\Users\35196\Documents\Python\pyinstaller\dist\Load_Final_Model\

2. Load_Final_Model.exe image2.jpg

    - A image2.jpg é o ficheiro que ele recebe com a instrução sys.argv[1]

E fornece o output, como por exemplo: "Classicada por: cat"

O que acontece é que, quando executo o php fica tudo branco e não aparece nada.

 

Código PHP: 

<?php
	
	$file = 'image2.jpg';
	$command = escapeshellcmd('C:\Users\35196\Documents\Python\pyinstaller\dist\Load_Final_Model\Load_Final_Model.exe '.$file);
	$output = shell_exec($command);
	
	echo $output;
	
?>

 

Código Python:

#!/usr/bin/env python
# coding: utf-8

# # CLASSES:
# 
# [0] Airplane
# [1] Automobile
# [2] Bird
# [3] Cat
# [4] Deer
# [5] Dog
# [6] Frog
# [7] Horse
# [8] Ship
# [9] Truck

class_nameEN_us = ["airplane", "automobile" , "bird" , "cat" , "deer" , "dog" , "frog" , "horse" , "ship" , "truck"]

# evaluate the deep model on the test dataset
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import load_model
from tensorflow.keras.utils import to_categorical

# load train and test dataset
def load_dataset():
    # load dataset
    (trainX, trainY), (testX, testY) = cifar10.load_data()
    # one hot encode target values
    trainY = to_categorical(trainY)
    testY = to_categorical(testY)
    return trainX, trainY, testX, testY

# call load dataset function
trainX, trainY, testX, testY = load_dataset()

# scale pixels
def prep_pixels(train, test):
    # convert from integers to floats
    train_norm = train.astype('float32')
    test_norm = test.astype('float32')
    # normalize to range 0-1
    train_norm = train_norm / 255.0
    test_norm = test_norm / 255.0
    # return normalized images
    return train_norm, test_norm

trainX, testX = prep_pixels(trainX, testX)

# load model
model = load_model('final_model.h5')

# evaluate model
_, acc = model.evaluate(testX, testY, verbose = 0)
print('Hello', sys.argv[1])
print('> %.3f' % (acc * 100.0))

from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.preprocessing.image import img_to_array
import numpy as np

# load and prepare the image
def load_image(filename):
    # load the image
    img = load_img(filename, target_size=(32, 32))
    # convert to array
    img = img_to_array(img)
    # reshape into a single sample with 3 channels
    img = img.reshape(1, 32, 32, 3)
    # prepare pixel data
    img = img.astype('float32')
    img = img / 255.0
    return img

# load model
model = load_model('final_model.h5')
# load the image
caminho_img = 'images/' + sys.argv[1]
img = load_image(caminho_img)

y_predict = np.argmax(model.predict(img), axis=-1)

print("Classicada por: " + class_nameEN_us[y_predict[0]])

Obrigado.

Edited by daniel_silva
Link to comment
Share on other sites

Creio que o que te falta deve ser indicar o caminho completo para a imagem.
Quando estás a executar o "Load_Final_Model.exe" estás a passar "image2.jpg" como argumento, mas estás a dizer onde está a imagem, pelo que presumo que estará a procurar a imagem em "C:\Users\35196" ou no local onde o PHP está a ser executado ou no local onde tens alojado o script de PHP.

Uma pequena nota: se queres uma interface web para a tua aplicação, porque não usas Django?

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.