В первой части мы рассказали о пилоте и первых версиях системы Smart Timber для измерения и учета объемов древесины, внедрении продукта у клиента и переходе от технического наполнения к продуктовой составляющей решения. 

Сегодня в блоге ЛАНИТ мы подробно остановимся именно на технических решениях, которые сделали возможной работу системы в полевых условиях. 

Зачем нужен оффлайн-режим

Зачастую решения на базе машинного обучения (особенно сейчас — с расцветом трансформеров, VLM и LLM) строятся по принципу централизованной обработки данных: мобильное приложение делает снимок, отсылает его на высокопроизводительный сервер и за секунды получает ответ с результатом. Но на делянке в лесу или на сплаве часто нет мобильного интернета — это факт, с которым нам пришлось смириться сразу. Поэтому в архитектуру мы заложили работу мобильного приложения полностью оффлайн, а отправку данных на сервер реализовали через синхронизацию. При появлении связи приложение выгружает накопленные данные (снимки, разметку и расчёты) и обновляет справочники.

Весь процесс обработки измерения пришлось реализовывать непосредственно на мобильном устройстве, что наложило свои ограничения на размеры моделей и потребовало разработки UI, позволяющего выполнять обработку замеров руками в зимних перчатках.

Как работает технология

Решение работает на базе компьютерного зрения и машинного обучения. В его основе — классический фотограмметрический метод, основанный на измерениях по фотографии с использованием эталонного предмета (его еще называют «метод масштабов»).

  1. Поскольку камера является угломерным инструментом, она позволяет сопоставить (например, через модель камеры и матрицы калибровки) каждому пикселю направление (луч) в пространстве.

2. Между лучами (т.е. между двумя интересующими нас точками) можно определить угол (α = atan(y_a/f)-atan(y_b/f)), но при этом для определения метрического размера видимого объекта (h1 или h2) нам не хватает расстояния до него (x1 или x2).

3. Чтобы определить масштаб, делаются следующие предположения:

a. все измеряемые точки лежат в одной плоскости (в среднем);

b. мы можем задать в этой плоскости объект известного размера, т.е. эталон: линейку или какой-нибудь еще известный предмет. Другие участники рынка пытались использовать треугольный знак аварийной остановки или номерной знак прицепа, но где-то просчитались — всего 1 см ошибки на метровом эталоне приводит к погрешности в 3% в объеме. Поэтому для достижения требуемой точности нам важно иметь эталон достаточно длинный (1 м — OK) и с точно определенными границами. А номерной знак ещё и не лежит в нужной плоскости.

Эталонная линейка может быть как достаточно простой, так и весьма продвинутой. Пару лет назад мы реализовали автоматическое обнаружение эталона, что позволило ускорить работу оператора и исключить человеческий фактор на этапе разметки.

В оригинальном методе масштабов делается еще одно важное допущение: плоскости сенсора камеры и бревен строго параллельны, что бывает трудно реализовать на практике — часто штабель имеет высоту 5-10 м (да, нельзя, но очень хочется), а если мы будем держать смартфон строго вертикально на высоте 1,5-1,7 м, почти половину кадра будет занимать земля и штабель просто не поместится в кадре. Поэтому мы скорректировали предположение: по-прежнему считаем, что торцы образуют вертикальную плоскость, а положение камеры относительно горизонта определяем по датчикам устройства (интегрируя их показания за пару секунд и проверяя стабильность). Это позволяет наклонять телефон как угодно.

4. Дальше нужна разметка изображения – вручную или автоматически обнаруживаются бревна. Торцы мы отлично детектируем автоматически, а бревна сбоку оператор размечает вручную – так проще и в среднем точнее. Описанным выше методом пиксельные размеры переводятся в метрические, то есть мы получаем диаметры (точнее, полуоси эллипса) всех бревен.

Поскольку мы ограничены только Edge-вычислениями, мы сразу задали себе планку: весь расчет не может занимать больше 30 секунд на типовом мобильном устройстве среднего диапазона. Это довольно сильно ограничило выбор архитектур детектора. В нескольких последних  поколениях мы используем легковесные архитектуры с нашими доработками, в сравнительных экспериментах участвовали и разные поколения YOLO, и модные сейчас реал-тайм трансформеры — прежде всего для того, чтобы понимать, какое качество достижимо на наших данных state-of-the-art моделями.

Первые испытания, клиенты и, как следствие, первые версии датасета включали в основном древесину с достаточно тонкой корой: ель, сосну, березу, и мы не задумывались о том, что вообще-то учет должен вестись «без коры». После поездки на один из крупнейших ЦБК в Братске мы поняли, почему это важно — толщина коры лиственницы может запросто достигать нескольких сантиметров. Пришлось значительно расширять разнообразие пород и переразмечать весь датасет, чтобы гарантировать обнаружение торцов именно внутри коры.

5. Дальнейшие шаги зависят от метода, а методы, в свою очередь, принципиально делятся на поштучные и групповые.

a. В поштучных методах мы пытаемся оценить объем каждого бревна, моделируя его либо как цилиндр, либо как усеченный конус (если знаем, с которой стороны его измеряем, или если у нас есть фотографии обоих торцов).

b. В групповых методах мы определяем геометрию пачки или штабеля как целого. После этого применяем так называемый коэффициент полнодревесности, чтобы перейти от складского объема (занимаемого штабелем) к плотному объему (т.е. объему собственно бревен).

Большинство методов определения плотного объема древесины являются стандартизованными (описанными в российских ГОСТ 32594-2013, ОСТ 13-43-79, белорусском СТБ 1667-2012) и принятыми при ручном замере. Мы реализуем все основные стандартные методы, а также со временем смогли добавить несколько своих, призванных повысить точность измерения.

Планшет, смартфон, защищенное устройство?

Изначально в разработке мы ориентировались на смартфоны, считая, что более мобильное устройство упростит работу, а качество камер и производительность большинства планшетов намного хуже, чем даже у недорогих смартфонов. Но практика показала, что планшеты намного удобнее и вообще большой экран — это хорошо. Особенно когда на улице -30С, и на тебе соответствующие перчатки.

Если вы работаете в таком климате, как в Питере зимой, то кажется, что вам нужен максимально защищенный планшет. Да, у таких моделей, как Samsung Galaxy Active Tab, есть несомненные достоинства — их можно ронять с метровой высоты на бетон, класть в снег на всю ночь, они поддерживают работу в перчатках. Но обратной стороной является цена таких планшетов, кратно превышающая стоимость бытовых моделей. При этом платишь ты в таком случае именно за защиту, а вот производительность остается средней. 

Условно дешевые защищенные устройства совершенно ужасны по характеристикам. Опыт эксплуатации бытовых планшетов показал, что они прекрасно годами выживают в руках клиентов, а даже если что-то с одним из десятка случается, дешевле его заменить, чем покупать стойкий Samsung. 

Некоторые клиенты применяли такие решения, как пауэрбанк во внутреннем кармане куртки или подогреваемый чехол.

Большие штабели — как снять то, что не влезает в кадр?

Круглая древесина хранится в виде штабелей, объем которых может быть от единиц кубометров до тысяч, а длина – до сотен метров. При стандартном угле зрения камеры около 60° для того, чтобы захватить 10 м штабеля в кадр, нам нужно отойти на те же 10 м. Тут становится понятным, что снять одним кадром штабель длиной в 50-100 м так, чтобы все брёвна были видны и различимы, практически невозможно. Есть два подхода к решению этой задачи.

Первый — использовать панорамный снимок: эталон вешается с одного края штабеля, а дальше оператор начинает съёмку и движется вдоль всего штабеля. При этом формируется такой «длинный кадр», который содержит весь штабель. Такой метод реализован у наших конкурентов, но работает он на практике плохо — по мере движения камеры расстояние до брёвен сложно выдерживать постоянным, и набегает заметная ошибка.

Второй подход, который мы и применяем —  оператор делает несколько снимков, частично пересекающихся краями. На каждом кадре должен быть эталон. А для исключения двойного учёта брёвен на краях кадров разрабатывается алгоритм, который эти дубликаты находит и удаляет из расчета.

Серые — брёвна, отмеченные алгоритмом как дубликаты
Серые — брёвна, отмеченные алгоритмом как дубликаты

Что такое «погрешность 3%», и зачем она нужна

«Погрешность измерений составляет не более 3% и рассчитывается в соответствии с регламентом приемо-сдаточных испытаний»
(из технического задания)

На практике это один из самых тонких моментов при определении плотного объема древесины. Единственный реально точный метод — гидростатический: погрузить бревна без коры в воду и измерить объем вытесненной жидкости. Но в реальных условиях в России так (почти?) не делают — это  сложно, а значит, дорого. Обычно применяют ручные методы измерения бревен: групповые (быстрые) или поштучные (очень долгие — невозможно применить ко всему объему).

Стоит отметить, что на некоторых предприятиях используют поштучные сканеры древесины: бревно движется по конвейеру через устройство, которое определяет один или два диаметра с помощью световой завесы, либо — более точно — с помощью лазерного сканера/профилометра. Сравнительно точными также считаются ручные поштучные методы: «точковка» или «раскатка» имеют достаточно говорящие названия — нужно выложить брёвна в ряд на земле и провести измерение диаметра (а лучше — двух) каждого из них. Такой процесс может занять от десятков минут нескольких часов для одного штабеля или лесовоза в зависимости от объема и навыков персонала. Чаще всего такой метод применяют при возникновении споров, расхождений в учёте или при сборе статистики для расчета коэффициентов.

Компромиссный вариант измерения небольших штабелей — замер диаметра каждого бревна с одного торца (с вершины!). Обычно один человек замеряет и диктует, второй — записывает.
Компромиссный вариант измерения небольших штабелей — замер диаметра каждого бревна с одного торца (с вершины!). Обычно один человек замеряет и диктует, второй — записывает.

Натуральные бревна далеки от идеальных геометрических тел - они редко бывают настоящими цилиндрами или конусами. Даже без пороков вроде закомелистости или двойной вершины каждое бревно немного кривое, с разным сбегом и сучками. В сечении оно не круг и даже не эллипс, а измерять его нужно «без коры», пока кора еще на месте.

Наконец, когда бревна уложены в лесовозе или штабеле, измерять каждое по отдельности невозможно. Всё это приводит к тому, что на практике применяют групповые методы: считают объем, занятый штабелем, и пересчитывают его в плотный объем древесины через статистически выведенные коэффициенты полнодревесности.

Тут важно учитывать, что статистика хорошо работает только на больших выборках. Например, если у вас штабель всего из 10 бревен, то ошибка даже в одно бревно даст порядка 10 % погрешности. А если общий объем — 1000 м³, то даже пропуск нескольких брёвен почти не повлияет на результат (1–2%).

В стандартах это тоже учтено. Например, в Приложении 1 к «Правилам определения характеристик и учета древесины» (Постановление Правительства РФ от 30.11.21 №2128 «О порядке определения характеристик древесины и учета древесины») задана допустимая погрешность: она зависит и от метода, и от общего объема. Для объемов 30–60 м³ (типичный лесовоз) допустимы ±12%. Это естественный результат разной укладки и накопления мелких ошибок. А для объёма 600 м³ (и неважно — один это штабель или 15 лесовозов) — уже только ±3 %.

Конечно, покупатели мечтают, чтобы погрешность всегда уходила вниз, а продавцы — вверх. Но так делать нельзя: совесть не позволяет смещенная оценка нарушает саму идею статистической компенсации ошибок, которая позволяет на больших объемах получать точные результаты — те самые 3%, которые неоднократно подтверждены испытаниями. При этом нет никакой необходимости требовать 3% на каждом отдельном измерении.

Как еще можно измерять древесину?

Мобильные приложения — это не единственный способ автоматизировать учёт. Если говорить о технологически продвинутых альтернативах, то рынок предлагает несколько классов решений.

Поштучные сканеры — наиболее точный инструмент. Бревно движется по конвейеру через измерительную рамку, где его диаметр фиксируется либо световой завесой (одно или два направления), либо лазерным профилометром. Последние дают наивысшую точность и исключают влияние человеческого фактора. При этом необходимо организовать поштучную подачу, поэтому такие сканеры живут либо в составе сортировочных линий, либо на входе в цех переработки.

Групповые сканеры («фоторамки») работают с лесовозом целиком: комбинация камер и лазерных сканеров строит 3D-модель пачки, определяет складочный объем и коэффициент полнодревесности — по торцам или по боковым бревнам. Точность ниже, чем у поштучных, поскольку внутренность пачки системе недоступна, а коэффициент нередко корректируется оператором. Существуют и мобильные версии таких комплексов на прицепе, которые можно оперативно развернуть прямо у делянки.

Объединяет оба класса одно — высокая стоимость и привязка к инфраструктуре. Экономика сходится на крупных стационарных производствах с постоянным и плотным потоком древесины через точку контроля.

Решение Smart Timber позволяет создать единую прослеживаемую цепочку данных. Фотофиксация и сохранение измерений позволяют подтвердить объемы лесовозов и штабелей даже спустя длительное время. Цифровая «линейка» становится эффективной тогда, когда на её основе меняются процессы учета и управления.

Интеграция: от боли к гибкости

Первая интеграция с другой системой — АСД «Сегежа Лес» — стала достаточно сложным вызовом для нас. Из-за того, что основной сценарий использования обеих систем — работа в оффлайн-режиме, было необходимо обеспечить двустороннюю синхронизацию данных между приложениями двух систем на Android-планшете без связи с сервером. Решением стало межпроцессное взаимодействие на базе Intent и файлового обмена (изображениями, справочниками и данными замеров). Серверы тоже обменивались данными между собой на регулярной основе с использованием API друг друга.

Список измерений в мобильном приложении
Список измерений в мобильном приложении
Список измерений на сервере Smart Timber
Список измерений на сервере Smart Timber

Со временем мы выделили отдельный API для подключения сторонних систем, что позволило нам быстро решать задачи интеграции с системами других компаний (например, 1С). Именно такой вариант сейчас является для нас типовым сценарием — измерения и фотофиксация производятся Smart Timber, данные аккумулируются на нашем сервере, а система предприятия забирает их. API помогает получить или задать справочники, список измерений, забрать данные каждого измерения (с расчётами, выполненными сразу несколькими методами) и фотографии.

В какой-то момент внезапно для нас сервер Smart Timber со средствами интеграции обрел собственную ценность — мы стали получать запросы на интеграцию с нашим сервером сторонних приложений. Например, клиент уже проводит фотофиксацию своим приложением, но хотел бы делать замеры. Мы реализовали сценарий, при котором система клиента присылает в наш API фотографии (а также данные о породе, сортименте и другие метаданные). Их оператор в нашем веб-интерфейсе проводит измерение, после чего уже данные расчетов загружаются обратно в систему клиента. Также мы получаем запросы на интеграцию в наш сервер данных стационарных систем (например, поштучных сканеров древесины).

Что дальше

Несмотря на то, что в какой-то момент мы ушли от активной постоянной разработки технической части Smart Timber, у нас есть команда, которая занимается поддержкой и планомерным улучшением системы. Мы развиваем инфраструктуру, чтобы она соответствовала возрастающей нагрузке, следим за её надежностью, обеспечиваем безопасность.

Мы регулярно получаем обратную связь от наших клиентов и выполняем доработки (иногда за свой счет, если это полезно многим нашим пользователям, иногда по отдельному договору). Много работаем с тем, чтобы привлечь новых клиентов в России и за рубежом. Сейчас это, возможно, самая большая часть нашей работы, потому что именно так Smart Timber окупается и может привлечь средства на развитие.

Кроме того, мы прорабатываем несколько путей для развития продукта и близких технологий.

  • Smart Storage — распознавание и подсчет труб, металлоконструкций, алюминиевых профилей

  • Smart Timber 3D — принципиально новый портативный прибор для более точного автоматического замера древесины (уже с включением в реестр средств измерения, отсутствием эталона, но и с другой ценовой политикой). В основе — калиброванная комбинация ToF (времяпролетной) и RGB-камер, наши отработанные алгоритмы и вся серверная инфраструктура Smart Timber.

Испытания Smart Timber 3D на ЦБК в Ленинградской области
Испытания Smart Timber 3D на ЦБК в Ленинградской области
  • Модуль для определения объемов пиломатериалов.

  • Работа со стационарными камерами – бюджетная замена лазерным сканирующим рамкам.

  • Линейка стационарных недорогих сканеров для лесопильных и фанерных заводов. 

Сегодня Smart Timber — это не просто приложение. Это пример того, как идея благодаря акселератору ЛАНИТ Product Manager (подробнее здесь и здесь) стала техническим решением, а затем, пройдя испытания рынком, столкнувшись с болью реальных клиентов, превратилась в зрелый продукт.

Статья написана в соавторстве с @m_n_smirnov