Вітаю! Моє ім’я Ігор Карась. Я фаундер декількох проєктів з технічним бекграундом понад 20 років і це моя правдива історія побудови Rail-X — системи моніторингу залізничних переїздів на Python і нейромережах, ще до AI-лихоманки. Підготував для вас декілька інсайтів, тож беріть теплий чай з печивом і приготуйтесь до цікавої історії.
Все почалося з 20 хвилин, які стали тригером
Rail-X не починався як стартап. Не було презентацій, інвесторів, акселераторів і навіть бізнес-плану. Була дуже проста і зла побутова ситуація.
Надворі була весна 2018 року. Щоранку я возив сина в садочок через залізничний переїзд у місті Ірпінь. Потяг уже проїхав, а шлагбаум залишався закритим. Іноді — 15–25 хвилин поспіль. За цей час накопичувався затор, люди нервували, хтось сигналив, хтось виходив з авто «подивитися, що там сталося». А мене ще чекала дорога назад.
Через пів року такої невизначеності Бучанський переїзд став останньою краплиною — я простояв 30 (Карл!) хвилин, запізнюючись на зустріч, і мій терпець увірвався :(
Чому у 21 столітті ми не знаємо, коли переїзд відкриється? Це ненормально.
Адже знаючи, що переїзд буде перекрито більш як 5 хвилин, я можу поїхати в об’їзд.
Коли емоції вгамувались, прийшла друга думка, яка була значно важливіша:
Ми занадто багато скаржимося на проблеми замість того, щоб взятися за їх розв’язання самостійно.
На той час у мене за плечима був 10-річний досвід комерційної розробки ПО. Програмування, в яке я закохався ще у 8 класі, було моєю роботою, хобі та, кінець кінцем, моїм життям! Я не сумнівався у навичках. Сумнів був лише в тому, скільки часу й нервів забере обраний шлях та що це за шлях...
Як зараз пам’ятаю, у мене пробудився цей хижацький інстинкт полювання, тільки тут було протистояння інженерської жилки, а рішення — це жертва, яку потрібно вполювати. Мій мозок почав працювати над пошуком шляхів реалізації мого задуму, а саме — як збирати інформацію про статус переїзду автоматично.
Неприємне відчуття, коли б’єшся головою об стінку, яку знаєш, що не проб’єш
Перша ідея не заставила себе довго чекати!
У ті роки «свічка» мого інтересу до побудови проєкту розумного будинку на Arduino догорала і майже згасла. Я перестав будувати велосипед (найулюбленіше заняття програмістів-романтиків) і розбудовував систему Smart House у своєму помешканні на основі одного популярного китайського бренду. У них є набір сенсорів Aqara, дані з яких можна було перенаправляти в OpenHAB, а там вже «широкий степ» для польоту фантазії.
Ідея була наївно-простою: приклеїти сенсор геркона на шлагбаум, який по протоколу mqtt відправляв би сигнали на шлюз у будці регулювальника, а той через 3G-модем далі на сервер. Діло в капелюсі, все точно запрацює!
З цією «геніальної ідеї», до якої додумався тільки я з-поміж всіх представників гомо сапієнс в Україні, швиденько пішов на пітчинг до найголовнішої людини на переїзді — регулювальника.
Холодний душ не заставив мене довго чекати. Виявляється, що залізничний переїзд це стратегічно важливий об’єкт ще з 1957 року. Щоб ви розуміли, настільки він важливий: потрібне пильне око людини та ліва рука з прапорцем, щоб просигналізувати машиністу, що у нього нічого не волочеться за останнім вагоном і можна продовжувати рух! А тут я приходжу з ініціативою наклеїти незрозумілий об’єкт на шлагбаум, та ще й націлився на споживання електроенергії для модема і хабу, щоб забезпечити роботу цього самого об’єкту. Небачена зухвалість.
Між рядками читалося, що мені потрібно було вище... на рівень регіонального керівника УЗ. Мені потрібно було дійти до цієї бетонної стінки, щоб добре вдаритися і набити шишку. І я це зробив через штурм форми зворотного зв’язку Укрзалізниці — на мене вийшов керівник колійного господарства (так, виявляється це робочий спосіб комунікації) і він, додавши льоду у діжку, закінчив мої водні процедури, початі ще на переїзді!
Процедура наступна:
- для того, щоб щось додаткове обладнати для такого об’єкта з підвищеними заходами безпеки, як переїзд, потрібна сертифікація
- для сертифікації потрібно зробити мінімум один тест
- для встановлення обладнання для тестування, а також для встановлення обладнання на постійній основі, потрібен виїзд бригади
- залучення такої бригади має оплачуватись разом з усіма іншими процедурами.
Я розумів, що шлях складний, але тільки тоді усвідомив, наскільки — куди там тягатися тімліду з аутстафінгової компанії з такою великою державною машиною, як УЗ?!
Інсайт: хоч і поїзди їздять за графіком, переїзд закривається не за ним. Тому що тільки пасажирські дотримуються розкладу, а це половина всіх перевезень. Інша половина — вантажні, у них графіка немає.
Навіщо змагатися з Голіафом, якщо можна досягнути своєї цілі іншим шляхом?!
До мого роздратування додався виклик, який не дозволив відмовитись від своєї ідеї. Під час прогулянки до переїзду я помітив стовп з вузлом комунікацій інтернет-провайдера та ще й в дуже хорошому місці — там би гарно стала камера.
Це була хороша ідея. Стовп вже на балансі міста, живлення та інтернет-підключення вже є — залишилось прикрутити камеру. Забігаючи наперед, ця ідея таки спрацювала.
Швидкий пошук привів мене до камер провайдера Maximum NET, які були у відкритому доступі, там якраз був необхідний ракурс на ЗД-переїзд міста Вишневе — його і збирався використовувати.
На той час добре показувала себе ObjectDetection-модель на Tensorflow для розпізнавання обʼєктів на картинках. Після вивчення принципу дії зупинився на ній.
Далі справа за збором даних, а саме кадрів зі знайденої камери. Швидко написав скрипт на Python. За 24 години у мене було понад 2000 картинок — матеріалу для навчання. Далі розмітка (потрібно було вказати, що саме треба шукати на картинці), потім спроба навчання на моєму MacBook Pro 2015 року — ця ідея була так собі, хоча і достатня для хоч якоїсь перевірки дієздатності гіпотези.
Ендорфін лупасив по повній, здається, ті тижні тільки й на ньому вивозив. Тому що ця робота велася до основних моїх обов’язків, далі була робота, яка годувала, а після неї продовження. Відчувалась нестача сну. Хороше відчуття, але поступово «спалює».
Ситуація пригальмувалась через потребу в нормальному сервері з GPU для швидкості навчання і розпізнавання.
Яким би ти не був вмілим і наполегливим, без допомоги інших людей може нічого не вийти. Тому я звернувся до свого друга, який знався на залізі, він любив цю справу та якраз розпродавав свої майнінгові ферми. За тиждень у мене був сервер на базі AMD Ryzen 3 з двома NVIDIA GeForce GTX 1070.
Все було готово для запуску:
- Python + Tornado як бекенд, там ще асинхронність була через yield, а не asyncio (навіть не питайте, чому).
- MongoDB — подобалась вона мені тоді, та ще й цікаво було своє ORM туди написати.
- ActiveMQ для черг з протоколом комунікації.
- pyTelegramBot — за задумом все мало жити в Телеграмі — вікно комунікації для такий затятих бекендщиків, як я.
- Tensorflow з ObjectDetection-моделькою на сервері з 2 GPU — це давало можливість перенавчати модель на одній, тим часом коли інша розпізнавала 5 кадрів за 1 секунду.
Сам писав, сам тестував, сам маркував, навчав, деплоїв... все як у класика, все сам. Це робилося на шаленому ентузіазмі і все запрацювало в зв’язці:
— нейронка аналізувала кадри з відеопотоку камери;
— як тільки вона помічала зміну положення шлагбаумів, відправляла сигнал на Backend;
— той своєю чергою за допомогою Telegram-бота постив новий статус у канал.
Все було готово для того, щоб показати це мешканцям Вишневого.
Те приємне відчуття, коли стоїш перед дверима і розумієш, що за ними багато цікавого
Таке відчуття я вже переживав у 2012 році. Мені пощастило потрапити до ядра розробників OLL.tv перед запуском і до його презентації. Тоді я активно моніторив Twitter і Facebook в жадібному пошуку коментарів від звичайних людей про те, як вони сприймали наш продукт. Працювати над продуктом і спостерігати, як він розвивається, дуже захопливо!
Це відчуття відвідало мене знову! 22 листопада 2018-го я зробив декілька дописів у групи міста Вишневого, написав декілька коментарів і новина розійшлася, почалося активне обговорення. Люди почали додаватись в канал і генерувати ідеї для покращення. Через два місяці на каналі було 3000 підписників без жодної реклами та маркетингових потуг. Ідея і її реалізація «зайшли» — здається, я на щось натрапив...
Після декількох місяців роботи була зібрана статистика і стало зрозуміло, чому люди позитивно відгукнулися про роботу бота. Той переїзд дійсно пекельний, ось статистика закриття за 2020 рік — 50% часу він був закритий і об’їхати його важко:

Через три місяці після запуску вдалося зібрати достатню кількість даних, щоб почати будувати передбачення. На жаль, бот ніяк не міг вплинути на частоту і тривалість перекриття, проте він давав інформацію, яка допомагала в ухваленні рішень.
Найсолодший плід — це плід своєї праці
Після підключення сервісу до трьох переїздів і пів року роботи сервісу я знайшов партнерів — соціальну платформу Be City на чолі з Анною Страховською. Саме вони посприяли встановленню камери у містах Бучі та Ірпіні.
Ціль була досягнута — я користувався системою, про яку мріяв і яка сповіщала про стан переїзду, а головне — система була створена мною.
Пізніше завдяки представнику міської ради також вдалося під’єднати переїзд у Рівному.
Згодом була співпраця з iOS і Android-програмістами. У проєкта з’явилися свої застосунки:

Потім була введена «теплова лінія», яка дозволяла візуально оцінити статус за останні 30 хвилин і його поведінку в наступні 30 хвилин для поточного дня тижня за статистикою останніх чотирьох тижнів, а також кадр з камери. Це виглядало так:
Міжнародне визнання
У жовтні 2021-го я взяв участь в акселераторі, організатором якого була CRDF Global — міжнародна некомерційна організація. Це був цікавий досвід, я працював з ментором і ми розбирали мій проєкт, бізнес-модель, шляхи розширення.
Я став призером і отримав $6000 на розвиток. Це фінансування дало можливість купити третій сервер з GPU та відпрацювати концепт роботи камери від сонячної батареї з 3G-модемом, що дозволило б швидко покривати переїзди по всій Україні та бути незалежним.
Автономна частина включала:
- камеру;
- сонячну панель;
- акумулятор;
- 3G-модем;
- бокс для всього цього добра.
А ось як це виглядало в процесі тестування:
У мене було багато pet-проєктів:
- BitStreamer — поштучний продаж посилань для завантажень з високою швидкістю з файлообмінників (олди мають пам’ятати) — ex.ua, fileshare, depositfiles та інші.
- JoyS — мобільний застосунок для мультисоціального шерінгу інформації ще до Buffer.
- SMSme — відгуки про заклади через смс — прямо для управлінського персоналу. Ми навіть плату «стравили» для підтримки 30 gsm моделей і через Arduino керували серверним кодом.
- GeoPoints — геозалежна соціальна мережа за 5 років до появи Nimses.
- Jeka24h — система для ОСББ для роботи з мешканцями будинків на базі Telegram і Odoo.
- вже згаданий ASHouse — розумний будинок на Arduino.
Проте реальне визнання отримав саме Rail-X, тому ще один інсайт: першим користувачем системи маєш бути ти сам, вона має розв’язувати твою проблему, всі інші з такою ж проблемою обов’язково приєднаються! Очевидна річ, але усвідомлюєш її, тільки коли сам це перевіриш.
На другу половину 2021 року сервіс працював з переїздами у 7 містах та налічував 30000 користувачів. Динаміка росту була задовільною, план розширення — випробуваний, з’являлись ідеї для кращої монетизації, окрім реклами. Все було готово, але сталася війна...
Коли життя поставили на паузу
24 лютого 2022 наша країна зазнала повномасштабного військового вторгнення від північного сусіда і завдяки військовим, комунальникам, та в принципі всім, стоїть вже майже чотири роки. Низький уклін їм всім! Слава Героям!
Через заборону роботи камер сервіс в замороженому стані з 2022 року — разом з життям він також став на паузу.
Ось одне з останніх фото, зроблене з камери в Бучі — техніка ворога, яка через пару днів стала спаленим брухтом на вулиці Вокзальній:
Вихід завжди є, варто тільки глянути навкруги!
Проєкт показав себе добре і має достатню користувацьку базу для перезапуску як community-driven. Тепер можна не чекати на дозвіл використання камер, їхнє повторне встановлення — тепер кожен може сповіщати про статус!
Побачив переїзд закритим — сповісти про це, і після підтвердження іншим учасником про це дізнаються всі підписники каналу. Можна буде відмічати, з якої сторони переїзду стоїш у черзі й наскільки вона довга. А бот попіклується про те, щоб статус «Закритий» не завис. Буде своя система заохочення у вигляді балів і гейміфікації. Буде можливість залиши заявку на підключення переїзду будь-якого міста.
Схожу проблему я помітив і у місті Маямі, Флорида, тільки не з ЗД-переїздами — тут з ними все добре, автоматизовані, закриваються за 10 секунд до приїзду потяга і відкриваються аналогічно після, все працює чудово без пильного ока людини. Але така ж проблема існує з розвідними мостами — вони також можуть хаотично закриватись і паралізувати центр міста. Нова механіка може стати в пригоді й для цього міста. Подивимось, наскільки твердий «бетон» в США.
Це буде нова сторінка для проєкту — приєднуйтесь!
Три висновки, які я виніс як фаундер і інженер:
- Перший користувач — це ти сам.
- Не чекай дозволу, шукай обхід.
- Стек — це інструмент, але ключ — відповідальність.
Результат з’являється там, де є рішучість, системність і готовність доводити справу до кінця.
За матеріалами dou.ua
Коментарі
Дописати коментар