我一直在使用java开放式CV开发一些计算机视觉软件以瞄准炮塔,该程序的基本结构如下:
父类,处理用户JFX接口函数的Java-FX应用程序线程,运行下面讨论的调度服务执行程序线程,并包含一个名为Turret的类的实例和一个名为Target的类。
为了感兴趣,炮塔类有一个名为Aim的函数,它使用了java简单的串行库
这个父应用程序类计划运行两个线程,并按如下方式调用:
Start-processing-loops()
Runnable ImageProcessLoop = new Runnable(){
@Override
public void run()
{
capture footage and process frames()
Store data extracted from frames in Target class()
}
});
frametimer = Executors.newSingleThreadScheduledExecutor();
frametimer.scheduleAtFixedRate(ImageProcessLoop, 0, 1, TimeUnit.MILLISECONDS);
Runnable DataProcessLoop = new Runnable(){
@Override
public void run()
{
Use data stored in Target class to call a function in Turret class()
}
});
datatimer = Executors.newSingleThreadScheduledExecutor();
datatimer.scheduleAtFixedRate(DataProcessLoop, 0, ImProc.frametime/2, TimeUnit.MILLISECONDS);
当通过相机处理线程或父FX应用程序类调用类Turret中的函数Aim时,其执行没有延迟。
从数据处理线程调用Aim命令时,在执行命令之前有一个明显的(大约100 ms)延迟。
为什么一个线程和父类没有延迟,但数据处理线程会这样做。
已检查的问题:
数据处理循环需要很长时间才能处理: 不,测量的处理时间是1毫秒。这也证明了 事实上,父类在屏幕上实时显示数据。
在与图像处理相同的线程上运行处理命令 (首先列出执行者服务)当目标时再次没有延迟 命令叫做
亲切的问候,
戴尔