Я уже 17 лет занимаюсь 1С, и как 1С-ник только сейчас столкнулся с тем, что процесс загрузки фотографий в карточки товаров не автоматизирован. На реальном проекте, в котором стояла задача добавить около 40 тысяч фотографий, мы решили этот процесс автоматизировать со стороны 1С.
Зачем в 1С нужны фотографии товаров? Наверное, самый простой ответ, что они там не нужны. Но с ними удобней, ваши сотрудники начинают лучше разбираться в том, что вы продаете. Особенно, если ассортимент большой.
Настраивая работу 1С с интернет-магазинами, я столкнулся с проблемой, что многие интернет-магазины после запуска остаются в зачаточном состоянии, потому что, когда заказчик переходит к процессу добавления фотографий, все останавливается. Этот процесс – очень медленный, не автоматизированный.
И основная причина, почему заказчику нужны фотографии в 1С – это интернет-магазины. Тем более, что в 1С есть стандартная выгрузка в ходовые CMS для интернет-магазинов, в том числе в 1С-Битрикс.
Сразу скажу: если кого-то пугает, что будет расти база, в 1С есть возможность настроить внешнее хранилище этих фотографий.
Традиционный способ добавления фотографий в 1С
Традиционный способ загрузки фотографий в карточки номенклатуры предполагает, что фотографии в 1С загружаются как файлы с какого-то источника: флешки или жесткого диска.
Т.е. процесс фотографирования отдают аутсорсинговому фотографу, он делает какое-то количество этих фотографий, обрабатывает их и записывает на флешку.
Затем эту флешку передают контент-менеджеру, который начинает разбираться, какой товар на какой фотографии и к какой карточке товара прикреплять это фото.
Хорошо, если есть какой-то принцип, по которому можно определить принадлежность фотографии товару. Но чаще всего фотографии создаются независимо – фотограф даже не видит этого контент-менеджера, а контент-менеджер не видит фотографа.
Конвейер
Разбираясь в этой проблеме, мы решили сделать конвейер: фотокамера – > 1С.
Как специалист, у которого за спиной около десятка внедрений ERP и других проектов, считаю самым крутым следствием автоматизации то, что по результатам проекта можно освободить от работы ненужных 1-2-3 человека. Это же хорошо, когда автоматизация повышает эффективность оставшихся, и кого-то можно сократить.
В нашем случае мы убираем из традиционного процесса фотографа и учим фотографировать контент-менеджера. Просто подключаем камеру к 1С, добавляем кнопку «Получить фотографию», и с помощью нашей внешней обработки фотография из камеры попадает сразу в 1С, минуя флешку.
В 1С есть еще одна фишка, которая очень сильно ускоряет наш процесс – это сканер штрихкода.
Многие выгружают фотографии с камеры на флешку и сразу записывают в CMS. Но с нашей точки зрения эта ветка – тупиковая. Гораздо эффективнее находить нужный товар в 1С с помощью сканера штрих-кода – контент-менеджер сканирует товар, который кладет в лайтбокс, нажимает кнопочку «Сфотографировать», и фотография залетает в 1С.
Конечно, у такого конвейера есть проблемы: например, нужно настроить размер, камеру, фон, экспозицию, блики. Все это нужно настраивать не фотографу, а контент-менеджеру. Но все это решается – можно побороться, и все эти проблемы решить.
Как нейросеть спасла конвейер
Мы обрадовались, когда у нас появился такой крутой конвейер. Приходим к заказчику, а он говорит, что ему такой конвейер не подходит. Ему важно тщательным образом обрабатывать фотографии перед загрузкой на сайт в фоторедакторе, чтобы убрать с них все возможные артефакты. Причем, 90% редактирования занимает очистка фона.
А у нас давно была мысль в середину конвейера воткнуть функцию автоматического удаления фона с помощью какого-то внешнего сервиса. Например, с помощью сервиса remove.bg, у которого месячная аудитория – 30 млн пользователей.
Я снова пришел к заказчику и говорю, что мы можем прикрутить этот сервис – фотка будет залетать уже обработанная, и фоторедактор даже не надо будет открывать. Но нужно будет платить деньги сервису за каждую фотографию.
Заказчик отказался, потому что платить за каждую фотографию это регулярные затраты. У него в год две коллекции, огромное количество фотографий. Если за каждую платить, можно разориться.
Что делать? Я вернулся в отдел разработки и сказал программистам, что пришло время нам, 1С-никам, мобильным разработчикам, заняться нейросетями более плотно, чем мы планировали.
Мы взяли opensource-решение и модифицировали под нашу задачу – реализовали свою многоуровневую нейросеть для удаления фона. Причем, реализовали для нее API, аналогичное API сервиса remove.bg.
Результат работы нашей нейросети вы видите на слайде. По шнуркам видно, насколько качественно решается сложная задача. Фон удаляется буквально за 3 секунды.
Как все работает
Такого результата удалось добиться после 6 месяцев наших баталий с нейросетями.
Мы взяли opensource нейросеть, немного ее доработали и сделали из нее три нейросети:
-
первая делает маску низкого разрешения;
-
вторая – увеличивает;
-
третья делает самое сложное – хорошие грани.
Принцип работы нашей нейросети я описал на слайде. Тут все очень кратко, потому что я не ставил перед собой цель призвать вас повторять наш шестимесячный опыт.
Когда мы научили нашу разработку удалять фон у фотографии, я написал статью на Хабре, и мне стали писать в личку люди – один, второй, третий.
У нашего сервиса появился клиент, использующий его на правах неисключительной лицензии на своих мощностях. Ранее они пользовались другими сервисами, но по их признанию наша технология – лучшая на российском рынке. Это подтверждает качество.
Мы установили ограничение на обработку одной фотографии в 12 МБ, потому что на момент запуска сервиса у нас в качестве сервера использовался обычный компьютер моего сына с его игровой видеокартой. На слайде показано, как он выглядел.
Он просто стоял под столом, и мы на него положили бумажку с надписью «не трогай», чтобы его никто не выключал. На нем круглосуточно работали люди из многих стран. Примерно половина пользователей у нас из России, а остальные – это посетители из других стран.
Сейчас, когда наш сервис уже удачно взлетел в поиске, мы купили к нему стойку и дорогую видеокарту. Потому что нейросети на центральном процессоре работают в 20-30 раз медленнее, но все отлично работает на видеокарте.
У нас сейчас используются видеокарты трех предыдущих поколений:
-
одна видеокарта используется для тренировок;
-
а другая – для обработки фотографий в реальном времени: пользователи, которые заходят на сайт, обрабатывают изображения с ее помощью.
Нюансы тренировки нейросетей
Резко увеличить качество удаления фона нам удалось за счет дополнительной тренировки нейросети, когда мы начали скармливать ей свои наборы данных.
Напомню, что мы используем opensource нейросеть, а все opensource нейросети натренированы на открытых датасетах, которые в основном выкладывает Google. Это шаблонные датасеты, которые лежат в открытом доступе, и на них обычно тренируются нейросети.
Когда мы начали тренировать свою нейросеть на этих датасетах, она каких-то выдающихся результатов не показала. Потом мы поняли, что она на них уже натренирована, и начали давать ей новые датасеты.
Датасеты – это набор обычных картинок и точно таких же картинок с разметкой, как их надо обрабатывать. Из таких наборов пар фотографий создаются огромные датасеты.
Мы начали скармливать нашей нейросети свои наборы данных, и через какое-то время (процесс обучения может занимать больше 2 недель) она начала давать хороший результат.
Кстати, после публикации статьи на Хабре мне написал руководитель Яндекс.Толока и спросил, почему мы не пользуемся их сервисом, ведь он предназначен для создания размеченных датасетов. И для следующей тренировки мы планируем использовать Яндекс.Толоку.
Это – реальная фотография нашего клиента.
-
У него развернут лайтбокс, где стоит обувь и фотоаппарат Nikon, подключенный через usb к 1С.
-
На слайде не видно, но в 1С есть кнопочка «Сфотографировать».
-
Когда фотография залетает с фоном, рядом есть кнопка «Удалить фон». Контент-менеджер нажимает кнопочку, фон удаляется.
-
И остается нажать кнопку «Записать», чтобы записать фотографию в базу. Или во внешнее хранилище – тогда в базу записывается ссылка на эту фотографию.
-
В дальнейшем все эти фото стандартным обменом выгружаются в интернет-магазин.
-
Есть дополнительные опции: можно кадрировать, можно настроить обрезку краев, можно подставлять другой фон. По умолчанию фон прозрачный, а заливку можно установить любую – например, серую.
Расскажу о проблеме, которую мы долго не могли решить. При сдаче этого проекта существенной проблемой была белая обувь. На белом лайтбоксе она не видна, и при удалении фона возникают проблемы. Мы решили задачу простым способом – купили серую тряпку и завесили этот белый лайтбокс. Потом поставили белую обувь. Результат стал лучше. А потом стали использовать еще более темный материал – результат стал еще лучше.
Оценка эффективности
Я уже сказал, что, когда мы освободили фотографа от работы, мы сэкономили заказчику кучу денег.
-
В таблице приведены невысокие региональные цены, но можно понять, что затраты можно сократить в два раза, и вместо двух человек платить одному.
-
Объем производительности я тоже немного округлил – при текущей производительности один контент-менеджер может обрабатывать около 480-500 фотографий при восьмичасовом рабочем дне.
Все это работает на нашем сервисе.
У меня не было целью рассказать вам все, чтобы вы повторили весь процесс. Целью было рассказать о возможностях, которые могут принести эффект, чтобы вы тоже начали пользоваться нашей нейросетью.
Вот так выглядит кусок кода на JavaScript, который нужно вставить в свое решение, чтобы обратиться к нашему сервису по API.
Отправляете фотографию, получаете ее без фона. Есть дополнительные настройки, про них вы можете прочитать в документации к API. Их немного.
Хотелось сделать, чтобы в 1С код был небольшим, но не получилось. Там есть вызов одной функции, и для этого надо добавить около 250 строчек. И хотя 1С не очень приспособлена для работы в вебе, тем не менее, это можно сделать.
Бесплатный сервис или готовое решение
Хочу еще рассказать про компанию, которая просила увеличить допустимый размер передаваемой фотографии в 12 МБ. Мы сделали такое ограничение, потому что посчитали его допустимым для всех. Если его снять, кто-то закинет огромную фотографию, и другим мощности сервера не останется.
Оказалось, что это компания Сбертех, которой очень понравилось качество обработки, и ребята посчитали, что лучше воспользоваться готовым сервисом, а не тратить время на собственную разработку.
За дополнительную плату мы сняли им ограничение, и даже отдали им отдельную видеокарту. Сейчас они работают отдельно, мы по токену понимаем, что это Сбертех и направляем их в отдельный поток.
Наш сайт и сам сервис называется benzin.io.
Почему название benzin? Наш сотрудник Кирилл придумал такую концепцию: бензин смывает фон, и мы будем продавать этот бензин в «литрах», по одному на каждое фото. Мы сделали три тарифных плана – канистра (20 литров), баррель (200 литров) и цистерна (2000 литров). Но потом посмотрели, какой трафик у главного нашего конкурента remove.bg, сравнили его со своим смехотворным трафиком и убрали всю монетизацию.
Сейчас этот сервис бесплатный, в том числе, при работе по API.
И есть две готовые платные обработки, которые выложены на Инфостарте:
-
и вторая – которая удаляет фон на любом количестве товаров и подключается к камерам Nikon и Canon. Для подключения используются библиотеки изготовителя, над которыми мы сделали обертки. Если камеры работают по Wi-Fi, можно из модуля настроить подключение к ним по Wi-Fi.
Планы
Мы видим, что пользователей за пределами России у нас достаточно много. На текущий момент (прим. ред. ноябрь 2021 года) у нас 9000 зарегистрированных пользователей на сайте, из которых 7000 зарегистрировались в 2021 году. А так как 1С на Западе нет, мы планируем сделать этот сервис более абстрактным, не зависящим от какой-либо системы.
В частности, мы собираемся написать мобильное приложение, которое будет подключаться к камере и к CMS (к Битрикс, Wordpress, WooCommerce, Shopify), а кто-то, кому это нужно, напишет для CMS какой-то плагин.
-
В этом мобильном приложении можно будет получить всю базу товаров.
-
Открыть карточку какого-то товара
-
Получить по Wi-Fi фотографию с профессиональной камеры, например, Canon.
-
А затем отправить обратно в CMS.
Вопросы
Какие были примерно трудозатраты на создание сервиса?
Один full-time разработчик работал где-то 10 месяцев.
Как вы тренируете датасет?
Мы свой датасет тренировали уже четыре раза. В последний раз в датасете было больше 50 тысяч фотографий. Меньше 10 тысяч фотографий в датасет даже бессмысленно закидывать.
Фирма 1С обещала в будущих релизах платформы работу с нейросетями – можно будет обращаться к нейросетям, не выходя из 1С, не дергая какую-то стороннюю облачную систему. Как вы относитесь к такой возможности, не хотите их попросить, чтобы они это реализовали быстрее?
Работать с нейросетью локально на стандартных мощностях будет очень сложно – как минимум, в 30 раз медленнее. У нас есть компания-клиент, с которой мы договорились об использовании нашего сервиса на их мощностях, они для развертывания сервиса арендуют виртуалку на Амазоне, которая обходится им в 30 тысяч в месяц.
А вообще у меня скептические оценки таких перспектив. От того момента, когда 1С это сделает, до того момента, когда это уже можно будет использовать, наверное, пройдет не менее года.
Да и отдавать сервис в локальное использование нам невыгодно – от нас уйдут люди.
На чем вы сделали сервис?
Python, open source нейросеть. Мы сделали собственную связку из трех нейросетей. О технологии детально говорить не буду.
Там не очень много кода, но там очень много настроек, больше 30. Подкручивая их, можно что-то одно улучшить, что-то другое ухудшить.
Самая большая сложность – это обработка краев волос и растения. Потому что для обучения у нас нет подходящих датасетов. Зато с обувью все замечательно. И с электроникой тоже.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event.