В прошедшем июне исполнилось 25 лет первому релизу OpenCV. Господи, как летит время! Кажется, только вчера мы писали первые строчки. А уже четверть века с тех пор прошло. Самое время вспомнить, как все начиналось. Я не ставил себе целью рассказать в этой статье полную историю OpenCV — есть замечательная книга Гари, отличная статья в интеловом блоге и много других материалов. А у меня — скорее взгляд изнутри на то, как зарождался де-факто стандарт компьютерного зрения, размышления о причудливых развилках пути и факторе везения в технологии и дань уважения людям, с которыми мне довелось поработать.

Ты помнишь, как все начиналось?

Большие дела крайне редко начинаются со слов: «У нас есть отличный бизнес-план. И мы завоюем весь мир». Гораздо чаще они начинаются со слов: «Да хрен с ним, давай попробуем». Подозреваю, что история OpenCV начиналась именно так. План, если и был, то больше для того, чтобы рассмешить Бога. Предсказать все повороты извилистого пути библиотеки тогда не мог никто. Доподлинно неизвестно, кто именно сказал эту фразу, но с большим или меньшим основанием я могу подозревать двух людей.

Первый — это, конечно же, Гари Брадски.

Гари. Много лет спустя.
Гари. Много лет спустя.

Отец-основатель и бессменный лидер OpenCV. Впервые мы с ним встретились в конце 1998 или даже в начале 1999. Точно не помню, но, возможно, Гари был вообще первым американцем, с которым я познакомился. Надо сказать, что он поначалу произвел на меня довольно сильное, но весьма неоднозначное впечатление. Википедия представляет нам Гари как american computer scientist, но на ученого он мне тогда похожим не казался. Он больше напомнил «продажника». Напор, энтузиазм и очень быстрая речь. Понятно, что у меня, подростка с советским воспитанием, (другому неоткуда было взяться) возникало ощущение, что мне пытаются что‑то «впарить». Потребовалось очень много лет и изрядное знакомство с менталитетом наших заокеанских друзей, чтобы понять, что такой человек называется «евангелист». Внутри него живет идея, и он пытается «зажечь» ей весь мир. Идеей Гари было компьютерное зрение, и в роли евангелиста он был безусловно хорош. Но еще важнее то, что Гари был оппортунистом, отлично умеющим пользоваться предоставляющимися возможностями. Будь то Интел, Willow Garage или что то еще... Дело было в том, что на тот момент Интел, кажется, серьезно рассматривал рынок встраиваемых камер как возможность расширения своего бизнеса. И это было совершенно разумно, поскольку мир стоял на пороге экспоненциального взрыва видеоконтента. Но те, кто прочитал Made at Intel, знают, что хороших идей в конторе всегда было много, но выживали из них немногие. Впрочем, Гари тогда, я так полагаю, это мало волновало. Он никогда не был оловянным солдатом Интела. И был готов идти с любой конторой ровно столько, сколько ему было с ней по пути. В общем, у OpenCV изначально был очень правильный идеолог. Если бы у руля был кто-то другой, вряд ли мы хоть что-то сейчас обсуждали.

Вторым человеком, давшим старт проекту, был Валерий Федорович Курякин.

Федорыч
Федорыч

Как мне представлялось, он был практически полной противоположностью Гари. Выходец из Сарова, похож на ученого. Математик с неплохим бэкграундом. Неторопливый и обстоятельный. Своим педантизмом иногда наводивший на меня тоску. Но у Федорыча был несомненный талант видеть идеи, за которыми будущее. Помимо компьютерного зрения он стоял у истоков таких проектов, как VML — Vector Math Library (по сути, векторная версия libm). Идея была в том, что, как правило, мы вычисляем значения всяких математических функций (синусы, корни, экспоненты) не от одного аргумента, а сразу от целого массива. И это позволяет изрядно ускорять вычисления за счет векторизации. Затем из VMLа вырос VSL — Vector Statistics Library. Идея та же самая — случайные величины тоже должны генерироваться пачками, подчиняясь определенным статистическим распределениям. Ну и уж если речь зашла о Федорыче, то, конечно, же стоит упомянуть о говорящих головах. Это сейчас различные аватарки являются мейнстримом, а тогда, 25 лет назад, нужна была смелость и провидческий талант, чтобы инвестировать в это ресурсы.

И такой талант у Федорыча, безусловно, был. Но была у него и оборотная сторона. Как мне однажды сказал Гари: «Мало просто уцепить хорошую идею и поверить в нее. Не менее важно дожить до ее триумфа и снять сливки. Поэтому важно бежать впереди паровоза, но не убегать от него слишком сильно». Так вот, Курякин всегда смотрел слишком далеко вперед. У нас с ним даже состоялся такой полушутливый диалог лет 10 назад.

— Знаешь, Федорыч, оглядываясь назад, могу свидетельствовать, что почти все идеи, которые ты предлагал, с течением времени «выстрелили». Только далеко не сразу. И к моменту, когда они выстреливали, ты уже успевал увлечься чем‑то другим. Потом третьим, потом четвертым… Наверно, надо было брать любую из твоих затей, делать паузу в 3–5 лет и только потом начинать ей заниматься.

— Мне, Валер, эта мысль пришла в голову лет на тридцать раньше чем тебе. Вот только реализовать ее так и не удалось...

И вот, в какой-то момент эти два человека ударили по рукам, сказали магическое «да хрен с ним, давай попробуем» и завертелось.

Пионерский отряд и дед Чудинович.

Команду Курякин набрал довольно быстро. Недостатка в студентах, желающих заняться чем-то увлекательным, в NSTL тогда не было. Вадиму Писаревскому, самому старшему из всех нас, на тот момент исполнилось 23.

Вадик
Вадик

Он и стал лидером проекта. Ну а в качестве «дядьки» к нашему развеселому пионерскому отряду был приставлен Борис Модестович Чудинович. Каких-то начальственных должностей Борис Модестович не занимал, но заслуженно пользовался любовью и уважением окружающих. Что и неудивительно, ибо стоял ещё у истоков НИИ ПМК (Прикладной Математики и Кибернетики). Как программист он уже не был сильнее нас, но в алгоритмике разбирался на порядок лучше.

И работа закипела. Ваш покорный занимался в те времена разными алгоритмами — edge detection, tracking, floodfill и тд.

Таким я был 25 лет назад.
Таким я был 25 лет назад.

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

Серега Молинов трудился над Optical Flow и байесовскими (не путать с бесовскими) моделями. Да, все это уже тогда было. Валера Мосягин занимался калибровкой камер. И это было совсем непросто, ибо камеры тогда с неба звезд не хватали. Серега Обломов был по большой части озабочен инфраструктурой (поднимал приходящие нам из Интела альфы и беты новых процессоров) и был «на сборке». Именно он впервые объяснил мне важность процессов в разработке программного обеспечения. Еще Серега «подсадил» меня на увлекательное занятие «ломки» коммерческого софта с помощью NuMega SoftIce. К нам частенько приходили коллеги с просьбой сделать какую-нибудь платную утилиту бесплатной. Получалось не всегда, но чаще получалось, чем нет.

Впрочем, сказать, что мы все время занимались программированием или хакингом, было бы изрядным преувеличением. Кроме SoftIce Серега Обломов пристрастил меня к сетевым игрушкам. Где-то в то время появился Quake III, и многие часы два юных балбеса проводили, сражаясь с себе подобными. Собственно, мой ник, которым я пользуюсь в соцсетях, появился именно в те времена. Поначалу дела на полях сражений шли не очень, и я куда чаще погибал, чем собирал фраги. Но через секунду «возрождался» снова. Так мне и пришла в голову идея назваться Фениксом. Ник этот «прилип» ко мне настолько, что даже написан в моем интеловом «паспорте».

Наши американские друзья тогда плохо разбирались, где у русских фамилии, а где клички. А потом оказалось, что поменять что-либо в системе гораздо сложнее, чем оставить как есть. Так я и проходил 20 лет с таким бейджем.

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

Витя
Витя

Но занимался он, как ни странно, больше интерфейсными вещами. Именно его «перу» принадлежал модуль High GUI, который сделал работу с библиотекой интерактивной для пользователей. Чуть позднее Витя прикрутил к OpenCV поддержку Python. Это сейчас «питонячий» интерфейс must have для любой худо-бедно серьезной поделки. А 25 лет назад Python был всего лишь одним из многих скриптовых языков. Помню, мы с Серегой Обломовым относились к этому с ноткой снисхождения. Типа мы тут на ассемблере (а иногда прямо в машинных кодах) программируем, а Витя со скриптовыми языками возится. А Витя, близкий к академическим кругам, как в воду глядел. Если б не удобный интерфейс, который он обеспечил еще тогда, возможно, OpenCV не была бы и вполовину такой популярной.

Вадим Писаревский занимался примерно всем. Разбирался в алгоритмах, оптимизации, построялове, да еще исполнял административные обязанности. К счастью, пока нас было мало, они были невелики. Хорошо помню, как он за ночь написал объемную демку для какого‑то алгоритма. К нам на следующий день должно было нагрянуть начальство из Штатов. Мы с ним сидели часов до 9 вечера накануне — готовили слайды. И уже перед самым моим уходом Вадик вдруг сказал:

— А хорошо было бы демку под этот алгоритм сделать… — Но тут же сам себя перебил.

Нет, слишком долго, слишком сложно. Не успеем уже.

На следующий день я появился в офисе пораньше, чтобы еще раз все проверить. И застал Вадика с красными глазами (он, оказывается вообще домой не уходил) и работающей демкой… Вадим — программер от Бога, и рядом с ним, мне кажется, мы все становились лучше. Я, по крайней мере, уж точно.

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

О роли случая в мире технологий.

Я часто оглядываюсь назад и думаю, почему в мире технологий одни проекты «взлетают», а другие умирают в безвестности. И прихожу к выводу, что здесь уместна аналогия с турниром по покеру (а этих турниров по техасскому холдему я сыграл несколько тысяч). Для того, чтобы выиграть, недостаточно просто делать все правильно. Нужно, чтоб тебе еще очень повезло (в проигранной раздаче поймать свою идеальную карту на ривере). И не один раз. Так и здесь. Мало отличной задумки, перспективной команды и качественной имплементации. Нужно еще, чтобы обстоятельства сложились в твою пользу. И как мы увидим, с OpenCV все именно так и складывалось.

Как CVL стал OpenCV

Как можно догадаться из заголовка, OpenCV стала OpenCV далеко не сразу. Сначала она была CVL — Computer Vision Library. Планировалась как часть Intel Performance Libraries Suite, куда также входили Math Kernel Library (MKL), Signal Processing Library (SPL) и Image Processing Library (IPL). Все они были хорошо оптимизированы под x86 и распространялись в бинарях. CVL ждала та же судьба, но тут вмешался Его Величество Случай. В начале 2000-х Intel к камерам как‑то внезапно охладел. Как покажет дальнейшее развитие рынка, совершенно напрасно. Впрочем, те, кто читал Made at Intel вряд ли удивятся. Таким образом CVL оказался на положении «нелюбимого ребенка» в Performance Libraries Suite. И вроде бы дело шло к закрытию проекта. Но тут случилось чудо. Я не знаю как, но Гари удалось уговорить интеловое начальство выложить исходники в Open Source. Для Интела это, возможно, был вообще первый опыт работы с открытым исходным кодом. Но в конечном счете между вариантами «похоронить CVL внутри конторы» и «поделиться своими наработками с миром» Intel выбрал второе. Это случилось в июне 2000. Именно эта дата стала днем рождения OpenCV.

Поймите меня правильно, я вовсе не хочу сказать, что проприетарные интеловые инструменты (над которыми я работал 20 лет) чем-то плохи. Наоборот, они очень даже хороши. Однако это все же проприетарные вендорские поделки. А разработчики приложений и интеграторы не очень любят попадать от кого-то в зависимость. Одно дело, когда у тебя в руках исходники библиотеки, которые ты теоретически сам можешь поправить. И совсем другое дело, когда только бинарники.

А мир тогда стоял на пороге взрывной экспансии мобильных устройств, глазами которых стали камеры. А сердцем — процессоры архитектуры ARM. И если бы наши наработки распространялись в виде бинарников для X86, ни о каком OpenCV мы бы сейчас не говорили. Так что этих граблей проект счастливо избежал. Но впереди их было рассыпано еще немало.

Роль лицензии

Еще одним краеугольным камнем успеха OpenCV стала максимально мягкая лицензионная политика (и за этим, очевидно, тоже стояла прозорливость Гари Брадски). Изначально это была 3-clause BSD license. На смену ей в 2020 году пришла Apache 2. Я не большой специалист в лицензионном праве, но, по сути, все сводится к следующему «контракту». Бери что хочешь и используй как хочешь. Можешь даже разработчиков никак не упоминать. Только претензии к ним потом предъявлять не моги. И это привело к тому, что куски кода OpenCV расползлись по бесчисленными мобильным и встраиваемым устройствам (и не только по ним), рынок которых рос как на дрожжах. И уверен, что зачастую их производители даже не знают, откуда у этого кода «ноги растут». И слава Богу.

Однако меня тут недавно снова заставил задуматься на тему жадности и лицензионной политики… наш губернатор. Он очень даже продвинутый и старается вникать в перипетии айтишного мира. И, надо сказать, иногда ему удается поставить меня в тупик.

— Валер, а ты правда у истоков OpenCV стоял?

— Правда. Только в самом начале и очень недолго. Там другие люди гораздо больше меня сделали.

— Странно. Если проект так взлетел, почему вы все миллиардерами не стали?

Я, признаться, даже не нашелся, что ответить. В каком‑то смысле он прав. Все мы, конечно, не «бедные юноши» но и в списках Forbes никто из нас не замечен. А с другой стороны… Секрет успеха OpenCV в том, что она всегда развивалась как совершенно некоммерческая история. Имеется в виду сама библиотека, а не проекты, которые делаются на ее основе. В проекте тысячи контрибьюторов, но никто из них не пытается «тянуть одеяло на себя». Но если подумать, все могло сложиться совсем по‑другому… Но опять же скажу, слава Богу, что все вышло именно так, как вышло.

Когда все повисло на волоске

И все же, несмотря на благоприятное стечение обстоятельств, потребовалось еще много героических усилий для того, чтобы OpenCV стала тем, чем она стала сейчас. А ведь ее могла постигнуть судьба многих тысяч open source проектов, которые почили, не успев набрать «критической массы».

Даже после того, как библиотека вышла в open source, а Интел потерял всякий интерес к встраиваемым камерам, он «по инерции» продолжал поддерживать проект. Ясно было, что когда‑нибудь это закончится, но пока этого не происходило, команда… росла. Также росло число пользователей библиотеки. Стали появляться первые контрибьюторы из «внешнего мира». Гром грянул в конце 2003 (если мне не изменяет память). Кажется, решение о прекращении финансирования проекта было связано с какой-то очередной реорганизацией внутри конторы. А может и нет. Искать логику в решениях Интел того времени — сомнительный профит. Да и за давностью лет почти бессмысленно. Так или иначе OpenCV осталась тогда «сиротой», еще не успев как следует обрасти сообществом пользователей и участников. Я к тому времени уже ушел в IPP и «утонул в ассемблере». Серега Обломов перешел в команду, занимавшуюся релизной инфраструктурой. Витя тоже на что‑то другое переключился. Гари вообще к тому времени уже расстался с Интелом. Вся тяжесть поддержки проекта легла на плечи Вадима. Кое‑как удалось уговорить начальство IPP, что OpenCV будет хорошим примером использования библиотеки примитивов. Вот так причудливо иногда выглядят вещи, если смотреть на них сквозь призму корпоративной логики. Но и это было лучше, чем ничего. Днем Вадик оптимизировал OpenCV c помощью IPP, а ночами принимал патчи, интегрировал, запускал тесты… Да, тогда был уже создан Willow Garage. Да были еще добровольцы из‑за пределов Интел — Марк Асбаш, Роберт Станчак, Оливье Борне, Ирина Шевцова — кто помогал поддерживать проект в форме. Но, конечно, основная нагрузка лежала на Вадиме. Так продолжалось почти 4 года...

Но ночь темнее всего перед рассветом. В 2007 Виктор Ерухимов, Александр Бовырин и Сергей Молинов, уйдя из Интел, основали Itseez. Основной деятельностью фирмы стали проекты, связанные с компьютерным зрением. И OpenCV была для них основным инструментом. В 2008 к ним примкнул Вадим Писаревский. Ребята из Itseez сумели построить инфраструктуру и поставить регулярный процесс интеграции OpenCV. Проект уверенно встал на путь к успеху и уже не сворачивал с него. В 2016 году Интел купил Itseez, и большая часть команды переключилась на OpenVINO. Но это уже совсем другая история.

А тогда, в темные времена 2003–2007, только самоотверженность Вадика спасла OpenCV от распада. И если Гари можно назвать лидером и идеологом OpenCV, то Вадима уместно сравнить с ангелом‑ хранителем. И с ним OpenCV точно повезло. Однако, если посмотреть с другой стороны, то Вадиму тоже повезло с OpenCV. Да и не только ему — всем нам повезло. Прикоснуться к чему‑то значимому, стать частью (пусть в моем случае и мизерной) большой и хорошей истории.

Вместо послесловия

Со времени первого релиза OpenCV много воды утекло. Жизнь поразбросала нас по разным уголкам планеты. Гари и некоторые другие — в Штатах. Витя Ерухимов обосновался в Австрии. Кто‑то на Кипре, кто‑то где то еще… Но все же основная часть тех, кто «стоял у истоков», по‑прежнему в Нижнем Новгороде. Да, конечно, «мы все чаще себя не узнаем в зеркалах и все реже видим друг друга». Но стараемся сохранять общение и все же нет‑нет да и собираемся вместе. Иногда — на тематических семинарах.

Слева направо — Николай Золотых, Вадим Писаревский, Валерий Федорович Курякин, Юрий и Сергей Молиновы.
Слева направо — Николай Золотых, Вадим Писаревский, Валерий Федорович Курякин, Юрий и Сергей Молиновы.

Был даже момент, когда значительная часть «ветеранов» OpenCV собралась под крышей нижегородского филиала Huawei.

Слева направо - ваш покорный, Вадим Писаревский, Александр Бовырин, Константин Родюшкин, Сергей Обломов.
Слева направо — ваш покорный, Вадим Писаревский, Александр Бовырин, Константин Родюшкин, Сергей Обломов.

Впрочем, сейчас опять все как‑то поразбежались…

Многие из нас все еще принимают активное участие в развитии OpenCV. Кто‑то давно занимается чем‑то другим, кто-то уже отошел от дел. Впрочем, библиотека уже давно живет своей жизнью. 95% компьютерного зрения сейчас — это нейросетки. Меняются подходы, меняются алгоритмы, меняются люди. И это нормально. А OpenCV все так же продолжает отвечать на вызовы сегодняшнего дня, как и 25 лет назад. И пусть так и продолжается.

Потому что история OpenCV кардинально отличается от большинства событий, описанных в Made at Intel. Там постоянное хождение по граблям по мукам. Когда ты наступаешь на грабли, получаешь ими по лбу, и, не успев оправиться от удара, наступаешь на следующие. А здесь хорошая история, даже чем-то похожая на сказку, в которой все идеально срасталось. А когда не срасталось, находились герои, которые все спасали. Но я, конечно, понимаю, что это не сказка. Это идея, время которой пришло. И за ней стоит труд многих сотен людей. Я не смогу перечислить здесь всех. Но я благодарен судьбе за то, что OpenCV позволила мне пообщаться с такими людьми, как Гари Брадски, Шинн Ли, Валерий Федорович Курякин, Борис Сабанин, Владимир Дудник, Вадим Писаревский, Виктор Ерухимов, Сергей Молинов, Сергей Обломов, Александр Бовырин, Алексей Мяков, Кирилл Корняков. И это лишь небольшая часть тех, кто трудился над библиотекой. Людей, кто вложил частичку своей души в OpenCV, гораздо больше. И я прошу прощения у тех, кого не упомянул здесь. Я видел ровно столько, сколько мне было отмерено судьбой. И, как сумел, постарался написать об этом.

Комментарии (2)


  1. Jhayphal
    28.07.2025 18:47

    Множество раз пользовался данной библиотекой, но даже не подозревал, что среди её создателей столько земляков. Молодцы ребята!


  1. efimov-mikhail
    28.07.2025 18:47

    Спасибо за статью и за вклад в OpenCV. А упоминания SoftICE и Quake 3 особенно попали в точку и пробудили ностальгию!