• Как построить свою систему поиска похожих изображений

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

      В этой статье я собрал все необходимые компоненты поисковой системы на изображениях в одном месте, разбавив контент современными подходами.

      Читать далее
    • Поиск изображений

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

        Читать далее
        • +20
        • 4.6k
        • 1
      • OCR или как мы учимся читать спам на 5+



          Всем привет, меня зовут Михаил Марюфич. Я занимаюсь машинным обучением в команде антиспама в Одноклассниках. И сегодня я расскажу про то, как и зачем мы сделали свою технологию распознавания текстовых символов с изображения OCR (Optical character recognition).
          Читать дальше →
        • Как сделать Data Science приложение для Windows (и не только) с графическим интерфейсом с помощью PySimpleGUI

          • Translation
          • Tutorial
          Работать с Data Science в Jupyter, конечно, очень приятно, но если вы хотите пойти дальше и развернуть свой проект или модель на облачном сервере, то здесь есть много отличных решений — с помощью Flask, Django или Streamlit. Хотя облачные решения по-прежнему самые популярные, часто хочется создать быстрое приложение с графическим интерфейсом. Например:

          • Модель ML тестируется на различных наборах данных. Вы можете перетащить файлы CSV в модель и отрисовать кривую AUS/ROC. Здесь GUI проявит себя прекрасно, правда?
          • Построить случайную переменную или статистическое распределение в заданном диапазоне и динамически управлять параметрами с помощью графического интерфейса.
          • Быстро запустить некоторые задачи обработки или предварительной обработки данных в наборе с помощью GUI вместо того, чтобы писать кучу кода.

          В этой статье мы покажем, как создать такой графический интерфейс, потратив минимум усилий на изучение библиотеки Python.


          Приятного чтения!
        • Как мы ржавели. История внедрения и обучения

            Все говорили – переходи на rust! Начинай пользоваться самым-самым языком, который самый любимый язык на stackoverflow и всё такое.

            Я тяжело вздохнул и огляделся. Ну опять двадцать-пять. Ладно, давайте разбираться, как правильно покрывать всё ржавчиной.

            Профессионально я программирую уже 17 лет. В далёкие-предалёкие времена я начал изучать программирование с x86 Assembly. Такой жестокий подход к изучению компьютера дал мне глубокое понимание того как работает процессор и что делают другие языки программирования. Учить новые языки для меня никогда не было проблемой. Я их просто учил. C, C++, шарпы, ГО, тысячи разных скриптов и фреймворков. Чего уж там, ещё один язык, можно и выучить.

            Ага.

            Только вот не с этой ржавой развалюхой. Я просидел две недели над официальным руководством, пялился в VSCode и не мог выдавить из себя больше чем fn main() {}. Ну какого же чёрта? Я просто закрыл глаза, открыл руководство на рандомной странице и начал его читать. И прикол в том, что я понял о чём там говориться. И тут до меня дошло… Руководство написано наизнанку. Начало и конец ничуть не лучше чем в Мементо Кристофера Нолана. Они как-то умудрились запутать в общем-то нормальное руководство. После этого всё пошло получше.

            Ржавые шестерёнки заскрипели и начали крутиться. Программа пошла-поехала. Если хотите знать как я внедрил rust в продакшин, как я ему научился и что из этого вышло – добро пожаловать под кат. Реальные люди, коммиты, примеры и никаких todo-list и хеллоу-ворлдов.

            Ржаветь так ржаветь.
          • Ультимативный гайд по поиску утечек памяти в Python

            • Tutorial

            Практика показывает, что в современном мире Docker-контейнеров и оркестраторов (Kubernetes, Nomad, etc) проблема с утечкой памяти может быть обнаружена не при локальной разработке, а в ходе нагрузочного тестирования, или даже в production-среде. В этой статье рассмотрим причины появления утечек в Python-приложениях, доступные инструменты для отладки и мониторинга работающего приложения, а также общую методику поиска утечек памяти.

            Читать далее
            • +61
            • 9.3k
            • 4
          • МГЛ (ДРИ) для освещения в квартире или на рабочем месте, основы и выбор + обзор ламп на 35Вт

              Хочу вам рассказать о «самой слабой», ну почти самой слабой лампе МГЛ, доступной в общей продаже. Лампы лучше выбирать «стандартной мощности» они (почти)всегда есть в свободной продаже 35/70/150Вт (остальное "экзотика" - могут быть проблемы с ЭПРА и/или лампами).

              Честный индекс цветопередачи CRI >80(теплые)/ >90(холодные). Присутствуют все видимые человеком цвета 380-780нм. Примерная яркость ламп (незначительно различается от бренда, ЦТ, методов измерения): 35Вт ~3400лм, 70Вт ~6800лм, 150Вт ~14000лм.

              Лампы HCI/CDM (T/TC) мощностью 35в и упаковка от них.

              T – цоколь G12 (слева), TC – цоколь G8.5, они не совместимы с патронами от обычных «галогенок» можете не пробовать впихать не впихуемое, единственный вариант это изобретать «своими руками» (например клемники).

              Хочу узнать большее
            • Гидропоника. Выращиваем сверхострый чили и заставляем всех его есть


                Полтора килограмма термоядерного Тринидадского Скорпиона я в итоге собрал с одного куста на гидропонике.


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


                Небольшая часть урожая


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


                Сегодня в меню


                1. Что такое гидропоника и почему она гораздо проще, чем почва с червячками
                2. Никаких дорогих бутылочек. Мешаем компоненты по три рубля за ведро
                3. Питание растения как алгоритм
                4. Как быстро собрать прототип гидропонной установки
                5. Что такое capsicum chinense и как выжить при дегустации
                Читать дальше →
              • Лёгкие приложения Linux для старого железа


                  Окружение Xfce

                  Любую систему можно разогнать, есть стандартные способы оптимизации десктопа: минимум софта в автозагрузке, preload, оптимальное зеркало для пакетов, apt-fast вместо apt-get, настройки для оптимизации отдельных приложений и так далее.

                  Но всё это мелкие оптимизации по сравнению с фундаментальными столпами:

                  1. Лёгкий дистрибутив
                  2. Легковесное окружение рабочего стола
                  3. Быстрый софт

                  Это в первую очередь актуально для старого железа, хотя в принципе на каждом ПК мы хотим, чтобы система работала максимально эффективно, разве нет? Даже на современном многоядерном CPU больно видеть запуск программы в несколько секунд или задержку интерфейса 100-200 миллисекунд после нажатия по клавиатуре. Всё должно реагировать мгновенно, со скоростью человеческого восприятия. В нативных приложениях нет места лагам, как у веб-интерфейсов.

                  Поэтому — легковесное окружение и быстрый софт.
                  Читать дальше →
                • RC-лодка на ESP8266 NodeMCU


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


                    Я расскажу про процесс разработки с самого начала: от лодки из потолочной плитки, гелевой ручки и консервной банки до модели из пластика, которую не стыдно подарить.


                    Если интересно, какие шишки мне пришлось набить, прошу под кат!


                    Осторожно! Под катом много картинок!
                    Читать дальше →
                  • Разработка python module, чтобы продакшн радовал

                      Всем привет! Я представляю команду разработчиков некоммерческой организации CyberDuckNinja. Мы создаём и поддерживаем целое семейство продуктов, которые позволяют облегчить разработку backend-приложений и сервисов машинного обучения.

                      Сегодня хотелось бы затронуть тему интеграции Python в C++.



                      Все началось со звонка друга в два часа ночи, который пожаловался: «У нас под нагрузкой ложится продакшн ...» В разговоре выяснилось, что код продакшена написан с использованием ipyparallel (пакет Python, который позволяет производить параллельные и распределённые вычисления) для обсчета модели и получения результатов в режиме онлайн. Мы решили разобраться в архитектуре ipyparallel и провести профайлинг под нагрузкой.
                      Читать дальше →
                      • +24
                      • 5.6k
                      • 7
                    • Как вести технический блог?



                        Я работаю в коммерческой разработке с 2011 года. С конца 2012 занимаюсь разработкой под iOS. Свою первую техническую статью я написал на Хабре в начале 2017 года про подход к локализации мобильных приложений. Потом выпустил ещё несколько статей по iOS-разработке на Хабре и в конце 2017 года я перешёл в новую компанию и решил вести блог про solution architecture https://medium.com/@nvashanin, где начал описывать общие концепты, обязанности архитектора, его скилл-сет и т.д. К лету 2020 года количество просмотров моих статей перевалило за 800 тысяч, а количество времени, которое люди потратили на прочтение — больше 6 млн минут, или около 12 лет чистого времени. Флагманская статья была переведена другими людьми на разные языки: например, польский или испанский.

                        В статье я расскажу про свой путь к техническому блогу — от идеи до регулярных публикаций. Расскажу, о чём можно писать, как писать и как оформлять статьи, а также о том, как на них заработать. Мне, например, удалось купить себе часы на деньги, которые принёс блог. Статья подойдёт тем, кто только задумывается о написании статей, а также будет полезна и тем, кто уже активно пишет.
                        Читать дальше →
                      • МК-61: история, эмуляция, устройство

                        Расцвет эпохи программируемых калькуляторов в нашей стране пришёлся на середину 80-х годов. Потом на смену относительно сытым и благополучным временам пришла эпоха бандитского капитализма, когда стране стало не до выпуска своей высокотехнологичной продукции бытового назначения, вот уже сменились поколения, но ностальгия по тем временам, когда мы бессонными ночами пытались сократить код программы хотя бы на пару байтов, чтобы уместить задуманную функцию, выискивали всё новые и новые недокументированные возможности, придумывая способы, как их можно использовать на практике, сочиняли целые циклы рассказов в качестве фона для наших игровых программ, не даёт забыть свой МК-61 со 105 байтами программной памяти. Поэтому хочу написать заметку о том, что собой представляли и как работали эти самые программируемые калькуляторы. Даже если эта тема сегодня периодически и поднимается, то не настолько часто, чтобы приесться уважаемому читателю, так что надеюсь поведать что-то новое.

                        Читать дальше →
                      • 10 советов схемотехнику

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


                          Читать дальше →
                        • Object Detection. Распознавай и властвуй. Часть 1



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

                            Времена, когда обнаружение объектов решалось исключительно путем классического машинного обучения (каскады, SVM...) уже прошли – сейчас в этой сфере царят подходы, основанные на Deep Learning. В 2014 году был предложен подход, существенно повлиявший на последующие исследования и разработки в этой области – R-CNN модель. Последующие его улучшения (в виде Fast R-CNN и Faster R-CNN) сделали его одним из самых точных, что и стало причиной его использования по сей день.

                            Помимо R-CNN есть еще много подходов реализующих поиск объектов: семейство Yolo, SSD, RetinaNet, CenterNet… Кто-то из них предлагает альтернативный подход, а кто-то развивает текущий в сторону увеличения показателя производительности. Обсуждение почти каждого из них можно вынести в отдельную статью, по причине обилия фишек и ухищрений :)

                            К изучению предлагаю набор статей с разбором двухступенчатых Object Detection моделей. Умение разбираться в их устройстве приносит понимание базовых идей, применяемых и в других реализациях. В этом посте рассмотрим самую базовую и, соответственно, первую из них – R-CNN.
                            Читать дальше →
                            • +20
                            • 10.3k
                            • 2
                          • Задача для разработчика, или как мы без вендора ручные сканеры прошивали

                              Всем привет.

                              Мы, Виктор Антипов и Илья Алешин, сегодня расскажем о своем опыте работы с USB-девайсами через Python PyUSB и немного о реверс-инжиниринге.


                              Читать дальше →
                            • Роботаракан Петя за десять баксов

                              • Tutorial

                              Знакомьтесь с Петей, шестиногом о трёх сервоприводах


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


                              Читать дальше →
                            • Self-driving ГАЗ66 Monster Truck 1/16

                              Хабр, привет!

                              Хочу рассказать вам о том, как я делал и сделал самоуправляему машинку :)

                              Я мог бы рассказать сразу, как делать, сухо прикрепив схемы и bash команды, но так будет скучно. Предлагаю вам интересную (я надеюсь) историю о том, как лично я прошел этот путь, и куда пришел.

                              Те места, где было что фоткать, с фотками. Там, где про софт — скорее всего без фото.

                              Это будет действительно история в формате повествования, как я рассказывал бы вам за чашкой кофе. Это не про bash команды, python скрипты, и вот это вот всё.

                              Начнём с фотки и видео того, что получилось, и дальше вся история под катом.


                              Читать дальше →