Не удается начать захват на PTGRey камере (Dragonfly Express) после обновления прошивки \ SDK - PullRequest
0 голосов
/ 10 июля 2011

Я использую камеру Dragonfly Express от Point Grey Research в течение нескольких месяцев.Я написал код для использования камеры и захвата изображений с ней.В последнее время я обновил прошивку и SDK с 2 до 2.2, с тех пор я не смог получить изображения, используя мой код.Новая панель управления FlyCapture2 (2.2) работает и может захватывать видео с помощью той же камеры.В частности, я получаю сообщение об ошибке при вызове StartCapture для объекта Camera.Я вставляю вывод из моей программы и добавлю соответствующий код камеры:

* ИНФОРМАЦИЯ О КАМЕРЕ * Серийный номер - 7340769 Модель камеры - Dragonfly Express DX-BW Производитель камеры -Point Grey Research Sensor - Kodak KAI-0340DM (1/3 "640x480 CCD) Разрешение - 648x484 Версия прошивки - 1.1.1.21 Время сборки прошивки - ср. 21 июня 23:01:00 2006

Трассировка ошибки: Источник:. \ IidcCameraInternal.cpp (429) Построен: 23 сентября 2010 12:41:46 - Ошибка при запуске изохронного потока. + -> От:. \ Iso.cpp (1515) Построен: 23 сентября 2010 12:41:43 - Сбойизохронный запуск. Ошибка: 0x15.

    bool
Camera::Start()
{
    FlyCapture2::BusManager busMgr;
    unsigned int numCameras;
    error = busMgr.GetNumOfCameras(&numCameras);
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }
    FlyCapture2::PGRGuid guid;
    {
        error = busMgr.GetCameraFromIndex(0, &guid);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
    }


    // Connect to a camera
    error = cam.Connect(&guid);
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }

    // Get the camera information
    FlyCapture2::CameraInfo camInfo;
    error = cam.GetCameraInfo(&camInfo);
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }

    FlyCapture2::FC2Config Config;

    FlyCapture2::TriggerDelay Trigger;
    cam.GetTriggerDelay (&Trigger);
    Trigger.absValue = 0.000075;
    Trigger.onOff = true;
    error = cam.SetTriggerDelay (&Trigger);
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }
    FlyCapture2::StrobeControl s;
    {           
        FlyCapture2::TriggerMode Mode;
        memset (&Mode, 0, sizeof(Mode));
        Mode.source = 0;
        error = cam.GetTriggerMode (&Mode);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
        Mode.mode = 14;
        Mode.onOff = true;
        Mode.polarity = 1;
        error = cam.SetTriggerMode (&Mode);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
    }
    {
        FlyCapture2::Property p;
        memset (&p, 0, sizeof(p));
        p.type = FlyCapture2::AUTO_EXPOSURE;
        p.onOff = false;
        error = cam.SetProperty (&p);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
        memset (&p, 0, sizeof(p));
        p.type = FlyCapture2::BRIGHTNESS;
        p.absControl = true;
        p.absValue = Brightness;
        error = cam.SetProperty (&p);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
        memset (&p, 0, sizeof(p));
        p.type = FlyCapture2::SHUTTER;
        p.absControl = true;
        p.absValue = Shutter;
        p.onOff = false;
        error = cam.SetProperty (&p);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
        memset (&p, 0, sizeof(p));
        p.type = FlyCapture2::GAIN;
        p.absControl = true;
        p.absValue = Gain;
        p.onOff = false;
        error = cam.SetProperty (&p);
        if (error != FlyCapture2::PGRERROR_OK)
        {
            error.PrintErrorTrace();
            return false;
        }
        bool IsStandard = false;
        {
            error = cam.SetVideoModeAndFrameRate (FlyCapture2::VideoMode::VIDEOMODE_640x480Y8, FlyCapture2::FRAMERATE_60 );
            if (error != FlyCapture2::PGRERROR_OK)
            {
                error.PrintErrorTrace();
                return false;
            }
            FlyCapture2::Format7ImageSettings f7;
            memset (&f7, 0, sizeof(f7));
            f7.mode = FlyCapture2::MODE_0;
            float Percent = 1;
            f7.mode = FlyCapture2::MODE_0;
            f7.height = h;
            f7.width = w;
            f7.offsetX = 4+((640-w)/2);
            f7.offsetY = 2+((480-h)/2);
            f7.pixelFormat = FlyCapture2::PIXEL_FORMAT_MONO8;
            Percent = 100;
            bool Valid = false;
            FlyCapture2::Format7PacketInfo Info;
            error = cam.ValidateFormat7Settings  (&f7, &Valid, &Info);
            if (error != FlyCapture2::PGRERROR_OK)
            {
                error.PrintErrorTrace();
                return false;
            }           
            error = cam.SetFormat7Configuration (&f7, Info.recommendedBytesPerPacket);
            if (error != FlyCapture2::PGRERROR_OK)
            {
                error.PrintErrorTrace();
                return false;
            }
        }
    }
    cam.GetConfiguration  ( &Config);
    Config.grabTimeout = 4000;
    Config.numBuffers = 120;
    Config.grabMode = FlyCapture2::BUFFER_FRAMES;
    error = cam.SetConfiguration  ( &Config);
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }

    PrintCameraInfo(&camInfo);        

    // Start capturing images
    error = cam.StartCapture();
    if (error != FlyCapture2::PGRERROR_OK)
    {
        error.PrintErrorTrace();
        return false;
    }
}

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Только что увидел пункт 4 AndyUK, но не уверен, что это поможет оригинальному постеру.Мне нужна дополнительная информация об ошибке, которая возвращается.Чтобы получить более общий код для настройки формата 7, вам нужно запросить доступные размеры шагов с камеры.Каждая модель (и, возможно, версия прошивки) будет поддерживать размер шага для смещений и размер шага для размера изображения.Заданное смещение и размер должны быть кратны этим шагам.Если вы извлекаете информацию с помощью Camera.GetFormat7Info (), соответствующие поля будут offsetHStepSize, offsetVStepSize, imageHStepSize и imageVStepSize.Я не уверен, но похоже, что значения для модели Flea2 AndyUK были бы 8, 2, 8, 2. Шаги смещения и размера изображения не обязательно совпадают, хотя это часто встречается.

virtual Error GetFormat7Info( 
            Format7Info*   pInfo,
            bool*          pSupported );

/** Format 7 information for a single mode. */
struct Format7Info
{
        /** Format 7 mode. */
        Mode mode;

        /** Maximum image width. */
        unsigned int maxWidth;
        /** Maximum image height. */
        unsigned int maxHeight;
        /** Horizontal step size for the offset. */
        unsigned int offsetHStepSize;
        /** Vertical step size for the offset. */
        unsigned int offsetVStepSize;
        /** Horizontal step size for the image. */
        unsigned int imageHStepSize;
        /** Vertical step size for the image. */
        unsigned int imageVStepSize;
        /** Supported pixel formats in a bit field. */
        unsigned int pixelFormatBitField;

        /** Current packet size in bytes. */
        unsigned int packetSize;
        /** Minimum packet size in bytes for current mode. */
        unsigned int minPacketSize;
        /** Maximum packet size in bytes for current mode. */
        unsigned int maxPacketSize;
        /** Current packet size as a percentage of maximum packet size. */
            float percentage;
        /** Reserved for future use. */
        unsigned int reserved[16];

        Format7Info()
        {
            mode = MODE_0;
            maxWidth = 0;
            maxHeight = 0;
            offsetHStepSize = 0;
            offsetVStepSize = 0;
            imageHStepSize = 0;
            imageVStepSize = 0;
            pixelFormatBitField = 0;
            packetSize = 0;
            minPacketSize = 0;
            maxPacketSize = 0;
            percentage = 0.0f;
            memset( reserved, 0, sizeof(reserved) );
        }
    };
0 голосов
/ 28 сентября 2011

Уточните только одну или две вещи:

  1. Делает ли это постоянно, даже если вы выключаете и перезапускаете, отключаете FireWire и т. Д.?

  2. Вы пробовали запустить примеры FlyCapture2 SDK, предоставленные Point Grey, которые поставляются с вашей установкой?Они все еще работают нормально независимо от обновлений прошивки / SDK?Вы, кажется, используете внешние аппаратные триггеры, поэтому вы пробовали, например, пример AsynchTriggerEx, и он все еще работает нормально, когда вы передаете ему программные триггеры или внешние аппаратные триггеры?Или, может быть, попробовал пример FlyCap2MFC.exe просто для того, чтобы убедиться, что он по-прежнему записывает видео в порядке?

  3. Что происходит, когда вы переходите по коду построчно?Когда он входит в Start (), вы знаете, в какой момент начинается проблема?В какой момент значение «error», возвращаемое библиотекой, является нежелательным, то есть не значение PGRERROR_OK , которое должна возвращать каждая функция камеры?

  4. Когда я 'Я использовал камеру Flea2 в режиме Format7 (частичное изображение), для изображений в режиме MONO8 я заметил, что при настройке ширины для структуры Format7ImageSettings, если это значение не является кратным 8 для моего конкретного приложения, тогдаValidateFormat7Settings возвращает значение FlyCapture2 :: Error PGRERROR_IIDC_FAILED.Аналогично, значения высоты также должны были быть кратными 2 (четными), чтобы обеспечить удовлетворительную настройку Format7.Эта ошибка может привести к зависанию функции cam.StartCapture ().

Я не знаю, была ли эта последняя точка уже задокументирована в литературе о Пойнте Грее, но это просто наблюдение.Я могу ошибаться в пункте 4. Я все еще новичок в FlyCapture и пока не до конца понимаю все это.Я бы приветствовал возможность прямо сказать об этом.

Подробнее об этом последнем пункте здесь .

...