Различная сумма потерь после такой же обработки любого изображения в Ubuntu 18.04 и Ubuntu 20.04

Когда я загружаю изображение через PIL в Python3, сохраняю его, а затем загружаю снова, я получаю разные значения в Ubuntu 18.04.5 и Ubuntu 20.04. .1. Я понимаю, что повторное сохранение изображения изменит значения из-за сжатия, но почему это изменение отличается в Ubuntu 18.04? Все остальные ОС, которые я пробовал (Ubuntu 20.04+, Fedora 33, Windows 10 20H2), дают одно значение, но Ubuntu 18.04 отличается, даже когда во всех вышеупомянутых операционных системах были одинаковые версии подушек / PIL, numpy и python.

Загрузка изображения

img = Image.open('Sp_D_CNN_A_art0024_ani0032_0268.jpg')
np.sum(np.array(img))
OUTPUT : 28586794    (Same for all the OS)

Сохранение и загрузка дубликата изображения

img.save('temp.jpg', 'JPEG')
tempimg = Image.open('temp.jpg')
np.sum(np.array(tempimg))
OUTPUT : 28581417    (for Ubuntu 18.04.5 and CentOS 8.2.2004)
         28582606    (for Ubuntu 20.04+, Fedora 33, Windows 10 20H2)

Теперь разница здесь может показаться очень небольшой, но проблема в том, что после дальнейшей обработки моим алгоритмом анализа уровня ошибок разница становится огромной, и когда я обучил свою модель сегментации на Google Colab (который использует Ubuntu 18.04.5 во время выполнения) сгенерированная маска оказывается очень неточной в Ubuntu 20.04+, Fedora 33, Windows 10 20H2.

Почему это происходит и как я могу это исправить?

0
задан 30 November 2020 в 07:34

1 ответ

Виновником этого является базовая версия libjpeg, используемая библиотекой подушки (PIL). Хотя и Ubuntu 18.04.5, и Ubuntu 20.04.1 имеют один и тот же пакет libjpeg, версия подушки, установленная по умолчанию в Ubuntu 18.04.5, имеет свои собственные двоичные файлы. Таким образом, решение для этого состоит в том, чтобы удалить текущую подушку и переустановить ее, загрузив и собрав ее из исходного кода, чтобы она гарантированно использовала системный libjpeg.

Сначала удалите текущий модуль подушки

python3 -m pip uninstall Pillow

Затем просто установите пакеты зависимостей, перечисленные здесь: https://pillow.readthedocs.io/en/stable/installation.html#building-on-linux

Затем запустите:

python3 -m pip install Pillow --no-binary :all:
0
ответ дан 30 November 2020 в 04:33

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

Похожие вопросы: