ОБРАБОТКА ИЗОБРАЖЕНИЙ В HADOOP С ИСПОЛЬЗОВАНИЕМ MAPREDUCE
Hipi:
Hipi - это интерфейс обработки изображений Hadoop. Это обеспечивает набор инструментов и Inputformat для обработки большого количества изображений с использованием Hadoops Distributes File System (HDFS) и Mapreduce.
УЧАСТКИ ШАГИ:
В хипи весь процесс можно разделить на 2 части.
1) Преобразование всех изображений в общий файл (HIPI Image Bundle).
2) Обработка созданного объемного файла изображения с использованием форматов ввода изображений HIPI.
Отбор (класс обрезки) используется для фильтрации изображений с низкой четкостью или дефектами
ВОПРОСЫ С ХИПИ:
Чтобы смоделировать сценарий массовой обработки изображений, я использовал Java-программу для создания нескольких копий одного и того же изображения с разными именами в одном каталоге. затем с помощью утилиты HIPI я преобразовал все изображения в общий файл (известный как HIP-файл в HIPI).
Чтобы проверить, все ли изображения присутствуют в массовом файле, я сделал обратный процесс (преобразовал файл HIP в несколько изображений). Есть также другая утилита, которая делает то же самое. Но я не вернул все изображения и обнаружил, что с помощью HIPI я теряю некоторые изображения.
Я не смог продолжить работу с моим POC, используя HIPI, и подумал о создании новой инфраструктуры для обработки объемных изображений с помощью mapreduce.
НОВАЯ РАМКА ОБРАБОТКИ ИЗОБРАЖЕНИЙ:
Чтобы избежать появления нескольких карт (каждая на файл), мы должны делать то же самое, что и HIPI, то есть конвертировать все изображения в один файл пакета.
Этот пакетный файл предоставляется в качестве входных данных для map-Reduce. Формат ввода изображения анализирует файл пакета и создает объект буферизованного изображения, соответствующий каждому изображению.
ФОРМАТ ВВОДА ИЗОБРАЖЕНИЯ-ВАЖНЫЕ КЛАССЫ:
Image Combiner:
Объединяет несколько изображений в один пакетный файл.
ImageInputFormat:
Возвращает ImageRecordRreader и управляет разбиениями
ImageRecordReader:
Управляйте чтением каждого сплита.
Выполните начальный поиск указателя файла на начало каждого разбиения.
Метод nextKeyValue () считывает каждое изображение из разбиения и преобразует его в BufferedImage.
BufferedImageWritable:
Так как классы значений ключа карты Reduce должны быть сериализуемым типом, доступным для записи, мы не можем сохранять BufferedImage непосредственно как значение в методе карты.
Это класс-оболочка, который содержит в себе BufferedImage.
BufferedImageWritable
{
BufferedImage img;
@Override
public void readFields(DataInput arg0) throws IOException {
}
@Override
public void write(DataOutput arg0) throws IOException {
}
@Override
public int compareTo(byte[] o) {
return 0;
}
}
Не реализованы методы readFiled (), write (), compareTo (), поскольку в моем сценарии я не хочу сохранять маги обратно в HDFS.
Если вы хотите записать какие-либо изображения в HDFS (в режиме карты или уменьшения), вам, возможно, придется реализовать все эти методы. В write () вам может понадобиться написать логику для хранения изображения, как мы использовали для записи изображений при создании файла с массовыми данными. ReadFiled () должен содержать противоположную логику write (). Функция CompareTo () не нуждается в реализации, поскольку мы никогда не сохраняем это изображение в качестве ключа в map-Reduce (CompareTo () вызывается во время сортировки карты-Reduce).
Поскольку вы получаете изображение в виде BufferedImages (распространенного Java-класса для обработки изображений), большинство операций с ним легко выполнить. Но в случае HIPI изображение доступно в значении карты как класс FloatImage Hipi, и вы можете испытывать трудности при выполнении манипуляций поверх него.
Я успешно внедрил программу распознавания лиц, используя этот пользовательский формат ввода и OpenCV.
Код, который я использовал для разработки того же самого, скоро будет опубликован на GitHub
http://worldofbigdata -inaction.blogspot.in / 2017/02 / обработка-изображения-в-Hadoop-using.html