2012-03-16 178 views
2

我正在使用1GB内存的图像采集卡inspecta-5,也是一款高速摄像头“EoSens扩展模式,640X480 1869fps,10X8水龙头”。我是编程抓取器的新手,也是控制摄像头的新手。 Inspecta-5采集卡为我提供了不同的选项,例如将请求的帧数从camrea更改为grabber,并将采集卡的帧数更改为主存。也可以使用camrea链接向相机发送信号,并具有不同的曝光时间。 但我不知道我应该用什么来获得每秒1000帧的速率,我该如何测试它? 如果我在摄像机配置文件中设置以下选项: ReqFrame = 1000 GReqFrame = 1000 这意味着将1000帧从摄像机传输到抓取器,并且还将1000帧从抓取器传输到主存储器。 但这是否意味着我有1000fps?如何设置一个摄像头的FPS?

将fps设置为1000会有什么选择?还有我如何测试它,我真的在一秒钟内抓住了1000帧?

这里是一个抓取软件手册的链接:mikrotron.de/index.php?de_downloadfiles你可以在“Inspecta Level1 API for WinNT/2000/XP”部分找到软件手册。文件名是“i5-level1-sw_manual_e.pdf”,以防有人需要它。

THANK YOU

+0

到目前为止您尝试过什么?你能提供一个framegrabber和相机API的链接吗? – japreiss 2012-03-16 15:55:50

+0

这里是获取软件手册的链接:http://www.mikrotron.de/index.php?de_downloadfiles您可以在“Inspecta Level1 API for WinNT/2000/XP”部分找到软件手册。文件名是“i5-level1-sw_manual_e.pdf” – user261002 2012-03-16 16:01:42

+0

il sure level1 API给了我所有的选择,但因为我是新来的这种编程im不知道我该如何处理这些问题,以及我怎样才能检查(测试)如果我得到1000fps? – user261002 2012-03-16 16:05:03

回答

1

在1,000fps你没有太多的时间来捕捉一个框架,甚至保存的框架。使用以下示例并插入估计的FPS,捕获并保存延迟。在1000fps时,总共可以有大约.8ms的延迟(为什么不是.99999?我不知道 - 这与理论最大或我的旧PC有关)。

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(); 
} 
+0

假设它是一个灰度相机,图像采集卡内存本身可以容纳高达3495帧。我认为任何一台PC都不会超过每秒300GB。我甚至不确定他们能否突破。 – 2012-03-16 21:27:17

+0

顺便说一句,actionSimulator()方法的原因是,你可以抛出一些方差(有点随机性或最小/最大范围等)。 – Java42 2012-03-16 21:27:52

+0

@MarkRansom没多少时间,3.5秒@ 1Kfps - 必须尝试拍摄爆炸电影。 – Java42 2012-03-16 21:31:19