Запуск PiCamera в Ubuntu на C++

Я пытаюсь запустить свой модуль PiCamera Module v2.1 на моем RaspberryPi4. К сожалению, я должен установить 64-битный дистрибутив Ubuntu 19.10. Все идет нормально.

Я установил Opencv4. Были некоторые большие проблемы, потому что похоже, что Ubuntu не поставляется с VideoCore, raspi-config и т. Д. Поэтому я загрузил и обновил свою прошивку с помощьюsudo rpi-update и установлен userland.

Сначала я попытался открыть камеру с помощью Videocapture cap(0), но это вызывает кучу ошибок (см. здесь Ubuntu 19.10: Включение и использование модуля камеры Raspberry Pi v2.1), и я читал, что это только для USB-камер (на самом деле я не могу в это поверить, потому что под Raspbian, Я могу использовать модуль вот так)

Итак, я погуглил и нашел это репо https://github.com/cedricve/raspicam. Я установил его, но даже с этим не могу запустить его.

Опять же, вот что я упал:

  • установить opencv4
  • обновить прошивку
  • установить пользовательскую среду
  • письмо start_x=1 и "gpu_mem=128" на /boot/firmware/config.txt
  • делать modprobe bcm2835-v4l2
  • sudo vcgencmd get_cameraприводит к поддерживаемым и обнаруженным = 1

Когда я использую sudo raspistill -o test.jpgоткроется окно, и изображение будет сохранено. Но есть ошибки:

mmal: mmal_vc_shm_init: could not initialize vc shared memory service
mmal: mmal_vc_component_create: failed to initialise shm for 'vc.camera_info' (7:EIO)
mmal: mmal_component_create_core: could not create component 'vc.camera_info' (7)
mmal: Failed to create camera_info component

Также мне нужно запустить его с помощью sudo, хотя я запускалsudo usermod -a -G video ubuntuев everal раз (также перезагружен). Странно, правда?

Мой пример сценария для доступа к камере:

#include <iostream>
#include <raspicam/raspicam_cv.h>
using namespace std; 

int main ( int argc,char **argv ) {

    time_t timer_begin,timer_end;
    raspicam::RaspiCam_Cv Camera;
    cv::Mat image;
    int nCount=100;
    //set camera params
    Camera.set( cv::CAP_PROP_FORMAT, CV_8UC1 );
    //Open camera
    cout<<"Opening Camera..."<<endl;
    if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}
    //Start capture
    cout<<"Capturing "<<nCount<<" frames ...."<<endl;
    time ( &timer_begin );
    for ( int i=0; i<nCount; i++ ) {
        Camera.grab();
        Camera.retrieve ( image);
        if ( i%5==0 )  cout<<"\r captured "<<i<<" images"<<std::flush;
    }
    cout<<"Stop camera..."<<endl;
    Camera.release();
}

Компиляция прошла успешно:

sudo g++ stream.cpp -I/usr/local/include/opencv4 -I/usr/local/include -L/usr/local/lib -L/opt/vc/lib -lraspicam_cv -lopencv_core -lraspicam -lmmal -lmmal_core -lmmal_util -lopencv_highgui -lmmal_vc_client -lvcos -lbcm_host -o stream

Выполнение потока (даже с sudo) приводит к:

Opening Camera...
mmal: mmal_component_create_core: could not find component 'vc.ril.camera'
Failed to create camera componentopen Failed to create camera component/home/raspicam/src/private/private_impl.cpp 103
Error opening the camera

Есть ли у кого-нибудь идеи, что я могу попробовать?

Благодарность!

0 ответов

У меня была эта ошибка при компиляции узла ROS для raspicam. Я исправил это, добавив в свой CMakeLists.txt следующее:

установить (CMAKE_SHARED_LINKER_FLAGS "-Wl,- без необходимости")

Проблема заключалась в том, что ссылка на библиотеку, содержащую vc.ril.camera, была оптимизирована компоновщиком, и счетчик не был найден во время выполнения.

Надеюсь, это сработает для вас.

Другие вопросы по тегам