как установить fps камеры? - PullRequest
2 голосов
/ 16 марта 2012

Я использую фрейм-граббер Inspecta-5 с 1 ГБ памяти, а также высокоскоростную камеру «EoSens Extended Mode, 640X480 1869fps, 10X8 нажатий». Я новичок в кодировании для грабберов, а также в управлении камерой. Грейфер Inspecta-5 предоставляет мне различные варианты, например, изменение запрошенного количества кадров с камеры на захват, а также с захвата на основную память. Также я могу использовать ссылки Camrea для отправки сигнала на камеру и иметь разное время экспозиции. но я не совсем уверен, что я должен использовать, чтобы получить 1000 кадров в секунду, и как я могу это проверить? в соответствии с руководством по программному обеспечению, если я установил следующие параметры в профиле камеры: ReqFrame = 1000 GReqFrame = 1000 это означает передачу 1000 кадров с камеры на граббер, а также передачу 1000 кадров с граббера в основную память соответственно. но значит ли это, что у меня 1000fps?

что будет вариант для установки fps на 1000? а также как я могу проверить это, что я действительно захватил 1000 кадров в одну секунду ????

вот ссылка на руководство по программному обеспечению для граббера: mikrotron.de/index.php?de_downloadfiles вы можете найти в руководстве по программному обеспечению в разделе «Inspecta Level1 API для WinNT / 2000 / XP». имя файла - «i5-level1-sw_manual_e.pdf», на случай, если это кому-нибудь понадобится.

СПАСИБО

1 Ответ

1 голос
/ 17 марта 2012

При скорости 1000 кадров в секунду у вас не так много времени, чтобы сделать кадр или даже сохранить кадр. Используйте следующий пример и подключите свой предполагаемый FPS, фиксируйте и сохраняйте задержки. При скорости 1000 кадров в секунду вы можете иметь задержку около 0,8 мс (а почему бы и нет. 99999?

public static void main(String args[]) throws Exception {

    int fps = 1000;
    float simulationCaptureNowMS = .40f;
    float simulationSaveNowNowMS = .40f;

    final long simulationCaptureNowNS = (long)(simulationCaptureNowMS * 1000000.0f);
    final long simulationSaveNowNowNS = (long)(simulationSaveNowNowMS * 1000000.0f);
    final long windowNS = (1000*1000000)/fps;
    final long movieDurationSEC = 2;
    long dropDeadTimeMS = System.currentTimeMillis() + (1000* movieDurationSEC);
        while(System.currentTimeMillis() < dropDeadTimeMS){
            long startNS = System.nanoTime(); 
            actionSimulator(simulationCaptureNowNS);
            actionSimulator(simulationSaveNowNowNS);
            long endNS = System.nanoTime();
            long sleepNS = windowNS-(endNS-startNS);
            if (sleepNS<0) {
                System.out.println("Data loss. Try again.");
                System.exit(0);
            }
            actionSimulator(sleepNS);
        }
        System.out.println("No data loss at "+fps+"fps with interframe latency of "+(simulationCaptureNowMS+simulationSaveNowNowMS)+"ms");
}            

private static void actionSimulator(long ns) throws Exception {
    long d = System.nanoTime()+ns;
    while(System.nanoTime()<d) Thread.yield();
}
...