Стрим OpenCV cv :: Mat изображение на сайт (html5 страница) - PullRequest
1 голос
/ 07 мая 2019

У меня есть код c ++, работающий на Raspberry Pi с использованием OpenCV для обработки ввода с камеры (определение формы и цвета).Вот нить, где я снимаю свои изображения с моей пи-камеры:

(имена переменных на французском языке, извините за это)

    Mat imgOriginal;
    VideoCapture camera;
    int largeur = camPartage->getLargeur();
    int hauteur = camPartage->getHauteur();

    camera.open(0);
    if ( !camera.isOpened() )
    {
        screen->dispStr(10,1,"Cannot open the web cam");
    }
    else
    {
        screen->dispStr(10,1,"Open the web cam");

        camera.set(CV_CAP_PROP_FRAME_WIDTH,largeur);  
        camera.set(CV_CAP_PROP_FRAME_HEIGHT,hauteur); 
        camera.set(CV_CAP_PROP_FPS,30);
    }
    while(1)
    {
        if(largeur != camPartage->getLargeur() || hauteur != camPartage->getHauteur())
        {
            largeur = camPartage->getLargeur();
            hauteur = camPartage->getHauteur();
            camera.set(CV_CAP_PROP_FRAME_WIDTH,largeur);
            camera.set(CV_CAP_PROP_FRAME_HEIGHT,hauteur);
        }

        camera.grab();
        camera.retrieve(imgOriginal);

        camPartage->setImageCam(imgOriginal); //shared object

        if(thread.destruction == DESTRUCTION_SYNCHRONE)
        {
            pthread_testcancel();
        }

        usleep(20000);
    }

Теперь я хочу передать эти изображения на мойСайт размещен на другом Raspberry Pi.Я изучил gstreamer, ffmpeg и сокеты, но я не нашел хорошего примера в c ++, который бы работал для меня.Я пытаюсь получить минимально возможную задержку.

Некоторые люди предложили использовать raspistill, но я не могу открыть камеру в другой программе, так как она уже открыта OpenCV.

Если вам нужна дополнительная информациядайте мне знать, любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 мая 2019

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

Одним из подходов является использование приложений высокого уровня, таких как MJPG streamer , RPi IP Camera и т. Д.

Другой подход заключается в том, что вы можете передавать потоковые изображения с камеры (по RTP, UDP и т. Д.) С помощью GStreamer, FFmpeg, Raspistill и т. Д. При таком подходе необходимо иметь приложение-приемник для получить потоки (например, FFmpeg).

Существует также другой подход, который вы уже заявили в своем вопросе: прямой доступ к камере и захват изображений, а затем передача их вручную по сети. При таком подходе у вас больше свободы для изменения дизайна (например, добавление собственного сжатия, шифрования и т. Д.), Но вы должны позаботиться о сетевом протоколе самостоятельно. В вашем примере вы можете передавать каждый кадр в сети с помощью простого сокета TCP / IP или создать простой веб-сервер. Очевидно, что вы не можете получить доступ к камере с двумя приложениями одновременно. Вы можете использовать v4l2loopback для создания нескольких интерфейсов камеры и доступа к ним из нескольких приложений, но это не решит вашу проблему.

Есть хорошие проекты, такие как rpi-webrtc-streamer и streameye , которые используют низкоуровневые протоколы для передачи изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...