Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Yesterday
  2. Last week
  3. Стабилизация лицевых точек OpenCV

    Здравствуйте, предварительныя обработка может убрать шум, если усрежнять кадры или делать морфологию, но, как вы заметили, это не сильно добавляет стабильности, за исключением некоторых редких случаев. Намного лучшие результаты дают фильтры по модели. Это предполагает, что лицо имеет меньше степеней свободы чем независимые точки в том количестве что выдает детектор. Если кратко то у точек 3*N степеней свободы, а у лица M + 6, где N - количество точек, M - количество независимых групп мышц. Соответственно, точки не могут гулять как попало, они должны принадлежать модели. Есть параметрические модели лиц, например Basel Face model одна из наиьолее популярных, она довольно тяжелая, но можно достать из нее только нужные точки. Дальше линейная оптимизация, поможет сопоставить 2D и 3D, найти поворот, масштаб, смещение и параметры формы. Вот тут посмотрите: https://github.com/3d-morphable-models/curated-list-of-awesome-3D-Morphable-Model-software-and-data
  4. Добрый день, Я сделал приложение на OpenCV + MFC для управления мышкой людьми с неврологическими нарушениям https://preability.com/face-controlled-mouse/ Человек сидит и двигает головой перед вебкой ноутбука, мышка двигается, он улыбается – происходит клик и пр. В целом, курсор удалось стабилизировать за счет отслеживания согласованного движения точек + EWMA фильтра (Калмана тяжелее и оказался не особо лучше). Разрежение угловых точек по всей площади тоже помогло немного. Но я вижу, что у похожей старой программы (eViacam) идет предварительная обработка изображения (с такими же древними внешними библиотеками для вебкамер). И за счет этого угловые точки стабильнее. Я включил equalizeHist() для ROI в области лица. В темноте детектор стал работать гораздо лучше. Но лицевые точки все равно пляшут при неровном освещении. Старая прога справлялась. Я абсолютно не в теме предварительной обработки и хочу понять, что можно сделать с видео на входе дектектора? Пробовал подключить морфологию openCV, но не особо улучшил, зато нагрузил процессор. А у многих людей ноуты на целеронах. Подскажите, пожалуйста, кто в теме, как улучшить видео для детектора??? Не обязательно библиотеки OpenCV, главное на лету и не слишком нагружая процессор...
  5. Earlier
  6. Камеры Basler

    Все так, пообщался уже с sensotek, но увы сроки поставки от них 26-28 недель, что крайне долго. Каких еще производителей можно рассмотреть взамен Basler usb 3.0 камер?
  7. Камеры Basler

    На официальном сайте говорится, что в России есть официальное представительство: sensotek
  8. Камеры Basler

    Доброго времени суток. Никак не могу найти поставщиков usb камер Basler. Ранее поставками занимались https://visionmachines.ru, но больше не поставляют. Прошу подсказать где можно заказать и приобрести Basler.
  9. Если шаблон в изображении встпечается всегда, то можно использовать https://www.ccoderun.ca/programming/doxygen/opencv/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be . Функция matchTemplate поможет найти положение шаблона, но это не детектор, который скажет о наличии или отсутствии его на изображении. Если нужен детектор, то надо обучить его на ваш объект. Погуглите OpenCV objtct detector.
  10. всем привет. я не давно начал изучать opencv, версия 4.5.3 потихоньку изучаю документацию прошу помочь и написать названия функций и методов, в какую сторону гуглить для моей задачи: есть картинка 250х250 пикселей и есть картинка 8х8 пикселей мне нужно найти есть ли маленькая картинка на большой? я написал функции по преобразованию искомой картинки в ч\б и для их сравнения высчитываю хэш. как искать теперь эту картинку на большой? нужно объявлять ROI 8х8 пикселей в начальной точке координат Х,У, преобразовывать в ч\б, считать хэш и сравнивать? Если не найдено, сдвигать на 1 пиксель в бок и сравнивать опять? И так пока не пройду всю картинку 250х250? как ROI (это же cv::Rect?) преобразовать к cv::Mat? может есть какие-то примеры?
  11. в общем. это не задача для гана. решилось все обычным автоэнкодером. пока только в 2D по одному признаку выравнил. для кодера хватило 3 слоя свертки с макспулингом, батч норм и нелинейностью. декодер в обратной последовательности. вместо макспулинга - апсемплинг. теперь в 3D делаю. и по нескольким признакам.
  12. OpenCV 4.5.3 c поддержкой freetype

    Посмотрите тут: Конечно это не встраивание, но может это и лучше ) Ну а если более гибкий интерфейс нужен посмотрите в сторону ImGui или Qt шаблон для Imgui + opencv можно взять здесь: https://github.com/Smorodov/imgui_opencv_template русский язык и ttf шрифты поддерживаются.
  13. Доброго времени суток уважаемые форумчане! Бьюсь над проблемой уже 3-и сутки и не могу собрать OpenCV через CMake c поддержкой freetype. Исходники opencv и contrib скачаны с офф ветки (релиз 4.5.3) все распаковано как надо в extra_modules_pass подключены contrib., собираю статику., но проблема в том что в отличие от остальных модулей freetype просто не собирается (отсутствует в папке opencv2 includes и соответственно в libs его тоже нет). Перерыл интернет., понимаю что нужно при сборке CMake как то подключить зависимости: harfbuzz и freetype., а может и не нужно??? Очень хочется русский язык в видеопоток., помогите плиз разобраться что куда... Здесь вывод симэйка (во вложении) cmakeout.txt
  14. Ну может я что то упустил. Я имел ввиду, что входная картинка, например, вариант нормально расположенных зубов здоровой челюсти, вариаций то немного, на мой взгляд дилетанта ) А сеть постарается собрать что то максимально близкое из данных ей деталей. Как то так.
  15. Если ей при использовании нужно давать картинку с хорошим расположением, то теряется смысл всего мероприятия. Мне от генератора как раз надо получить картинку с хорошим расположением как результат его работы над входным набором мешей. Ну или матрицу трансформаций, а потом отрисовать хорошую картинку, используя эту матрицу.
  16. Ну допустим так: GAN получает рендеренные картинки как они должны выглядеть. Генератор получает при обучении случайные наборы зубов и расставляет, чтобы получать картинки, близкие к требуебым. При использовании, даем набор сеток и картинку(-ки) с хорошим расположением и получаем набор из 32 матриц трансформации. Еще посмотрите обратный рендеринг (inverse rendering), например matsuba2. VTK - все же больше для других целей, реалистично в нем сложно отрендерить.
  17. для рендеринга планирую vtk использовать, есть наработки. с генератором не совсем, но примерно - он будет выдавать матрицу сдвигов всех зубов. А при инференсе он будет на вход получать 32 меша? а что с ними делать, не понятно. сравнивать последовательно каждый зуб с чем? ума не приложу. Читаю про cGAN - там на входе генератора при обучении конкатенируют с шумом например метку. он учится таким образом, что при инференсе метка на входе приведет к тому что генератор выдаст только объекты максимально похожие на те, которым его обучали вместе с этой меткой. а тут я что буду в качестве условия передавать на вход генератора в процессе обучения? все 32 меша зубов? и что с ними делать? выяснить какие-то фичи и потом каждый по своему каналу пройдя все фильтры преобразуется в матрицу 32*16? так что-ли?
  18. Я имел ввиду сделать рендерилку, на взоде 3Д моделька с параметрами положения каждого зуба, поворот, смещение, масгтаб , это все обычно и запихнуто в матрицу 4 на 4 для каждого объекта. Итого, картинка будет функцией от 16*32 параметров. А GAN будет обычный, картинковый ) , датасет тоже картинки. Сейчас есть хорошие PBR рендерилки, ну например googlовский filament иу или что нибудь из либов Nvidia. PS: погуглите еще 3d morphable models может наведет на новые идеи. Ну и вот это гляньте: https://github.com/NVlabs/nvdiffrast
  19. вот есть много ровных челюстей в качестве обучающего датасета. например таких на второй картинке выше. а как задать на входе параметры генератора ? conditional GAN - это оно? а что за матрицы трансформаций? ко всему еще - у меня 3d meshes. свертка для них описана вроде. для Gan нужна вроде деконволюция. Это загадочная штука в случае меша, но мне генерить сами зубы не нужно, их нужно только передвигать. т.е. подав на вход генератора, не изменять их в процессе учебы или инференса, а только передвигать их, поворачивать и тп. поэтому деконволюция мешей вроде это не мой случай. Куда мне дальше копать? насколько вообще сложной будет сеть? С одной стороны в каждом зубе под 10к вертексов. много. но с другой, мне с них нужны немножко фичей плана касательной к передней поверхности, удаление от плоскости окклюзии, угол курса, тангажа, крена и расстояние между зубами Буду пробовать. Может еще что-нибудь почитать посоветуете на эту тему?
  20. Да нет, просто вопрос как генерировать и как оценивать. Можно, например, генерировать изображение лица с улыбкой из тестируемых зубов, а димкриминатор булет оценивать красоту ) Задаем параметры на входе генератора с матрицами трансформаций, например, на выходе - изображение, далее как обычный ГАН. Можно напрямую, , без изображений, но надо как то обучить дискриминатор .
  21. Спасибо, все изучил. про ICP даже немного знал. Примерно понятно про фичепойнты мешей. Есть сети, которые их извлекают. Теперь имею идею. Думаю как придумать GAN сеть для этой цели. Основное сомнение - везде на вход генерирующая сеть получает шум, и учится из шума делать что-то под руководством сети-дискриминатора. Мне же генерить зубы как таковые не надо. мне их надо только двигать в нужном направлении. как тут быть? как задаче подойти? как на вход генератора крывые зубы подать, а ровные получить? Или я не то говорю?
  22. Занятно, но тут ведь не только эстетика важна, нужно же и поверности совместить правильно. Нейронку, кстати, я думаю, можно обучить сегментации поверхностей, где то на гитхабе видел проекты для сегментации 3д сеток (сегментация). Далее, можно научить определять что это за зуб, и где его правильное место (классификация). После этого, можно попытаться решить задачку регистрации 3д сеток. (Найти совмещение шаблона и нашей сетки). Классика здесь алгоритм iterative closest point. Ну дальше по необходимости и фантазии ) PS: Вот кстати про 3д зубы ) : https://github.com/Tai-Hsien/MeshSegNet ну и вот тут покопайтесь: https://github.com/QiujieDong/Mesh_Segmentation
  23. было так как на картинке start. а должно стать как на final
  24. Так что имеем то ? Сцену в 3д формате, и надо выставить объекты по некоторой ориентированной кривой ? Так объекты аннотированны? Или где верх/низ, и т.д. должна решать сеть? В общем пока не очень понял что дано, а что ищем. Может пару картинок привелете, если не секретно конечно )
  25. Есть несколько трехмерных объектов ( mesh) неправильно - криво, косо, со смещением, наклоном расположенных друг относительно друга. Нужно их всех выровнять, подровнять, выстроить вдоль симмертричных ровных дуг. действующий алгоритм делает это с приемлемым результатом примерно в 70% случаев. и не использует ИИ, а использует страшную функцию, линеаризует, аппроксимирует и т.п. Хочется улучшить точность позиционирования и есть желание применить ИИ, но нет ни одной идеи на что это может быть похоже. эта задача классификации, регресии, сегментации? в качестве обучающей выборки есть большое количество правильных сетапов - как должно быть в итоге. Все осложняет тот факт что каждый объект в какой-то степени уникален. у каждого свои бугорки, выступы, трещинки, и по большому счету своя форма, несмотря на то, что все они принадлежат к одному классу. У каждого из объектов при этом есть набор лендмарков, или характерных точек - самая нижняя / верхняя точка, линеаризованная граница кромки, плоскость касательная к внешнему выступу, и т.п, eще порядка 10-15 фич. Почему решил ИИ - потому что в своих подходах он подобен человеку, а сейчас оценку итога работы алгоритма дает именно человек - по своему опыту судит - нравится/не нравится, красиво/некрасиво, эстетично/ не очень. Что тут можно сделать, в какую сторону думать?
  26. Один раз решив PnP, имеем матрицу поворота / переноса. Если добавленное смещение мало, можно взять любой треугольник и его проекцию, и по ним вычислить новый базис. И можно не городить огород )
  27. Дело в том, что сначала solvePnP вычисляю положение на кадре с камеры без изменений. При дальнейшей работе кадр уже подвергается трансформации что бы "выровнять" кадр относительно объекта - для удобства пользователя. И пользователь уже на трансформированном кадре задаёт интересующие точки. Так вот, что бы дальнейшие расчёты работали правильно приходится эти точки сначала трансформировать с инвертированной матрицей трансформации, потом обработать, а потом снова трансформировать обратно для вывода. Хочу избежать этих лишних трансформаций, и работать с rVec и tVec как будто они получены были уже с кадра со всеми трансформациями. Возможности сразу вычислить solvePnP на кадре со всеми трансформациями нет, т.к. они могут добавиться позже и вообще поменяться.
  1. Load more activity
×