Jump to content
Compvision.ru

al072

Пользователи
  • Content count

    59
  • Joined

  • Last visited

  • Days Won

    1

al072 last won the day on February 14 2016

al072 had the most liked content!

Community Reputation

1 Новичек

About al072

  • Rank
    Эксперт
  1. Не заработал.. пробовал выбрать выходные форматы: .mkv и .avi Первый даже файл не создался., второй 0 байт
  2. Пробовал выставлять в настройках H.264 +avi; H.264 + mkv, H.264 + mp4 , но почему-то не одна из этих связок кодек+формат не захотела записывать файл . Для H.264 нужно специальные кодеки на ПК ставить или этот кодек как MJPG по умолчанию в винде есть? Может есть какие либо более достойные альтернативы VideoWriter? Больно уж этот класс скудный , может конечно в более свежих сборках OpenCV его допилили и доработали, но я использую версию 2.4.1 и как то совсем не весело., особенно огорчил метод VideoWriter::release(); С многопоточностью он походу дружит слабо, либо вообще не дружит.. при запуске в boost::thread метод показал крайне не стабильную работу через раз записывал файл, вызывал завершение программы, пришлось синхронизировать потоки и танцевать с mutex
  3. Добрый день! Коллеги, подскажите пожалуйста при помощи каких codec можно уменьшить размер выходного видео файла? Задача получить минимальный размер при сохранении среднего качества картинки получаемой с Web камеры. Перепробовал различные комбинации кодеков/выходного формата: 'M', 'J', 'P', 'G' / .avi , 'M', 'P, '4', 'V' / .mp4 , 'D', 'I', 'V', 'X' / .avi , 'A', 'V', 'C', '1' / .avi . На данный момент 30 минут видео с 10 FPS весит > 1GB, в идеале хотелось бы добиться 200-300 мбайт. Вот код функции с помощью которого пишу видео файл с web камеры: int fcc = CV_FOURCC('M', 'J', 'P', 'G'); int fps = 25; string filelocation = "С:\\video.avi"; cv::Size frameSize(videoCapture.get(CV_CAP_PROP_FRAME_WIDTH), videoCapture.get(CV_CAP_PROP_FRAME_HEIGHT)); VideoWriter testwriter(filelocation, fcc, fps, cv::Size(640,480), true); while (true) { cv::Mat writefrm; //Get frame from webcam videoCapture >> writefrm; }
  4. Всем большое спасибо за советы и помощь! Проблема решена. Пересобрал opencv c помощью CMake и VS2019 и все заработало... Бл столько времени убил, нужно было сразу с этого начинать
  5. Спасибо за каскады, к сожалению не помогло! BP поставил везде где только можно было в радиусе этой ошибки, но без успешно... Не знаю на сколько глупость щас скажу, но может эта ошибка во время debug появляется по причине того что функция detectLargestObject не в основном потоке программы у меня крутится, а в отдельном потоке запускается...
  6. Пробовал всяко разно и к переменной в коде путь к xml привязывать и абсолютный путь в формате "C:\\" задавал, падает сволочь., самое интересное что при сборке в VS 2010 все работает идеально.. Собрал в Debug версии, пошел дебаггером гулять.. странно но в debag режиме я совсем в другом месте получаю debug Assertion после того как нажимаю кнопку повтор дальше вызов завершается на функции detectLargestObject в самом низу функции после строчки Return an Invalid rect , то есть крайнее условие If не выполняется, выполняется ветка else. void detectLargestObject(const Mat &img, CascadeClassifier &cascade, Rect &largestObject, int scaledWidth) { // Only search for just 1 object (the biggest in the image). int flags = CASCADE_FIND_BIGGEST_OBJECT;// | CASCADE_DO_ROUGH_SEARCH; // Smallest object size. Size minFeatureSize = Size(20, 20); // How detailed should the search be. Must be larger than 1.0. float searchScaleFactor = 1.1f; // How much the detections should be filtered out. This should depend on how bad false detections are to your system. // minNeighbors=2 means lots of good+bad detections, and minNeighbors=6 means only good detections are given but some are missed. int minNeighbors = 4; // Perform Object or Face Detection, looking for just 1 object (the biggest in the image). vector<Rect> objects; detectObjectsCustom(img, cascade, objects, scaledWidth, flags, minFeatureSize, searchScaleFactor, minNeighbors); if (objects.size() > 0) { // Return the only detected object. largestObject = (Rect)objects.at(0); } else { // Return an invalid rect. largestObject = Rect(-1,-1,-1,-1); } } дальше вот что вижу в студии: Если в Degug Assertion окне нажимаю другую кнопку продолжить, получаю следующее сообщение в студии: Господа как дальше быть то? подскажите плиз куда смотреть что копать еще можно
  7. Доброго времени суток! Есть большой проект с распознаванием лиц который разрабатывался в Windows 7 + Visual Studio 2010, появилась задача мигрировать проект для дальнейшей разработки на Windows 10 + Visual Studio 2019. Миграция проекта прошла успешно, все основные функции и модули проекта работают, но есть одна проблема при попытке чтения CascadeClassifier из xml файла возникает ошибка: Вызвано исключение по адресу 0x79C8A5A9 (opencv_core2410.dll) в sdkDemo.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00000001. Вот код при выполнении которого происходит исключение: void CsdkDemoDlg::initDetectors(CascadeClassifier &faceCascade) { // Load the Face Detection cascade classifier xml file. try { faceCascade.load("C:\\lbpcascade_frontalface.xml"); <<<<<<<-------Вот здесь вылетает ИСКЛЮЧЕНИЕ } catch (cv::Exception &e) {} } Библиотеки и инклуды все подключены как положено, проект компилируется и запускается без ошибок., при миграции проекта код программы не менялся, используется библиотека Open CV 2.4.1, при сборке на VS 2010 все работает без исключений... Помогите плиз найти проблему, готов предоставлять всю необходимую дополнительную информацию. Спасибо.
  8. Спасибо господа! Понял куда нужно копать
  9. Добрый день! Подскажите пожалуйста как лучше реализовать обнаружение нескольких различных предметов на одном изображении? мы используем классификатор обнаружения лица "lbpcascade_frontalface.xml" и умеем обнаруживать лицо на изображении, и допустим у нас есть еще несколько различных классификаторов "собаки.xml", "кошки.xml", "сигареты.xml" и т.д. как можно реализовать обнаружение всех этих классификаторов на одном изображении одновременно ? какой алгоритм или подход лучше использовать? Программу реализуем на opencv 2.4.1 (C++) заранее большое спасибо всем кто откликнется.
  10. Analog video capture device

    Уважаемые форумчане! Откликнитесь плиз! Может не понятна суть вопроса?
  11. Analog video capture device

    Доброго времени суток! Господа прошу помочь выбрать устройство для преобразования аналогового видеосигнала в цифровой для использования в проекте opencv. Рассматриваю вот это устройство: http://s.aliexpress.com/ZZFnYvu6 Но судя по информации в интернете и на форуме opencv никому так и не удалось подружить этот граббер с opencv. Если кто-нибудь сталкивался с подобной задачей поделитесь опытом плиз.
  12. HBitmap to cvMat

    Добрый день! Спасибо за пример кода. Подскажите пожалуйста какой HDC нужно передавать в функцию и как его создать?
  13. Я это понимаю, просто нужна помощь в синхронизации потоков и совет по оптимизации обработки изображения. Также пока не понятно необходимо ли реализовывать очередь и поможет ли она ускорить процесс распознавания?
  14. Я бы с радостью загнал все в один поток и радовался жизни, но вот только не знаю каким образом оптимизировать самую прожерливую функцию которая обрабатывает входное изображение (как я ранее писал она занимает порядка 45 миллисекунд). Пробовал оборачивать эту функцию в #pragma omp parallel, но результатов это не дало только стало еще хуже.. Можете помочь с примером кода или чуть подробней расписать как реализовать очереди кадров? Если я правильно понял из ваших комментариев, то мне необходимо два потока, в одном потоке я получаю изображения с камеры и запихиваю их в очередь изображений и в этом же потоке я должен создать очередь для вывода изображений: 1) как сделать очередь изображений и очередь вывода и есть ли в этом смысл? Если функция proccessFrame в любом случае занимает не менее 45 миллисекунд, то следовательно очередь вывода будет пополняться не ранее чем через 45 миллисекунд. То есть никакой оптимизации по времени мы не получим правильно? 2) куда расставлять mutex? 3) как синхронизировать потоки? Извиняюсь за кучу вопросов, с потоками вообще раньше не работал.. Для реализации потоков прикрутил boost к проекту.
  15. Господа, подскажите плиз как правильнее реализовать работу потоков и оптимизировать работу программы. Имеется 4 основных процесса: 1) Получение изображения с камеры (занимает 2-3 миллисекунды); Полученное изображение записывается в cv::Mat Frame; 2) Обработка изображения (занимает 45 миллисекунд); Обработанное изображение записывается в cv::Mat processedFrame; 3) Распознавание занимает (от 5 - 40 миллисекунд в зависимости от колличества лиц и меток в базисе); 4) Вывод изображения на форму занимает (2 миллисекунды). Если запускать все четыре процесса паралленьно каждый в своем потоке, то получается что возникает необходимость синхронизировать 1,2,3,4 потоки последовательно, и смысл в многопоточности теряется. То есть пока не завершен 1 процесс получения кадра, нет смысла запускать 2 процесс обработки этого кадра, пока кадр не обработан, нет смысла выполнять функцию 3 распознавания и соответственно выводить изображение на форму 4. Подскажите каким образом можно оптимизировать работу потоков и как добиться сокращения времени работы цикла начиная от получения изображения до вывода его на форму? То есть изначально все четыре процесса 1,2,3,4 я запускал в одном потоке и это занимало 50-150 миллисекунд в зависимости от количества лиц и меток. Сейчас я запускаю эти 4 процесса каждый в своем потоке, но скорость вывода изображения на форму от этого не меняется, более того появляется еще больше геморроя с синхронизацией работы потоков..
×