2016-08-29 5 views
0

Я использую Postman для отправки изображения base64 в файл PHP на моем веб-сервере Apache. Изображение всегда отправляется успешно. PHP-скрипт выполняет скрипт python для извлечения текста из изображения (с использованием Pytesseract/Tesseract-OCR) и отправки вывода обратно на PHP. (Использование Windows 10, если это имеет значение)PHP Не удалось выполнить Pytesseract в Python через shell_exec()

Первые два оператора печати всегда возвращаются в Postman, но третий и четвертый операторы печати не возвращаются. Последний оператор печати возвращается только тогда, когда строка pytesseract закомментирована.

Когда я запускаю скрипт python сам по себе, все операторы печати возвращаются успешно.

Python (test.py)

from PIL import Image 
import pytesseract 
import sys 

print "Print 1" 
print "Print 2" 

filename = "test.jpg" 
#filename = sys.argv[1] 
text = pytesseract.image_to_string(Image.open("Images/"+filename)) 
print text 

#Final print statement appears on POSTMAN only if the tesseract code does not run 

a = "Print" 
b = 1+2 
print a, b 

PHP (connection.php)

<?php 
header('Content-type : bitmap; charset=utf-8'); 

if(isset($_POST["encoded_string"])){ 
    $encoded_string = $_POST["encoded_string"]; 
    $device_name = $_POST["device_name"]; 

    /*$image_name = $device_name.'.jpg';*/ 
    $image_name = "test.jpg"; 
    $decoded_string = base64_decode($encoded_string); 

    $path = 'images/'.$image_name; 
    $file = fopen($path, 'wb'); 
    $is_written = fwrite($file, $decoded_string); 
    fclose($file); 

    $extracted = shell_exec("python test.py $image_name"); 
    echo $extracted; 

} 

else { 
    echo "Failed :("; 
} 

?> 

Я считаю, что проблема может запустить сценарий питона, но сценарий питона не в состоянии выполнить tesseract, когда он был выполнен PHP.

+0

Работает ли он, если вы запускаете файл python вручную в cli (как тот же пользователь, что и php)? –

+0

@CharlotteDunois Да! – 0248881

+0

может кто-то действительно помочь с этой проблемой или нет ... – 0248881

ответ

0

Надеюсь, вы все еще на нем, я нашел решение here! добавьте тезисы в скрипт php и, надеюсь, он будет работать:

$path = getenv('PATH'); putenv("PATH=$path:/usr/local/bin"); 
+0

@ 0248881: Я знаю, что это может быть слишком старым, но вам понравился мой ответ? если да, пожалуйста, поддержите, это было бы очень, очень полезно ... Спасибо! – Ryan

+0

@ charlotte-dunois: вы считаете мой ответ ценным? Если да, пожалуйста, поддержите, это было бы очень полезно ...! – Ryan