コード例 #1
0
        // 解析测试视频
        private List <TestVideo> ParseTestVideo(string videoPath)
        {
            if (Directory.Exists(videoPath))
            {
                List <TestVideo> testVideos = new List <TestVideo>();
                var videos = Utility.Director(videoPath).Where(f =>
                {
                    string ex = Path.GetExtension(f);
                    return(ex == ".ts" || ex == ".mp4" || ex == ".flv" || ex == ".avi");
                }).ToList();

                foreach (var item in videos)
                {
                    var _testVideoItem = new TestVideo {
                        VideoName = Path.GetFileName(item), VideoPath = Path.GetDirectoryName(item)
                    };
                    testVideos.Add(_testVideoItem);
                }

                return(testVideos);
            }
            else
            {
                MessageWindow.ShowDialog($"无法访问文件夹 [{videoPath}]", this);
            }

            return(null);
        }
コード例 #2
0
 // 添加测试视频
 public void AddTestVideoItem(TestVideo item)
 {
     testVideoData.Add(item);
 }
コード例 #3
0
        // 恢复上次状态
        public void Resume()
        {
            if (!File.Exists("./data.db"))
            {
                CreateBlankTabs();
                return;
            }

            string DBPath = "Data Source = " + AppDomain.CurrentDomain.BaseDirectory + @"data.db";

            dbConnection = new SQLiteConnection(DBPath);
            if (dbConnection == null)
            {
                MessageWindow.ShowDialog("无法连接到数据库 data.db", this);
                return;
            }
            dbConnection.Open();

            SQLiteCommand cmd = new SQLiteCommand();

            cmd.Connection = dbConnection; // 连接数据库

            // 标注视频
            cmd.CommandText = "SELECT * FROM VideoInfoTab";
            using (SQLiteDataReader dataReader = cmd.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    // VideoDataTab(Scene, Video, Incident, Count)
                    string _scene    = dataReader.GetString(0);
                    string _video    = dataReader.GetString(1);
                    string _incident = dataReader.GetString(2);
                    int    _count    = dataReader.GetInt32(3);

                    var _videoInfoItem = new VideoInfo
                    {
                        Scene     = _scene,
                        VideoName = _video,
                        Incident  = _incident,
                        Count     = _count
                    };
                    videoInfoList.Add(_videoInfoItem);
                }
            }

            // 告警图片
            cmd.CommandText = "SELECT * FROM AlarmImageTab";
            using (SQLiteDataReader dataReader = cmd.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    // (id INTEGER, image VARCHAR(512) PRIMARY KEY, scene VARCHAR(64), incident VARCHAR(64), video VARCHAR(256), frame INTEGER, state INTEGER)
                    int    _id        = dataReader.GetInt32(0);
                    string _imgPath   = dataReader.GetString(1);
                    string _scene     = dataReader.GetString(2);
                    string _incident  = dataReader.GetString(3);
                    string _videoName = dataReader.GetString(4);
                    int    _frame     = dataReader.GetInt32(5);
                    int    _state     = dataReader.GetInt32(6);
                    int    _count     = dataReader.GetInt32(7);

                    var _alarmDataItem = new AlarmImage
                    {
                        ID            = _id,
                        ImagePath     = _imgPath,
                        Video         = _videoName,
                        Scene         = _scene,
                        Incident      = _incident,
                        Frame         = _frame,
                        State         = (DetectType)_state,
                        IncidentCount = _count
                    };

                    alarmImageListAll.Add(_alarmDataItem);
                    dataWindow.AddAlarmImageItem(_alarmDataItem);
                }
            }

            // 测试视频
            cmd.CommandText = "SELECT * FROM TestVideoTab";
            using (SQLiteDataReader dataReader = cmd.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    // (VideoName VARCHAR(256) PRIMARY KEY, Directory VARCHAR(256))
                    string _videoName     = dataReader.GetString(0);
                    string _videoPath     = dataReader.GetString(1);
                    var    _testVideoItem = new TestVideo {
                        VideoName = _videoName, VideoPath = _videoPath
                    };
                    testVideoList.Add(_testVideoItem);
                    dataWindow.AddTestVideoItem(_testVideoItem);
                }
            }

            // 告警图片路径
            cmd.CommandText = "SELECT * FROM DataPathTab WHERE Item = 'AlarmImagePath'";
            using (SQLiteDataReader dataReader = cmd.ExecuteReader())
            {
                if (dataReader.Read())
                {
                    string _imagePath = dataReader.GetString(1);
                    if (Directory.Exists(_imagePath))
                    {
                        fileTree.Clear();
                        fileTree.Add(new FileRecord {
                            Info = new DirAndFileInfo {
                                FullName = _imagePath
                            }
                        });
                    }
                    else
                    {
                        MessageWindow.ShowDialog($"无法访问告警图片路径 [{_imagePath}]");
                    }
                }
            }

            // 上一次统计的告警图片路径
            cmd.CommandText = "SELECT * FROM DataPathTab WHERE Item = 'LastImagePath'";
            using (SQLiteDataReader dataReader = cmd.ExecuteReader())
            {
                if (dataReader.Read())
                {
                    string _dir = dataReader.GetString(1);
                    if (Directory.Exists(_dir))
                    {
                        foreach (var item in alarmImageListAll)
                        {
                            if (item.ImagePath.Contains(_dir))
                            {
                                alarmImageList.Add(item);
                            }
                        }
                    }
                    else
                    {
                        MessageWindow.ShowDialog($"无法访问告警图片路径 [{_dir}]");
                    }
                }
            }

            this.Title = $"[{1}/{alarmImageList.Count}] {Path.GetFileName(CurrentAlarmImage()?.ImagePath)}";
            SetSelectedSceneItem(CurrentAlarmImage()?.Scene);
            SetSelectedIncidentItem(CurrentAlarmImage()?.Incident);

            // 更细统计数据
            dataWindow.SetDetailData(GetDetailData());
        }