Как исправить 'JSONDecodeError', который возникает из-за чтения изображения из URL при конвертации в .exe с помощью pyinstaller - PullRequest
0 голосов
/ 07 июня 2019

Я использую Tkinter в python для чтения изображения с URL-адреса, извлечения текста с помощью Tesseract-OCR и отображения его на холсте Tkinter. Проект почти завершен, но когда я пытаюсь преобразовать файл python в файл .exe, появляется JSONDecodeError. Код работает отлично, пока я не запустил его, используя IDLE.

Я пытался использовать запросы, чтобы получить URL и прочитать изображение, но мне не удалось это сделать. и поэтому я использовал «urllib.request.urlopen (url)». Но во время преобразования в .exe с помощью pyinstaller всплывает «JSONDecodeError» и преобразование останавливается. Pyinstaller раньше конвертировал файл .py в файл .exe, прежде чем я установил модуль (тот, который читает изображение из URL). Как мне это решить?

Вот небольшая часть кода:

import urllib.request

if url=="":
    tk.messagebox.showerror("ERROR","Enter a URL!!!")
img=urllib.request.urlopen(url)
self.tesseract(Image.open(img),root)

Это ошибка, которую я получаю

  File "c:\users\aayush.gour\appdata\local\programs\python\python36\lib\site-pac
kages\PyInstaller\hooks\hook-PyQt5.py", line 23, in <module>
    collect_system_data_files(pyqt5_library_info.location['PrefixPath'],
  File "c:\users\aayush.gour\appdata\local\programs\python\python36\lib\site-pac
kages\PyInstaller\utils\hooks\qt.py", line 67, in __getattr__
    qli = json.loads(json_str)
  File "c:\users\aayush.gour\appdata\local\programs\python\python36\lib\json\__i
nit__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "c:\users\aayush.gour\appdata\local\programs\python\python36\lib\json\dec
oder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "c:\users\aayush.gour\appdata\local\programs\python\python36\lib\json\dec
oder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

1 Ответ

0 голосов
/ 24 июня 2019

Ну, оказывается, я нашел ответ на свой вопрос.Ответ на этот вопрос состоит из 2 частей.

Часть 1

Вместо использования urllib.request я использовал io из библиотеки skimage.Это было намного проще.Вот код (я использую Python 3.6.8)

from skimage import io
url="https://SomeUrlForAnImage.com"
img=io.imread(url)
self.tesseract(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), root)

Я использовал функцию cv2.cvtColor(img, cv2.COLOR_BGR2RGB) для преобразования изображения из цветовой кодировки BGR в RGB.

Часть 2 - Обновление Pyinstaller

Если вы использовали pip install pyinstaller для установки pyinstaller, то удалите его с помощью pip uninstall pyinstaller и установите последнюю версию из здесь .Скачайте zip-файл и распакуйте его с помощью WinRar или любого другого программного обеспечения, такого как 7z.Откройте командное окно в извлеченной папке и введите python setup.py install.Это установит последнюю версию pyinstaller на ваше устройство.Большинство ошибок можно устранить, установив последнюю версию самого pyinstaller.

...