В течение последних 5 лет я изучал электрическую и компьютерную инженерию, и это изменило меня во многих отношениях. Я завел новых друзей, встретил интересных людей, работал и многому научился. Короче говоря, после бесчисленных занятий в начале утра и ночных напитков на прошлой неделе я закончил!
И это было здорово! Университет провел большую выпускную церемонию со всеми этими важными академическими людьми, родственниками, друзьями и более 90 выпускников. Мне нравятся эти церемонии. Все кажется такими счастливыми. Что может быть лучше, чтобы удержать это счастье от захвата его на фотографиях? Профессиональные фотографы, конечно, осознают это и всегда рядом. О, мальчик, их всегда много.
То, как это работает, десятки фотографов делают тысячи фотографий счастливых выпускников и их семей. Позже они загружают их копии с низким разрешением на веб -сайте, и студенты могут проверить их или даже купить их. Но существует проблема… Слишком много фотографий, и они не помечены.
Посмотрите на фотографии мой выпускной Анкет Мы говорим о 436 страницах с 24 картинками на общей сложности до 10 400 фотографий. Хуже всего то, что единственный способ найти конкретного человека – это пройти все эти фотографии вручную. Процесс, который с грубой оценкой займет до трех часов. Я имею в виду, я не самый оживленный человек в мире, но кажется, что это много времени для выбора нескольких фотографий.
Я сделал это через 20 -й странице, и мне уже было скучно. Я должен был быть другой способ, подумал я. Кроме того, если вам нужно делать то же самое более одного раза, компьютер может сделать это лучше, чем вы. Итак, я придумал простую идею. Что если бы я написал сценарий, чтобы соскрести все фотографии и пропустить их через какой -то алгоритм, который мог бы обнаружить мое лицо и вернуть только фотографии, на которых я нахожусь. Теоретически это должно работать, и теоретически это должно занять у меня менее трех часов.
Загрузка фотографий
Как я уже упоминал, веб -сайт, на который я нацелен, организован на страницах, а на каждой странице содержится 24 фотографии. Что мне нужен, так это сценарий, который может выполнять все эти страницы и загружать фотографии.
Сначала я намеревался написать все в Python, но после того, как я понял, как легко было бы написать простой сценарий Bash, используя силу Wget, я подумал, почему бы не сделать это вместо этого. Итак, вот это:
#!/bin/bash for i in {1..436} do wget -r -l1 -A.jpg https://www.example.com/events/view/1545?page=$i done
Честно говоря, не так много. Сценарий итерации проходит через каждую из 436 страниц и выполняет простую команду WGET для загрузки всех изображений JPG. Обратите внимание, что он использует опцию поиска WGET, что означает, что Wget Crawling по веб -странице следующие ссылки и каталоги. Вы можете узнать больше об этом интересном алгоритме Здесь Анкет Таким образом, Wget не будет просто скачать миниатюры картин, но и оригинальные. Некоторые дополнительные пиксели будут иметь решающее значение для алгоритма машинного обучения [спойлер] Я собираюсь использовать позже [/спойлер].
После выполнения сценарий заполнил папку с более или менее 10 400 фотографиями, готовыми к анализу. Ниже приведена небольшая часть из 10 400 изображений, которые были отменены с сайта.
Распознавание лица
Единственное, чего не хватает сейчас – это найти способ обнаружить мое лицо на всех этих изображениях. Хорошо, что у нас есть машинное обучение для этого! Существуют предварительно обученные модели и готовые к библиотекам повсюду, которые вы можете использовать в своем проекте и дать ему магические навыки.
Распознавание лица это отличная библиотека Python с открытым исходным кодом, которая может сделать именно это и рекламируется точность 99,38%, работая на вершине знаменитого dlib библиотека. Он в основном обеспечивает доступ к набору алгоритмов и работает как черный ящик, позволяя следующему:
- Найти лица на картинках
- Манипулируйте особенностями лица
- Определите людей, использующих их лица
Не погружаясь в слишком много деталей, я попытаюсь объяснить, как работает система, поэтому, надеюсь, она больше не будет черной ящиком. Чтобы найти лица, алгоритм преобразует картину в черно -белый, намереваясь справиться с просто яркостью, а не цветом. Рисуя небольшие векторы того, как меняется яркости (градиенты), он создает новое изображение, состоящее из функций, которые теперь можно сравнить с набором предварительно обработанных изображений лиц. Если они близки, обнаружено лицо.
Чтобы идентифицировать человека, алгоритм поиск в базе данных уже известных людей для человека, у которого самые близкие измерения к новой. Машинное обучение (да … Нет глубокого обучения, извините, я знаю, что сейчас жарко, но это не решение для всего), чтобы сделать эту классификацию с линейной SVM Classifier Анкет Чтобы узнать больше об этом процессе, я рекомендую прочитать гораздо более точное и углубленное объяснение Адама Гейтги Здесь Анкет
Применение распознавания лица
Вернемся к первоначальной проблеме сейчас. Идея состоит в том, чтобы использовать одно изображение моего лица, предпочтительно одно из выпускного дня, чтобы обучить библиотеку распознавания лица, а затем пройти каждую из 10 400 фотографий через алгоритм, которые вернут те, в которых я нахожу.
Мое лицо использовалось для тренировок:
Некоторые фотографии содержат несколько лиц, поэтому важно убедиться, что все они сравниваются с моими. Наконец, все мои фотографии хранятся в отдельной папке, поэтому их будет легче изучить их позже. Код Python, который понимает, что их можно найти ниже.
#import face_recognition from shutil import copyfile # Create an encoding of my facial features that can be compared to other faces picture_of_me = face_recognition.load_image_file("mavrodis.jpg") my_face_encoding = face_recognition.face_encodings(picture_of_me)[0] # Iterate through all the 10,460 pictures for i in range(1, 10461): # Construct the picture name and print it file_name = str(i).zfill(5) + ".jpg" print(file_name) # Load this picture new_picture = face_recognition.load_image_file(file_name) # Iterate through every face detected in the new picture for face_encoding in face_recognition.face_encodings(new_picture): # Run the algorithm of face comaprison for the detected face, with 0.5 tolerance results = face_recognition.compare_faces([my_face_encoding], face_encoding, 0.5) # Save the image to a seperate folder if there is a match if results[0] == True: copyfile(file_name, "/home/deeplearning/Desktop/my_face/mavrodis/" + file_name)
Это в значительной степени! Уведомление о строке 21, предоставляется конкретное значение (0,5). Это толерантность (или порог) алгоритма. Более высокая толерантность говорит, что алгоритм является менее строгим, а более низкий означает противоположное. Это займет некоторое время, так как он должен проверить все 10 000+ фотографий (но, безусловно, есть место для некоторой параллелизации).
Некоторые из фотографий, которые были автоматически обнаружены: TADA! Это успех!
Есть несколько вещей, которые мы должны заметить. На фотографиях есть водяные знаки, но распознавание лица не было никаких проблем с этим. Кроме того, алгоритм отлично подходит для групповых фотографий или фотографий, что лицо находится далеко от объектива камеры.
Точность
Около 160 фотографий были обнаружены с использованием этого алгоритма. Если вы считаете, что было 90 студентов, 400 картинок, некоторые из которых были групповыми фотографиями), это имеет смысл с точки зрения статистики. Тем не менее, я не могу обеспечить процент от точности, поскольку это потребовало бы, чтобы я прошел каждую из первоначальных 10 400 фотографий, чего я и намеревался избежать.
Я могу сказать вам, что существуют ложные срабатывания (люди заканчиваются в моей папке, не будучи мной) и что, вероятно, есть ложные негативы (фотографии меня, которые не оказались в моей папке), но в целом кажется, что нет многие из них.
Вывод
Теперь это было весело! По крайней мере, намного веселее, чем просмотреть все фотографии вручную. Я думаю, что это потребовалось меньше времени. Не говоря уже о том, что все мои друзья попросили меня запустить сценарий для их лиц. Я даже сделал это для некоторых родителей, которые были там. Разве не было бы неплохо увидеть что -то подобное, внедренное на веб -сайтах фото магазинов?
Билл Гейтс однажды сказал:
Я выбираю ленивого человека, чтобы сделать тяжелую работу. Потому что ленивый человек найдет простой способ сделать это.
Я говорю:
Если вы ленивый человек, дайте тяжелую работу компьютеру. Это сэкономит вам время и усилия.
Спасибо за чтение! Теперь ленивый человек должен найти деньги, чтобы купить некоторые из этих выпускных фотографий. Нет машинного обучения для этого, я думаю …
Оригинал: “https://dev.to/kmavrodis/going-through-10000-pictures-in-30-seconds-ad8”