9. Мотивация
9
• «Все закрашивают, и я закрашу»
• Плохая примета
• Страх перед мошенниками
• Могут узнать знакомые
• «Все закрашивают, и я закрашу»
• Плохая примета
• Страх перед мошенниками
• Могут узнать знакомые
12. 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"
]
13. Vision
• Не требует дополнительную модель
• Высокие скорость и точность
• Фичеринг 👀
13
• Не требует дополнительную модель
• Высокие скорость и точность
• Фичеринг 👀
14. Лица
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. Лица
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. Лица
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. Лица
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. Лица
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])
20. Алгоритм
• Предварительный поиск номера
• Нормализация номера
• Распознавание текста
20
• Предварительный поиск номера
• Нормализация номера
• Распознавание текста
24. Что не так?
24
• Жесткие требования к границам и качеству
• Сложные вычисления
• Сторонние зависимости 😱
• Жесткие требования к границам и качеству
• Сложные вычисления
• Сторонние зависимости 😱
30. 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. Валидация номера
31
struct LicensePlateSpec {
// минимально обнаруживаемые символы в номере
let primaryNumbersMinCount = 6
// максимальное число символов в регионе
let regionNumbersMaxCount = 3
}
34. Валидация номера
34
// максимально занимаемая область на фото
let maxRatioToPhoto: CGFloat = 0.25
// минимальное соотношение сторон
let minimumAspectRatio: CGFloat = 0.1
// 0 - максимальное соотношение сторон
let maximumAspectRatio: CGFloat = 0.4