Когда на улице возникает порыв «купить такой же автомобиль», как было бы здорово навести камеру на авто – и получить топ-5 вариантов похожих автомобилей и кредитное предложение от ВТБ? Наше приложение позволяет сразу же рассчитать условия по автокредитованию на выбранный автомобиль и подать кредитную заявку «в один клик» через мобильное устройство.
Основной флоу:
- Распознавание модели авто при помощи камеры, ML и AR (наведите камеру на понравившуюся машину и появится информация о модели авто, цене и количестве доступных предложений- Предложение альтернативной модели марки/модели автомобиля в случае, если приложение не может распознать авто (к примеру, приложение не может распознать "Ford Mondeo", но он похож на "Toyota Camry" и она будет предложена пользователю как альтернатива)
- Кредитный калькулятор (потрясите смартфон после распознавания авто и будет выполнен переход в кредитный калькулятор, где можно рассчитать условия по автокредиту)
- График платежей (после расчета условий по кредиту можно получить график платежей прямо в приложении)
- Оформление заявки на автокредит (оформите заявку на автокредит одним кликом после расчета условий и получите одобрение, после чего ожидайте звонок менеджера банка для оформления сделки)
Дополнительно предусмотрено:
- Раздел "Мои авто" (понравившиеся автомобили сохраняются в избранном, для дальнейшей возможности рассчитать кредитные условия)- Раздел "Маркетплейс" (ищите интересующие вас марки и модели автомобилей в отведенном для этого разделе приложения и рассчитайте кредитные условия по ним)
- Возможность распознавание модели авто по загруженному изображению из галереи (сделайте фото и загрузите его в приложение, чтобы узнать о модели авто, цене и количестве доступных предложений)
Мобильное приложение
- Swift (IOS)
- CoreML (IOS)
Приложение разработано под платформу IOS. Для реализации использовались язык программирования Swift и ядро CoreML. Так как мы используем ARkit (для распознавания авто достаточно навести на него камеру), нам потребовалось использование CoreML (Object Detection), чтобы не перегружать "мусором" API Car Recognition (т.е. в API не должны попадать кадры из потока в момент времени когда камера уже включена, но телефон еще не наведен на автомобиль). С помощью CoreML мы детектируем, что телефон наведен на автомобиль и можно делать вызов API Car Recognition.
API
Использовались все предоставленные организаторами API (Car Recognition, Car Loan, Calculator, Marketplace).
Дизайн
Для отрисовки прототипа и дизайна экранов использовалась Figma. Ссылка на макет.
Machine Learning
В рамках хакатона была решена опциональная задача по ML. Подробнее о ее решении рассказывается в отдельном репозитории.
Используется API Car Recognition, метод POST /car-recognize.
На вход передается изображение в base64.
Используется API Marketplace, метод GET /marketplace.
Обновляется при загрузке приложения.
Для поиска по Marketplace потребуются поля list.title и models.title (так как Car Recognition возвращает названия латиницей).
Экран "ARkit/UPLOAD"
Для вывода на экран понадобятся:
- Марка (list.titleRus)
- Модель (list.models.titleRus)
- Страна-производитель (list.country.title)
- Тип кузова (list.models.bodies.typeTitle)
- Количество предложений (list.currentCarCount)
- Цена "От" (list.models.minPrice)
- Есть спецпредложение (list.models.hasSpecialPrice)
Экран "Кредитный калькулятор"
Для вывода на экран понадобятся:
- Марка (list.titleRus)
- Модель (list.models.titleRus)
- Тип кузова (list.models.bodies.typeTitle)
- Фото тачки (list.models.bodies.photo)
Экран "Маркетплейс 1 (список марок)"
Для вывода на экран понадобятся:
- Логотип (list.logo)
- Марка (list.titleRus)
- Страна-производитель (list.country.title)
Экран "Маркетплейс 2 (список моделей)"
Для вывода на экран понадобятся:
- Логотип (list.logo)
- Марка (list.titleRus)
- Фото тачки (list.models.bodies.photo)
- Модель (list.models.titleRus)
- Тип кузова (list.models.bodies.typeTitle)
- Цена "От" (list.models.minprice)
- Количество предложений (list.currentCarCount)
Экран "Мои авто"
Для вывода на экран понадобятся:
- Марка (list.titleRus)
- Фото тачки (list.models.bodies.photo)
- Модель (list.models.titleRus)
- Тип кузова (list.models.bodies.typeTitle)
- Цена "От" (list.models.minprice)
- Количество предложений (list.currentCarCount)
Обработка остальных полей предусмотрена в дальнейшей разработке
Используется API Car Loan, метод POST /carloan
Экран "Оформление заявки на кредит"
Заполняем из формы в приложении:
- Email (customer_party.email)
- ФИО (customer_party.person.family_name, customer_party.person.first_name, customer_party.person.middle_name)
- Дата рождения (customer_party.person.birth_date_time)
- Телефон (customer_party.phone)
- Город (customer_party.birth_place)
Автоматом из предыдущего экрана подтягивается
- Сколько денег в наличии (customer_party.income_amount)
- Запрашиваемая сумма (requested_amount) Высчитываем ПОЛНАЯ СТОИМОСТЬ - СКОЛЬКО ДЕНЕГ В НАЛИЧИИ + СТОИМОСТЬ КАСКО
- Срок (requested_term)
- Марка машины (trade_mark)
- Стоимость машины (vehicle_cost)
- Дата заполнения (datetime)
- Ставка (interest_rate)
Из ответа разбираем:
- Статус заявки (application.decision_report.application_status)
- Комментарий (comment)
- Ежемесячный платеж (monthly_payment)
Для получения списка условий используем API Calculator, метод GET /settings. На вход подаем name (Haval) и language (ru-RU). В ответе нас интересует раздел "specialConditions".
Для расчета используем API Calculator, метод POST /calculate.
Экран "Кредитный калькулятор" Заполняем из формы в приложении:
- Первоначальный взнос (initialFee)
- Срок (term)
- Доп. условия (specialConditions)
Автоматически подтягивается:
- Полная стоимость автомобиля (cost)
- КАСКО (kaskoValue - при наличии 20% от стоимости автомобиля)
- Остаточный платеж (residualPayment = cost - initialFee + kaskoValue)
Экран "Расчет платежей"
Для вывода на экран понадобятся:
- Размер ежемесячного платежа (payment)
- Сумма кредита (loanAmount)
- Ставка (contractRate)
- Срок (term)
Для получения графика платежей используем API Calculator, POST /payments-graph.
Экран "Расчет платежей"
Автоматически подтягивается:
- Размер ежемесячного платежа (payment)
- Остаточный платеж (lastPayment)
- Сумма кредита (loanAmount)
- Ставка (contractRate)
- Срок (term)
Экран "Расчет платежей" (всплывашка)
Для вывода на экран понадобятся:
- № (order)
- Платеж (payment)
- Долг(debt)
- Процент (percent)
- Остаток (balanceOut)
- Проверить версию Xcode (требуется не ниже 12.0)
- Убедиться, что установлен
homebrew
- Зайти в корневую папку проекта и запустить из консоли скрипт
sh bootsrap.sh
- Открыть VTB.xcworkspace
Command + B
Наша команда:
- Иван Федоров (Product Owner )
- Виктор Волков (IOS Developer)
- Сергей Кудрявцев (Machine Learning)
- Наталья Федорова (Design)