Nano Hash - криптовалюты, майнинг, программирование

Почему этот код ввода/вывода файла не работает в Eclipse/PyDev, но работает в терминале?

У меня есть рабочий код, в котором я использую tesseract для извлечения данных из файла изображения следующим образом:

if src:
    driver.get(src)
    driver.save_screenshot('/Users/username/script/' + 'test.png')
    image_name = 'test.png'
    im = Image.open(image_name)
    image_text = pytesseract.image_to_string(im)
    print '\nImage Text:\t', image_text

Этот фрагмент кода работает без каких-либо ошибок в терминале Mac, когда я выполняю код, но когда я делаю то же самое в Eclipse с помощью PyDev, он выдает ошибку:

Exception:  [Errno 2] No such file or directory

при попытке выполнить строку:

im = Image.open(image_name)

Почему это происходит в Eclipse?

ОБНОВЛЕНИЕ: поскольку мой код показался мало кому странным, я изменил его следующим образом, но проблема все еще остается (отлично работает на терминале Mac, но Eclipse продолжает выдавать ту же ошибку)

if src:
    driver.get(src)
    image_name = 'test.png'
    image_path = os.path.realpath(image_name)
    driver.save_screenshot(image_path)

    # read chart data from image
    im = Image.open(image_path)
28.11.2016

  • Я предполагаю, что изображение не находится в рабочем каталоге. Вы можете изменить рабочий каталог в конфигурации запуска или использовать абсолютное имя файла (с путем). 28.11.2016
  • Можете ли вы попробовать с полным путем для чтения изображения. Image.open(/Users/имя пользователя/script/test.png) 28.11.2016
  • @Клаус Д. изображение действительно находится в том же рабочем каталоге, и поэтому оно будет работать в терминале? 28.11.2016
  • @SunilT Я получаю то же исключение при использовании полного пути image_name = '/Users/username/script/test.png' 28.11.2016
  • Следуйте этому сообщению один раз-stackoverflow.com/questions/9765227/ 28.11.2016
  • @ShoaibAkhtar Я попробовал ваше предложение, но получил ту же ошибку curr_dir = os.getcwd() temp_name = 'test.png' image_name = os.path.join(curr_dir, temp_name) im = Image.open(image_name) 28.11.2016

Ответы:


1

Итак, наконец, разобрались с проблемой, используя трассировку, предложенную @Fabio. Это НЕ было связано с файлом изображения, отсутствующим в текущем каталоге, но с проблемой не нахождения тессеракта в пути.

Внутри файла pytesseract.py он гласит:

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'

Обратите внимание, что изменение файла pytesseract.py напрямую не является хорошей идеей, но в любом файле, который вы импортируете pytesseract, добавьте следующую строку (путь к tesseract будет зависеть от вашей конкретной машины... в Mac я смог найти путь с помощью which команда: which tesseract)

pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'
29.11.2016
  • @JonahGraham Спасибо, я уже нашел свое исправление и разместил его выше. 08.12.2016

  • 2

    Ваш код немного странный... вы сохраняете с путем, а затем просто используете image_name.

    Попробуйте это со следующим кодом:

    import os
    
    filename = '/path/to/the/image.png'
    driver.save_screenshot(filename)
    if not os.path.exists(filename):
        raise AssertionError("Image: %s does not exist" % (filename,))
    Image.open(filename)
    

    если это не работает, вставьте полное содержимое трассировки стека.

    28.11.2016
  • Я попробовал ваш код, и трассировка стека осталась прежней Exception: [Errno 2] No such file or directory 28.11.2016
  • Я обновил свой код на основе вашего комментария (см. Выше), но все еще то же исключение 28.11.2016
  • В вашем новом коде вы не добавили описанный выше вызов os.path.exists()... Кроме того, опубликуйте полное содержимое исключения, а не только последний бит. 28.11.2016
  • Это полное содержание исключения, см. скриншот по ссылке здесь. Я также включил ваш вызов os.path.exists(). 28.11.2016
  • Хм, в вашем предложении exclude вы не должны печатать исключение, как вы делаете, а скорее печатать его как: import traceback;traceback.print_exc() в вашем обработчике исключений, чтобы получить полную трассировку стека - PyDev на самом деле имеет шаблон для этого, так что вы можете написать printexc Ctrl+Space и получить это содержимое, написанное для вас ;) 28.11.2016
  • Спасибо за полезную информацию. Думаю, я бы чаще использовал трассировку в своем коде. Трассировка была длинной, поэтому я не мог опубликовать ее здесь, но она такая же, как this похоже, мне нужно изменить значение для настройки конфигурации в /usr/local/lib/python2.7/dist-packages/pytesseract/pytesseract.py 28.11.2016
  • Еще раз спасибо, трассировка была очень полезной. Проблема была устранена путем явного определения пути к tesseract, как указано в пакете pytesseract pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'. 28.11.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..