在线程之间丢失消息

时间:2013-07-10 19:08:16

标签: android multithreading opencv classification face-detection

我在Android环境中编程,我有一个主线程和一个工作线程。

主线程从视频流中捕获帧(将每一帧保存到Mat对象中),使用org.opencv.android.JavaCameraView打开,并将其时间戳发送到工作线程。工作线程应该能够接收它并使用某些技术处理它。

我发现,如果我在工作线程中使用级联分类器,对于面部检测,从主线程接收的一些消息将丢失。我用时间戳发现了这个,这是mat的一种索引。

如果我不使用级联分类器(“detectMultiScale”方法),接收到的垫子的顺序是:1,2,3,4,5,6,7 ...... 如果我使用级联分类器,我只收到:1,3,5,9等。有些消息丢失了。 为什么这个?我怎么解决?

发送消息的线程:

        Message m=Message.obtain();
        m.what=123;
        m.obj=resultedFrame;
        myAsynkTask.mHandler.sendMessage(m);

收到的帖子:

  while(running){
            synchronized (this) {
                Looper.prepare();
                mHandler = new Handler(){
                    public void handleMessage( Message msg ){
                        if(msg.what==123){
                            str.setmRgba(((structureMat)msg.obj).getmRgba());
                            str.setTimestamp(((structureMat)msg.obj).getTimestamp());
                            if((str.getmRgba())!=null) {
                                set_finalMat(str.getmRgba());
                                //Simple Face Detection with a cascade classifier.
                                faceFound = seg_asynk.findFaceMat(finalMatScaled, frameGrayAsynk, feat_asynk);
                           }

                        }
                    }
                };
                Looper.loop();
            }
        }

0 个答案:

没有答案