Найти - Пользователи
Полная версия: Как узнать разрешение изображения по URL, используя python-2.7?
Начало » Python для новичков » Как узнать разрешение изображения по URL, используя python-2.7?
1 2
dmitriigoog
Имеется список URL'ов картинок форматов jpg, jpeg, png (около 100к шт.). Необходимо без загрузки узнать: не меньше ли это изображение чем 640х480
scidam
 import urllib
>>> url=urllib.urlopen('http://python.su')
>>> url.headers.keys()
['content-length', 'vary', 'server', 'connection', 'date', 'content-type']
>>> url.headers['content-length']
'96309'

Далее, нужно загрузить, скажем, 100 изображений различных. Найти минимальный размер в байтах того из этих изображений, которое больше 640x480. Найти долю изображений по размеру больших найденного минимального размера, но не являющиеся большими 640x480 (9000x90 например не является большим, т.к. 90<480).
Если размер в байтах у проверяемого изображения больше найденного минимального, то можно считать, что он больше 640x480 с ошибкой приблизительно равной найденной доли

Многое, однако, в этом случае, зависит от 100 тестовых изображений, насколько они репрезентативны в отношении 100k изображений, которые планируется проверять.



Rodegast
> Далее, нужно загрузить, скажем, 100 изображений различных

ТС ничего загружать не хочет. Он думает что разрешение передаётся по интернет-протоколу.

> Найти минимальный размер в байтах того из этих изображений, которое больше 640x480…Многое, однако, в этом случае, зависит от 100 тестовых изображений

Вот ты сейчас какую-то ерунду написал.
scidam
Rodegast
Вот ты сейчас какую-то ерунду написал.
Вполне возможно, ночь не спал… смысл в общем должен быть такой: размер изображения, в принципе, можно получить через content-length. Теперь, чтобы принимать решение о том, большее оно 640x480 или нет (будем считать, что изображение больше 480x640 (определим такой класс) если оба w и h его больше соответствующих значений), нужно попытаться построить решающее правило, для этого я предложил сформировать выборку из малого числа (100) изображений, и оценивать принадлежность классу “больше 640x480” на основе размера изображения. Это конечно будет давать возможно большую ошибку. Но если изображения более менее похожи по соотношению сторон, цветовому набору, сжаты одинаково, может и сработает, т.е. результат будет лучше случайного гадания.
Rodegast
> будем считать, что изображение больше 480x640 (определим такой класс) если оба w и h его больше соответствующих значений

Это не правильно. Разрешение это площадь в пикселах которую будет занимать изображения, по этому что-бы сравнить размер изображения нужно сначала вычислить количество пикселей. Например:
 >>> 640 * 480 > 9000 * 90
False
scidam
Постановка задачи неопределенная:
dmitriigoog
не меньше ли это изображение чем 640х480

Я потому и написал, что “определим такой класс изображений”. Я понял, что понятие “не меньше” чем 640x480 подразумевает, что соответствующие размеры изображения не меньше данных значений, т.е. 640 и 480.
Определение через число пикселей, конечно, более естественное, и с ним подход с обучением будет работать еще лучше;
passant
Вклинюсь в вашу беседу. Мне кажется, что задача сформулирована изначально неправильно. Дело в том, что размер файла формата jpeg не зависит (а уж линейно - тем более) от размера файла. Кто не верит - тривиальный пример: генерируем две картинки одного размера, одну заливаем одним цветом, вторую - случайным образом зашумляем. (В Фотошопе - в один клик) потом сравниваем результаты. Поэтому, даже применяя методы машинного обучения, вначале надо выяснить, что картинки как минимум однотипны, потом строить кластеры, потом - обучать классификатор, потом - получать результат с весьма немалой ошибкой. Я думаю, топикстартер не этого ожидал. " без загрузки узнать: не меньше ли это изображение чем 640х480" - не представляется возможным, по крайней мере с достаточно степенью надежности результата.
FishHook
passant
что размер файла формата jpeg не зависит (а уж линейно - тем более) от размера файла

Может быть подумаете еще раз?
passant
FishHook
Может быть подумаете еще раз?

В прикрепленном архиве три файла:
1. Файл 1.jpg. Линейный размер 200х143 пикселя. Физический размер - 61Кб.
2. Файл 2.jpg. Линейный размер 200х143 пикселя. Физический размер - 11Кб.
3. Файл 3.jpg. Линейный размер 600х600 пикселя. Физический размер - 33Кб.
Подумал.
Зависимости физического размера файла от линейного размера для jpg-файлов - не нашел.
Соответственно предполагаю, что по физическому размеру вычислить (или даже оценить) линейный размер jpg-файлов - невозможно.
В чем моя ошибка?
dmitriigoog
есть довольно простое решение при условии скачивания картинки. может быть при отсутствии альтернативных решений можно сделать так: скачать указанную картинку по урл -> проверить её разрешение -> при условии <= 640*480 - проиндексировать для дальнейшей работы -> при уловии => 640*480 пропустить -> удалить картинку из загрузок. Как считаете, заработает?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB