2015-04-28 2 views
0

Я разрабатываю php-страницу на веб-сервере. Он работает в следующих трех шагах:php tesseract with http post no response

  1. Получить изображение, загруженное из HTML-формы с помощью метода POST; выполнить tesseract для изменения изображения в текст;
  2. выполнить tesseract для изменения изображения в текст;
  3. распечатать текст на экране;

Теперь я считаю, что шаги 2. и 3. верны, потому что, если я использую локальный файл jpg на веб-сервере, все работает отлично. Однако, если я использую HTML-форму для POST файла изображения, никакого ответа. Любое предложение?

HTML-файл

<!DOCTYPE html> 
<body> 
<form enctype="multipart/form-data" method="POST" action="<webserver>/try.php"> 
<input type="file" name="myimg"></input> 
<input type="submit"></input> 
</form> 
</body> 
</html> 

Файл try.php на веб-сервере

<?php 
$im=$_FILES['myimg']; 
echo exec('/usr/bin/tesseract $im stdout', $msg); 
print_r($msg); 
?> 

На самом деле, я думаю, что ошибка заключается в том, как я использую переменную $ IM, не так ли?

+0

есть образ совершенного в файл? и имеет ли 'www-data' (при условии, что это apache) есть доступ к чтению файла? –

+0

'$ im' - это не местоположение файла, его переменные загрузки самого файла .. вам нужно сначала обработать файл. И затем передать путь в функцию exec. – Pogrindis

+0

вы можете использовать (я думаю) '$ im ['tmp_name']', поскольку это специфично для вашей системы, поэтому его 'clean' – Pogrindis

ответ

1

Если вы не хотите, чтобы обработать файл сначала вы можете использовать 'tmp_name' путь так ..

if(isset($_FILES['myimg'])){ 
echo exec('/usr/bin/tesseract '.$_FILES['myimg']['tmp_name'].' stdout', $msg); 
    print_r($msg); 
} 

Это может работать, но я не проверял ..

+0

Этот код по-прежнему не работает. Я думаю, главная проблема заключается в том, что 'tmp_name' является строкой без какого-либо суффикса, тогда как tesseract обрабатывает только файлы с jpg или tif-суффиксом. Я нахожу решение для копирования 'tmp_name' в'/tmp/mytmp.jpg', тогда все работает пальцем. Есть ли другой способ? –

+0

@ user3809822 Ну, тогда я боюсь, что вам нужно будет обработать файл первым! :) – Pogrindis

+0

Проблема решена путем изменения одного кавычки в двойной кавычки в вашем коде. Большое спасибо. –

0

Это некоторые из моих старых дневное исследование о Tesseract OCR.

http://amarchmike.blogspot.com/

для вашего вопроса я думаю, что вы что-то отсутствует попробовать этот

$im="/usr/bin/tesseract/image/test00.jpg" // change to image path 
echo exec("/usr/bin/tesseract $im "); // exec using double quote for variable representation 

и это как поддерживать стандартный вывод https://code.google.com/p/tesseract-ocr/wiki/ReleaseNotes на v3.03

+0

Да, для локального файла jpeg он отлично работает. Однако то, что я хочу сделать, это отправить изображение с лицевой стороны, а tesseract обработать его в бэкэнд. –

+0

@ user3809822 Да, при загрузке изображения с внешнего интерфейса на веб-сервер он создаст временный файл вашего загружаемого файла и представляет путь с свойством до используемого вами языка. Для PHP, $ _FILES ['FORMNAME'] ['tmp_name'] = temp path. – ZenithS