Популярный украинский сервис такси Uklon регулярно устраивает розыгрыши среди своих водителей и клиентов. По результатам каждого розыгрыша они публикуют на свою facebook страницу видео с контактными данными участников: имя и адрес электронной почты (пример, видео удалили). Фрагмент кадра:
В оригинальном видео адреса не размыты, их для статьи размыл я, чтобы не распространять эти данные дальше. На мое письмо в их поддержку, что это не очень хорошая идея:
Они ответили, что им все равно:
Поэтому я решил написать небольшой пост, как можно получить контактные данные с видео, не используя какие-то специальные умения. Дисклаймер: этот пост носит образовательный характер, и демонстрирует как не стоит обращаться с данными клиентов.
Есть много сервисов для скачивания видео с facebook. Я воспользовался http://www.fbdown.net/, он дает прямую ссылку на видео. Все последующие примеры будут на Убунте, но должны аналогично работать и в других ОС.
В исходном видео список контактов показан в первых 17 секундах видео. С помощью ffmpeg мы сохраняем первые 17 секунд видео, как последовательность png изображений:
Для распознавания мы будем использовать свободный OCR tesseract. Который довольно неплохо работает, но чувствителен к качеству исходных изображений.
Обрежем все лишнее используя ImageMagick
с кадров (начиная с координат 40, 202 и размеров 345x421).
Должно получиться как на картинке справа, без размытия конечно же.
Tesseract плохо определяет небольшие буквы, поэтому в его мануале рекомендуют просто увеличить скриншоты в 2-3 раза:
Приходимся по всем файлам и распознаем. Ключом -psm 4 мы указываем, что хотим чтобы tesseract воспринимал текст как одну колонку. А ключом load_system_dawg=0, что не надо использовать словари при распознавании:
Удаляем дубликаты — и наша база готова:
В результате работы в базе довольно много ошибок. И есть два варианта улучшения:
В любом случае цель статьи было показать не качество распознавания, а принципиальную возможность сделать это быстро и с минимальными ресурсами.
В 2012 глава Государственной службы Украины по вопросам защиты персональных данных давал комментарий, что даже база электронных адресов попадает под действия Закона Украины «О защите персональных данных». И соответственно публикация таких данных может повлечь за собой административную или уголовную ответственность. (источник, укр.)
Сервис ответил на мою статью, что не считает базу электронных адресов персональными данными:
Это, как мне кажется, правильное решение с их стороны:
В оригинальном видео адреса не размыты, их для статьи размыл я, чтобы не распространять эти данные дальше. На мое письмо в их поддержку, что это не очень хорошая идея:
Добрый день!
Нельзя в видео (ссылка) выкладывать адреса и имена людей.
1. Во-первых, ваши конкуренты могут получить список ваших клиентов и водителей
2. Во-вторых, вы нарушаете закон Украины про доступ к персональным данным
Они ответили, что им все равно:
Здравствуйте, Денис, при регистрации каждый пользователь дает согласие на использование его персональных данных uklon.com.ua/document/useragreement — пункт 2.6. Большое спасибо за ваш отзыв.
Поэтому я решил написать небольшой пост, как можно получить контактные данные с видео, не используя какие-то специальные умения. Дисклаймер: этот пост носит образовательный характер, и демонстрирует как не стоит обращаться с данными клиентов.
1. Скачиваем видео
Есть много сервисов для скачивания видео с facebook. Я воспользовался http://www.fbdown.net/, он дает прямую ссылку на видео. Все последующие примеры будут на Убунте, но должны аналогично работать и в других ОС.
2. Разбиваем на кадры
В исходном видео список контактов показан в первых 17 секундах видео. С помощью ffmpeg мы сохраняем первые 17 секунд видео, как последовательность png изображений:
$ ffmpeg -i video.mp4 -t 00:00:17 out%d.png
3. Подготавливаем к OCR
Для распознавания мы будем использовать свободный OCR tesseract. Который довольно неплохо работает, но чувствителен к качеству исходных изображений.
Обрежем все лишнее используя ImageMagick
с кадров (начиная с координат 40, 202 и размеров 345x421).
convert '*.png[345x421+40+202]' thumbnail%03d.png
Должно получиться как на картинке справа, без размытия конечно же.
Tesseract плохо определяет небольшие буквы, поэтому в его мануале рекомендуют просто увеличить скриншоты в 2-3 раза:
convert thumbnail*.png -filter Lanczos -resize 300% final%d.png
4. Распознавание
Приходимся по всем файлам и распознаем. Ключом -psm 4 мы указываем, что хотим чтобы tesseract воспринимал текст как одну колонку. А ключом load_system_dawg=0, что не надо использовать словари при распознавании:
for i in final*.png; do tesseract $i stdout -psm 4 -l eng+rus -c load_system_dawg=0; done > text.txt
Удаляем дубликаты — и наша база готова:
sort -u text.txt > uniq.txt
Выводы
В результате работы в базе довольно много ошибок. И есть два варианта улучшения:
- использовать коммерческие OCR;
- настроить шаблоны для tesseract, чтобы он знал, что мы распознаем адреса электронной почты.
В любом случае цель статьи было показать не качество распознавания, а принципиальную возможность сделать это быстро и с минимальными ресурсами.
Update: Законность действий сервиса
В 2012 глава Государственной службы Украины по вопросам защиты персональных данных давал комментарий, что даже база электронных адресов попадает под действия Закона Украины «О защите персональных данных». И соответственно публикация таких данных может повлечь за собой административную или уголовную ответственность. (источник, укр.)
Update 2: Комментарии сервиса
Сервис ответил на мою статью, что не считает базу электронных адресов персональными данными:
Здравствуйте, Денис, мы прочли вашу статью. Персональные данные – сведения или совокупность сведений о физическом лице, которое идентифицировано или может быть конкретно идентифицировано; Это сведения, по которым можно идентифицировать физическое лицо. К таким сведениям относятся фамилия, имя, отчество; дата и место рождения, адрес и телефон; идентификационный код; паспортные данные; документы об образовании и другое.
Update 3: Сервис удалил видео с контактами со своей страницы
Это, как мне кажется, правильное решение с их стороны:
Добрый день, по причине беспокойства пользователей о безопасности своих персональных данных, команда онлайн сервиса вызова авто “Uklon”, приняла решение о размещении не всей информации об участнике (победителе) акции, а именно, размещать только Ф.И.О. победителей в дальнейших розыгрышах.
Напомним, что ранее мы публиковали имя или никнейм и электронную почту пользователя в программе random.org.
При этом хотим отметить, что принимая участие в акции, пользователь соглашается на использование и публикацию его персональных данных,
согласно Правилам акции, которые всегда размещаются на официальном сайте Уклон, и условия которых принимают все участники акции, говориться, что каждый Участник Акции свидетельствует и подтверждает, что ознакомлен с правами, которые касаются его персональных данных, а также с тем, что его добровольно предоставленные персональные данные являются согласием на их обработку и распространение (распространение) Организатором / Исполнителем Акции по своему усмотрению любыми способами с маркетинговой, рекламной и / или любой другой целью, не противоречащей законодательству Украины. Указанное согласие дано с учетом требований ст.7, ст. 8 и ст. 11 Закона Украины «О защите персональных данных» и действует бессрочно и без ограничения территории действия.