正在上传图片(0/1)

图像延迟问题

 0
手机看帖 3 659
我想用传回的图像做识别,但是发现图像有延迟。主要代码如下:
ReceiveDecodedData是接收到图像数据的回调,在这里面把接收到的数据保存到变量crr_pic中
然后单开一个线程computThread,执行函数ComputThreadFunc
detector.Detect(crr_pic)是调用的C++代码,在里面识别然后用opencv画图。
识别的用的网络速度很快,所以不会是计算速度的问题
而且我的识别是在另一个线程里,每次识别完后获取的是最新的crr_pic,所以就算识别速度慢,画面也应该是帧率低而不是有延迟。
请教一下是什么原因,谢谢大家。

public sealed partial class MainPage : Page
    {
        private DJISDKManager sdkManager = DJISDKManager.Instance;
        private DJIVideoParser.Parser videoParser;
        private Vision.Detector detector;
        Thread computThread;
        private byte[] crr_pic;
        private bool startComput = false;

        public MainPage()
        {
            this.InitializeComponent();
            detector = new Detector();
            computThread = new Thread(new ThreadStart(ComputThreadFunc));
            DJISDKManager.Instance.SDKRegistrationStateChanged += Instance_SDKRegistrationEvent;
            sdkManager.RegisterApp("");
        }

        async void ReceiveDecodedData(byte[] data, int width, int height)
        {
            crr_pic = data;
            if (!startComput)
            {
                startComput = true;
                detector.SetWH(width, height);
                computThread.Start();
            }
        }

        public void ComputThreadFunc()
        {
            while (true)
            {
               detector.Detect(crr_pic);
               Thread.Sleep(20);
            }
        }

评论
上传
你需要登录之后才能回帖    登录 | 注册
kv886   2020-12-10 3#
要分段调试下看延迟出现在哪一段,是MSDK获取就有延迟,还是传输有延迟,还是识别有延迟。
楼主  机甲大师 RoboMaster S1认证用户 2020-12-10 4#
kv88612-10 14:29
要分段调试下看延迟出现在哪一段,是MSDK获取就有延迟,还是传输有延迟,还是识别有延迟。
初步判断是opencv的原因,我把opencv画完图的waitKey时间调到20ms左右就没有延迟,难道是opencv画图的线程阻塞了获取图像数据的线程?而且我发现Thread.Sleep没有用。难道Thread在UWP里不能正常使用?
kv886   2020-12-11 5#
hujianhang2996机甲大师 RoboMaster S112-10 15:04
初步判断是opencv的原因,我把opencv画完图的waitKey时间调到20ms左右就没有延迟,难道是opencv画图的线程阻塞了获取图像数据的线程?而且我发现Thread.Sleep没有用。难道Thread在UWP里不能正常使用?
不清楚,windows SDK感觉没怎么维护了
收藏 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表