Ejemplo n.º 1
0
        private int SendData(ProtoBuffer.Models.AlgorithmInfo algorithmInfo, string nextIdentity)
        {
            int result = 1;

            try
            {
                assembly.SendAlgorithmSet(algorithmInfo, nextIdentity);
                bool flag = true;
                new TaskFactory().StartNew(() =>
                {
                    while (flag && ManagerHelp.AlgorithmResult == "")
                    {
                        Thread.Sleep(1000);
                    }
                }).Wait(timeout);
                flag = false;
                if (ManagerHelp.AlgorithmResult != "")
                {
                    result = Convert.ToInt32(ManagerHelp.AlgorithmResult);
                    ManagerHelp.AlgorithmResult = "";
                }
                else
                {
                    result = 400;//网络超时
                }
            }
            catch (Exception ex)
            {
            }
            return(result);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 处理protoBuf消息实体
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 private ProtoBuffer.Models.AlgorithmInfo GetProtoAlgorithm(AlgorithmViewModel model, string cid)
 {
     ProtoBuffer.Models.AlgorithmInfo info = new ProtoBuffer.Models.AlgorithmInfo()
     {
         cid           = cid,
         aid           = model.Id,
         gpu           = model.GPU,
         similar       = (float)model.Similar,
         dectectfirst  = (float)model.DectectFirst,
         dectectsecond = (float)model.DectectSecond,
         track         = (float)model.Track,
         type          = (ProtoBuffer.Models.AlgorithmInfo.Type)model.Type
     };
     return(info);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 保存算法
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public IActionResult Save(string model)
 {
     try
     {
         string shipId = base.user.ShipId;//为陆地端时保存的是XMQ的组件ID
         if (shipId == "")
         {
             return(new JsonResult(new { code = 1, msg = "船不存在,无法添加数据" }));
         }
         var viewModel = JsonConvert.DeserializeObject <AlgorithmViewModel>(model);
         if (viewModel != null)
         {
             int    code   = 1;
             string errMsg = "";
             string AIName = Enum.GetName(typeof(AlgorithmType), viewModel.Type);
             if (base.user.IsLandHome)
             {
                 //获取当前船舶的组件ID(webId)
                 string tokenstr = HttpContext.Session.GetString("comtoken");
                 string identity = ManagerHelp.GetLandToId(tokenstr);
                 if (string.IsNullOrEmpty(identity))
                 {
                     return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" }));
                 }
                 //获取当前组件下的某个算法
                 string algoComId = ManagerHelp.GetLandToId(tokenstr, ComponentType.AI, AIName);
                 if (string.IsNullOrEmpty(algoComId) && viewModel.Type != (int)AlgorithmType.CAPTURE)
                 {
                     string name = GetViewName((AlgorithmType)viewModel.Type);
                     return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" }));
                 }
                 var cam = cameras.FirstOrDefault(c => c.Id == viewModel.Cid);
                 //算法里的摄像机ID=设备ID:摄像机ID:摄像机通道
                 string cid = cam.DeviceId + ":" + cam.Id + ":" + cam.Index;
                 //向船舶端发送算法配置请求
                 ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid);
                 code = SendData(algorithm, (shipId + ":" + identity));
                 if (code == 400)
                 {
                     errMsg = "网络请求超时。。。";
                 }
                 else if (code != 0)
                 {
                     errMsg = "算法配置失败";
                 }
             }
             else
             {
                 Algorithm algo = new Algorithm();
                 if (!DataCheck(viewModel, ref algo, ref errMsg))
                 {
                     return(new JsonResult(new { code = 1, msg = errMsg }));
                 }
                 //获取船舶某个算法的组件ID
                 string identity = ManagerHelp.GetShipToId(ComponentType.AI, AIName);
                 if (string.IsNullOrEmpty(identity) && viewModel.Type != (int)AlgorithmType.CAPTURE)
                 {
                     string name = GetViewName((AlgorithmType)viewModel.Type);
                     return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" }));
                 }
                 algo.GPU           = viewModel.GPU;
                 algo.Type          = (AlgorithmType)viewModel.Type;
                 algo.Similar       = viewModel.Similar;
                 algo.Cid           = viewModel.Cid;
                 algo.DectectFirst  = viewModel.DectectFirst;
                 algo.DectectSecond = viewModel.DectectSecond;
                 algo.Track         = viewModel.Track;
                 if (!string.IsNullOrEmpty(viewModel.Id))
                 {
                     algo.Id = viewModel.Id;
                     _context.Algorithm.Update(algo);
                 }
                 else
                 {
                     algo.Id = Guid.NewGuid().ToString();
                     _context.Algorithm.Add(algo);
                 }
                 //缺岗直接进库不用发消息
                 if (viewModel.Type == (int)AlgorithmType.CAPTURE)
                 {
                     _context.SaveChanges();
                     code = 0;
                     ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                 }
                 else
                 {
                     viewModel.Id = algo.Id;
                     var camera = _context.Camera.FirstOrDefault(c => c.Id == viewModel.Cid);
                     if (camera != null)
                     {
                         string cid = camera.DeviceId + ":" + camera.Id + ":" + camera.Index;
                         ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid);
                         ManagerHelp.isFaceAlgorithm = false;
                         if (viewModel.Type == (int)AlgorithmType.ATTENDANCE_IN || viewModel.Type == (int)AlgorithmType.ATTENDANCE_OUT)
                         {
                             ManagerHelp.isFaceAlgorithm = true;
                         }
                         code = SendData(algorithm, identity);
                         if (code == 0)
                         {
                             _context.SaveChanges();
                         }
                         else if (code == 2)
                         {
                             errMsg = "网络请求超时。。。";
                         }
                         else
                         {
                             errMsg = "算法配置失败";
                         }
                     }
                 }
             }
             return(new JsonResult(new { code = code, msg = errMsg }));
         }
         return(new JsonResult(new { code = 1, msg = "操作界面数据失败!" }));
     }
     catch (Exception ex)
     {
         _logger.LogError("保存算法配置失败", model);
         return(new JsonResult(new { code = 1, msg = "数据保存失败!" + ex.Message }));
     }
 }