Как выполнить научные сценарии Python на сервере

Я работаю над своим проектом, в котором я пытаюсь классифицировать изображение. Для этого я отправляю изображение с устройства Android на сервер для классификации. На сервере есть скрипт php, который принимает изображение и сохраняет его в папке загрузки на локальном сервере. Ниже приведен код, который сохраняет изображение на сервере.

upload.php

<?php

                // Path to move uploaded files
                $target_path = dirname(__FILE__).'/uploads/';

                if (isset($_FILES['image']['name'])) {
                    $target_path = $target_path . basename($_FILES['image']['name']);

                    try {
                        // Throws exception incase file is not being moved
                        if (!move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
                            // make error flag true
                            echo json_encode(array('status'=>'fail', 'message'=>'could not move file'));
                        }

            //echo $output;
            $output = null; 
            exec('python walnut_predict.py' ,$output, $return); 
             echo json_encode(array('status'=>'success', 'message'=>$output));

                        // File successfully uploaded
                       // echo json_encode(array('status'=>'success', 'message'=>$output));
                    } catch (Exception $e) {
                        // Exception occurred. Make error flag true
                        echo json_encode(array('status'=>'fail', 'message'=>$e->getMessage()));
                    }
                } else {
                    // File parameter is missing
                    echo json_encode(array('status'=>'fail', 'message'=>'Not received any file'));
                }

            /*
            $output = null; 
            exec('python walnut_predict.py' ,$output, $return); 
             echo json_encode(array('status'=>'fail', 'message'=>$output));
            //print_r($output); 
            //print_r($return) 

            */
            ?>

walnut_predict.py

    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def hello_world():
        from keras.models import load_model
        from keras.models import Sequential
        import cv2
        import demjson
        import numpy as np
        from Tkinter import Tk
        from tkFileDialog import askopenfilename
        from keras.preprocessing.image import ImageDataGenerator,                                
    array_to_img, img_to_array, load_img
        model = Sequential()

        model = load_model('first_try_walnut.h5')
        model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

        img1 = cv2.imread("black.jpg")
        img1 = cv2.resize(img1, (150, 150))
        img1 = np.reshape(img1, [1, 150, 150, 3])
        classes1 = model.predict_classes(img1)

        if classes1 == 1:
            data = [{'op': 'Black Walnut'}]
            json = demjson.encode(data)
            return json
        else:
            data = [{'op': 'English Walnut'}]
            json = demjson.encode(data)
    return json


    if __name__ == '__main__':
       app.run()

Проблема в том, что walnut_predict.py не запускается при запуске из файла upload.php.

1 ответ

Попробуйте указать полный путь к python и скрипту

exec('/full_path/python /full_path_script/walnut_predict.py' ,$output, $return); 

Также установите скрипт с разрешением на выполнение (+x).

Добавьте это в первую строку скрипта Python

#!/usr/bin/env python

Наконец, если вы используете PHP через Apache, убедитесь, что у пользователя Apache (www-data) есть разрешение на доступ и выполнение скрипта.

Другие вопросы по тегам