SlideShare a Scribd company logo
1 of 42
Download to read offline
Анонимизация фото
с помощью Vision
Тимофей Хомутников, Avito
Проблема
2
Проблема
3
Проблема
4
Мотивация
5
• Конфиденциальность
• Суеверие
• Комплексы
• Конфиденциальность
• Суеверие
• Комплексы
6
7
8
Мотивация
9
• «Все закрашивают, и я закрашу»
• Плохая примета
• Страх перед мошенниками
• Могут узнать знакомые
• «Все закрашивают, и я закрашу»
• Плохая примета
• Страх перед мошенниками
• Могут узнать знакомые
Фильтры v.1
Система фильтров:
• Лица
• Номера
• Цветокоррекция
10
Система фильтров:
• Лица
• Номера
• Цветокоррекция
Фильтры v.1
Система фильтров:
• Лица
• Номера
• Цветокоррекция
11
• Свидетель
DeepBeliefSDK
12
• Большая модель
• Нет номеров
• Медленная
• Сторонний фреймворк 😱
• Большая модель
• Нет номеров
• Медленная
• Сторонний фреймворк 😱
[
"minivan",
"minibus",
"garbage truck",
"cab",
"tractor",
"harvester",
"limousine",
"ambulance",
"fire engine",
"steam locomotive",
"tow truck",
"car wheel",
"racer",
"car mirror",
"moving van",
"motor scooter",
"snowplow",
"grille"
]
Vision
• Не требует дополнительную модель
• Высокие скорость и точность
• Фичеринг 👀
13
• Не требует дополнительную модель
• Высокие скорость и точность
• Фичеринг 👀
Лица
14
let request = VNDetectFaceRectanglesRequest { [weak self] request, error in
guard let observations = request.results as? [VNFaceObservation]
...
}
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try handler.perform([request])
Лица
15
let request = VNDetectFaceRectanglesRequest { [weak self] request, error in
guard let observations = request.results as? [VNFaceObservation]
...
}
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try handler.perform([request])
Лица
16
let request = VNDetectFaceRectanglesRequest { [weak self] request, error in
guard let observations = request.results as? [VNFaceObservation]
...
}
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try handler.perform([request])
Лица
17
let request = VNDetectFaceRectanglesRequest { [weak self] request, error in
guard let observations = request.results as? [VNFaceObservation]
...
}
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try handler.perform([request])
Лица
18
let request = VNDetectFaceRectanglesRequest { [weak self] request, error in
guard let observations = request.results as? [VNFaceObservation]
...
}
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
try handler.perform([request])
Номера
19
Алгоритм
• Предварительный поиск номера
• Нормализация номера
• Распознавание текста
20
• Предварительный поиск номера
• Нормализация номера
• Распознавание текста
Контурный анализ
21
Анализ части границ
22
Гистограммный анализ
23
Что не так?
24
• Жесткие требования к границам и качеству
• Сложные вычисления
• Сторонние зависимости 😱
• Жесткие требования к границам и качеству
• Сложные вычисления
• Сторонние зависимости 😱
Обученая модель
25
Плюсы
26
• Core ML
• Качество
• Core ML
• Качество
Минусы
27
• Отсутствие готовой
модели
• Увеличение веса
приложения 😱
• Отсутствие готовой
модели
• Увеличение веса
приложения 😱
Text detection
28
• Границы номера
• Количество символов
• Скорость
• Размер 🎉
• Границы номера
• Количество символов
• Скорость
• Размер 🎉
Результат
29
VNTextObservation
30
open var characterBoxes: [VNRectangleObservation]? { get }
open class VNRectangleObservation: VNDetectedObjectObservation {
open var topLeft: CGPoint { get }
open var topRight: CGPoint { get }
open var bottomLeft: CGPoint { get }
open var bottomRight: CGPoint { get }
}
Валидация номера
31
struct LicensePlateSpec {
// минимально обнаруживаемые символы в номере
let primaryNumbersMinCount = 6
// максимальное число символов в регионе
let regionNumbersMaxCount = 3
}
Результат
32
Результат
33
Валидация номера
34
// максимально занимаемая область на фото
let maxRatioToPhoto: CGFloat = 0.25
// минимальное соотношение сторон
let minimumAspectRatio: CGFloat = 0.1
// 0 - максимальное соотношение сторон
let maximumAspectRatio: CGFloat = 0.4
Результат
35
Валидация номера
36
struct LicensePlateSpec {
let primaryNumbersMinCount = 6
let regionNumbersMaxCount = 3
let maxRatioToPhoto: CGFloat = 0.25
let minimumAspectRatio: CGFloat = 0.1
let maximumAspectRatio: CGFloat = 0.4
}
Демо
37
38
Плюсы
39
• Нет новых зависимостей
• Скорость
• Фичеринг $
• Нет новых зависимостей
• Скорость
• Фичеринг $
Минусы
40
• iOS 11 only
• Костыли ¯_(ツ)_/¯
• iOS 11 only
• Костыли ¯_(ツ)_/¯
Paparazzo
41
• Делать фото
• Забирать фото из галереи
• Поворачивать/обрезать
• Применять фильтры
• Делать фото
• Забирать фото из галереи
• Поворачивать/обрезать
• Применять фильтры
42
Тимофей Хомутников, Avito

More Related Content

More from AvitoTech

Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)AvitoTech
 
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoTech
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоAvitoTech
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий БогомоловAvitoTech
 
TableKit - Максим Соколов
TableKit - Максим СоколовTableKit - Максим Соколов
TableKit - Максим СоколовAvitoTech
 
Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)AvitoTech
 
SimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоSimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоAvitoTech
 
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 Как перестать бояться и начать контрибьютить - Алексей Кудрявцев Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
Как перестать бояться и начать контрибьютить - Алексей КудрявцевAvitoTech
 
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the AirAvitoTech
 
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb..."ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...AvitoTech
 
ASO for iOS 11
ASO for iOS 11ASO for iOS 11
ASO for iOS 11AvitoTech
 
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)AvitoTech
 
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...AvitoTech
 
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)AvitoTech
 
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)AvitoTech
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...AvitoTech
 
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовКонкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовAvitoTech
 
Конкурс Авито-2017 - Решение 3ое место
Конкурс Авито-2017 - Решение 3ое местоКонкурс Авито-2017 - Решение 3ое место
Конкурс Авито-2017 - Решение 3ое местоAvitoTech
 
Конкурс Авито-2017 - Решение победителя
Конкурс Авито-2017 - Решение победителяКонкурс Авито-2017 - Решение победителя
Конкурс Авито-2017 - Решение победителяAvitoTech
 
Avito Recommendations Contest - Михаил Каменщиков
Avito Recommendations Contest - Михаил КаменщиковAvito Recommendations Contest - Михаил Каменщиков
Avito Recommendations Contest - Михаил КаменщиковAvitoTech
 

More from AvitoTech (20)

Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
 
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий Богомолов
 
TableKit - Максим Соколов
TableKit - Максим СоколовTableKit - Максим Соколов
TableKit - Максим Соколов
 
Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)
 
SimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоSimplePEG - Алексей Охрименко
SimplePEG - Алексей Охрименко
 
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 Как перестать бояться и начать контрибьютить - Алексей Кудрявцев Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
 
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb..."ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
 
ASO for iOS 11
ASO for iOS 11ASO for iOS 11
ASO for iOS 11
 
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
 
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
 
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
 
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
 
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовКонкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
 
Конкурс Авито-2017 - Решение 3ое место
Конкурс Авито-2017 - Решение 3ое местоКонкурс Авито-2017 - Решение 3ое место
Конкурс Авито-2017 - Решение 3ое место
 
Конкурс Авито-2017 - Решение победителя
Конкурс Авито-2017 - Решение победителяКонкурс Авито-2017 - Решение победителя
Конкурс Авито-2017 - Решение победителя
 
Avito Recommendations Contest - Михаил Каменщиков
Avito Recommendations Contest - Михаил КаменщиковAvito Recommendations Contest - Михаил Каменщиков
Avito Recommendations Contest - Михаил Каменщиков
 

"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito