You need to sign in or sign up before continuing.
Commit f55bde89 by liulongfei

1. GPIO 封装

2. 居中模式移动添加配置,时间限制改为帧限制
3. 添加边线监测新字段 field_border
parent d5d0a336
File added
File added
......@@ -48,6 +48,7 @@ namespace VIZ.H2V.Connection
message.target_bbox = new RawRectangleF(package.target_bbox[0], package.target_bbox[1], package.target_bbox[2], package.target_bbox[3]);
}
message.borderline = package.borderline;
message.field_border = package.field_border;
message.correction_area = package.correction_area;
ApplicationDomainEx.MessageManager.Send(message);
......
......@@ -39,6 +39,12 @@ namespace VIZ.H2V.Connection
public AlgorithmInfo_borderline borderline { get; set; }
/// <summary>
/// 边线信息(新的边线检测结果)
/// 例如: [[100,200],[300,400]] 表示 两个点 (100,200) 、(300,400)
/// </summary>
public List<List<int>> field_border { get; set; }
/// <summary>
/// 时间码
/// </summary>
public long timecode { get; set; }
......
......@@ -29,6 +29,12 @@ namespace VIZ.H2V.Domain
public AlgorithmInfo_borderline borderline { get; set; }
/// <summary>
/// 边线信息(新的边线检测结果)
/// 例如: [[100,200],[300,400]] 表示 两个点 (100,200) 、(300,400)
/// </summary>
public List<List<int>> field_border { get; set; }
/// <summary>
/// 手动校准区域
/// </summary>
public List<int> correction_area { get; set; }
......
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.H2V.Module
{
/// <summary>
/// GPIO控制器
/// </summary>
public class GpioController
{
/// <summary>
/// 日志
/// </summary>
private readonly static ILog log = LogManager.GetLogger(typeof(GpioController));
/// <summary>
/// GPIO控制器
/// </summary>
/// <param name="support"></param>
public GpioController(IGpioSupport support)
{
this.Support = support;
}
/// <summary>
/// 支持
/// </summary>
public IGpioSupport Support { get; private set; }
/// <summary>
/// 初始化
/// </summary>
public void Init()
{
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VIZ.H2V.Module
{
/// <summary>
/// GPIO支持
/// </summary>
public interface IGpioSupport
{
}
}
......@@ -138,8 +138,8 @@ namespace VIZ.H2V.Module
if (manager == null)
return;
// 在2秒内移动裁切框至居中模式值
this.Support.MoveClipBoxToCenterMode(1);
// 移动裁切框至居中模式值
this.Support.MoveClipBoxToCenterMode();
// 更新裁切框样式
this.Support.UpdateClipBoxToAutoOrCenterStyle();
......
......@@ -84,14 +84,12 @@ namespace VIZ.H2V.Module
/// 移动裁切框至X
/// </summary>
/// <param name="targetX">目标X</param>
/// <param name="seconds">等待时间</param>
void MoveClipBoxTo(double targetX, double seconds);
void MoveClipBoxTo(double targetX);
/// <summary>
/// 移动裁切框至居中模式的值
/// </summary>
/// <param name="seconds">等待时间</param>
void MoveClipBoxToCenterMode(double seconds);
void MoveClipBoxToCenterMode();
/// <summary>
/// 重置3D鼠标
......
......@@ -33,8 +33,7 @@ namespace VIZ.H2V.Module
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
/// <param name="targetX">目标值</param>
/// <param name="seconds">等待时间</param>
void MoveTo(double min, double max, double targetX, double seconds);
void MoveTo(double min, double max, double targetX);
/// <summary>
/// 获取映射值
......
......@@ -9,6 +9,7 @@ using VIZ.Framework.Core;
using VIZ.H2V.Domain;
using log4net;
using VIZ.H2V.Storage;
using VIZ.Framework.Storage;
namespace VIZ.H2V.Module
{
......@@ -52,14 +53,24 @@ namespace VIZ.H2V.Module
public IManualSupport Support { get; private set; }
/// <summary>
/// 裁切框自动移动帧数
/// </summary>
private int ClipBoxAutoMovingFrame;
/// <summary>
/// 裁切框是否正在自动移动中
/// </summary>
private bool IsClipBoxAutoMoving;
/// <summary>
/// 裁切框每帧自动移动距离(单位 :像素
/// 剪切框自动移动速度(单位:像素/帧
/// </summary>
private int CLIP_BOX_AUTO_MOVING = 80;
private static readonly int VIDEO_CLIP_BOX_AUTO_MOVE_SPEED = ApplicationDomainEx.IniStorage.GetValue<VideoConfig, int>(p => p.VIDEO_CLIP_BOX_AUTO_MOVE_SPEED);
/// <summary>
/// 剪切框自动移动持续帧数(单位:帧数)
/// </summary>
private static readonly int VIDEO_CLIP_BOX_AUTO_MOVE_DURATION_FRAME = ApplicationDomainEx.IniStorage.GetValue<VideoConfig, int>(p => p.VIDEO_CLIP_BOX_AUTO_MOVE_DURATION_FRAME);
/// <summary>
/// 移动至
......@@ -67,22 +78,13 @@ namespace VIZ.H2V.Module
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
/// <param name="targetX">目标值</param>
/// <param name="seconds">等待时间</param>
public void MoveTo(double min, double max, double targetX, double seconds)
public void MoveTo(double min, double max, double targetX)
{
this.Support.IsCenterModeMoveToCenterEnabled = false;
this.Reset(this.Support.ClipBoxX);
this.ClipBoxCenterX = MathHelper.Clip(min, max, targetX);
this.ClipBoxAutoMovingFrame = 0;
this.IsClipBoxAutoMoving = true;
this.Support.IsCenterModeMoveToCenterEnabled = false;
ApplicationDomainEx.DelayManager.Wait("ManualController.MoveTo", seconds, () =>
{
// 重置手动裁切
this.Reset(this.Support.ClipBoxX);
// 设置裁切框不是自动移动状态
this.IsClipBoxAutoMoving = false;
this.Support.IsCenterModeMoveToCenterEnabled = true;
});
}
/// <summary>
......@@ -93,6 +95,21 @@ namespace VIZ.H2V.Module
/// <returns>计算值</returns>
public double GetCalculationValue(double min, double max)
{
if (this.IsClipBoxAutoMoving)
{
if (this.ClipBoxAutoMovingFrame == VIDEO_CLIP_BOX_AUTO_MOVE_DURATION_FRAME)
{
this.IsClipBoxAutoMoving = false;
this.ClipBoxAutoMovingFrame = 0;
// 重置手动裁切
this.Reset(this.Support.ClipBoxX);
this.Support.IsCenterModeMoveToCenterEnabled = true;
}
++this.ClipBoxAutoMovingFrame;
}
if (this.Support.StrategyMode == AlgorithmStrategyMode.center_mode)
{
// 居中模式自动移动过程
......@@ -179,12 +196,12 @@ namespace VIZ.H2V.Module
if (x < this.ClipBoxCenterX)
{
x += this.CLIP_BOX_AUTO_MOVING;
x += VIDEO_CLIP_BOX_AUTO_MOVE_SPEED;
x = x > this.ClipBoxCenterX ? this.ClipBoxCenterX : x;
}
else if (x > this.ClipBoxCenterX)
{
x -= this.CLIP_BOX_AUTO_MOVING;
x -= VIDEO_CLIP_BOX_AUTO_MOVE_SPEED;
x = x < this.ClipBoxCenterX ? this.ClipBoxCenterX : x;
}
......
......@@ -200,7 +200,7 @@
</RadioButton>-->
<!-- 近景机位 & 16米机位 & 战术机位 ===== 边线检测选择面板 -->
<Border Grid.Row="1" Background="{x:Null}"
<!--<Border Grid.Row="1" Background="{x:Null}"
Visibility="{Binding Path=AlgorithmConfig.IsShowBorder,Mode=OneWay,Converter={StaticResource Bool2VisibilityConverter}}">
<RadioButton Style="{StaticResource RadioButton_NdiView_None}"
Height="{Binding ElementName=uc,Path=DataContext.StrategyType,Converter={StaticResource AlgorithmStrategyType2FootballFieldHeightConverter}}"
......@@ -219,7 +219,7 @@
Orientation="{Binding ElementName=uc,Path=DataContext.StrategyType,Converter={StaticResource AlgorithmStrategyType2FootballFieldOrientationConverter}}">
</common:FootballFieldPanel>
</RadioButton>
</Border>
</Border>-->
<!-- 居中模式 按钮组-->
<Grid Grid.Row="1" Background="{x:Null}">
......
......@@ -128,7 +128,10 @@ namespace VIZ.H2V.Module
// 边线检测插件
SideCheckPolygonPlugin sideCheckPolygonPlugin = new SideCheckPolygonPlugin(view.video);
sideCheckPolygonPlugin.Click += SideCheckPolygonPlugin_Click;
// -----------------------------------------------------------------------------------------
// 新的边线检测算法不需要校准
//sideCheckPolygonPlugin.Click += SideCheckPolygonPlugin_Click;
// -----------------------------------------------------------------------------------------
view.video.AttachPlugin(sideCheckPolygonPlugin);
// 手动校准插件
......@@ -451,7 +454,7 @@ namespace VIZ.H2V.Module
/// </summary>
private void CenterModeMoveToCenter()
{
this.MoveClipBoxTo(555, 1);
this.MoveClipBoxTo(555);
}
#endregion
......
......@@ -155,8 +155,13 @@ namespace VIZ.H2V.Module
// 更新跟踪框
this.OnAlgorithmMessage__crop_roi__target_bbox(msg, renderInfo, view);
// --------------------------------------------------------------------------------------
// 更新边线检测框
this.OnAlgorithmMessage__crop_roi__borderline(msg, renderInfo, view);
//this.OnAlgorithmMessage__crop_roi__borderline(msg, renderInfo, view);
// --------------------------------------------------------------------------------------
// 更新边线检测框(新算法)
this.OnAlgorithmMessage__crop_roi__field_border(msg, renderInfo, view);
// 更新手动校准区域
this.OnAlgorithmMessage__crop_roi__correction_area(msg, renderInfo, view);
......@@ -286,6 +291,31 @@ namespace VIZ.H2V.Module
}
/// <summary>
/// 裁切信息更新 -- 更新边线检测框(新算法)
/// </summary>
/// <param name="msg">裁切消息</param>
/// <param name="renderInfo">渲染信息</param>
/// <param name="view">视图</param>
private void OnAlgorithmMessage__crop_roi__field_border(AlgorithmMessage__crop_roi msg, VideoRenderInfo renderInfo, NDIView view)
{
if (msg.field_border == null || !this.AlgorithmConfig.IsShowBorder)
{
view.video.ClearSideCheckPolygon();
return;
}
List<SideCheckPolygonInfo> infos = new List<SideCheckPolygonInfo>();
if (msg.field_border.Count > 2)
{
infos.Add(this.BuildSideCheckPolygonInfo(msg.field_border));
}
view.video.UpdateSideCheckPolygon(infos);
}
/// <summary>
/// 裁切信息更新 -- 更新手动校准区域
/// </summary>
/// <param name="msg">裁切消息</param>
......
......@@ -245,8 +245,7 @@ namespace VIZ.H2V.Module
/// 移动裁切框至X
/// </summary>
/// <param name="targetX">目标X</param>
/// <param name="seconds">等待时间</param>
public void MoveClipBoxTo(double targetX, double seconds)
public void MoveClipBoxTo(double targetX)
{
NDIView view = this.GetView<NDIView>();
if (view == null)
......@@ -262,16 +261,15 @@ namespace VIZ.H2V.Module
return;
}
this.ManualController.MoveTo(0, renderInfo.Frame.Width, targetX, seconds);
this.ManualController.MoveTo(0, renderInfo.Frame.Width, targetX);
}
/// <summary>
/// 移动裁切框至居中模式的值
/// </summary>
/// <param name="seconds">等待时间</param>
public void MoveClipBoxToCenterMode(double seconds)
public void MoveClipBoxToCenterMode()
{
this.MoveClipBoxTo(this.ClipBoxX_CenterMode, seconds);
this.MoveClipBoxTo(this.ClipBoxX_CenterMode);
}
/// <summary>
......
......@@ -203,6 +203,8 @@
</Page>
</ItemGroup>
<ItemGroup>
<Compile Include="NDIMainView\Controller\Gpio\GpioController.cs" />
<Compile Include="NDIMainView\Controller\Gpio\IGpioSupport.cs" />
<Compile Include="NDIMainView\ViewModel\AlgorithmServiceStatusPanelViewModel.cs" />
<Compile Include="NDIMainView\ViewModel\ClipServiceStatusPanelViewModel.cs" />
<Compile Include="NDIMainView\View\AlgorithmServiceStatusPanelView.xaml.cs">
......
......@@ -6,10 +6,6 @@
APPLICATION_IS_DEBUG=true
;3D鼠标平滑系数
APPLICATION_3D_MOUSE_SMOOTH_COEFFICIENT=0.015
;3D鼠标TCP监听IP
APPLICATION_3D_MOUSE_TCP_IP=127.0.0.1
;3D鼠标TCP监听端口
APPLICATION_3D_MOUSE_TCP_PORT=8201
; ============================================================
; === Video ===
; ============================================================
......@@ -46,6 +42,10 @@ VIDEO_CLIP_BOX_CENTER_AXIS_WIDTH=2
VIDEO_CLIP_BOX_CENTER_AXIS_COLOR=#AA000000
;剪切框中心轴颜色透明度
VIDEO_CLIP_BOX_CENTER_AXIS_OPACITY=0.4
;剪切框自动移动速度(单位:像素/帧)
VIDEO_CLIP_BOX_AUTO_MOVE_SPEED=100
;剪切框自动移动持续帧数(单位:帧数)
VIDEO_CLIP_BOX_AUTO_MOVE_DURATION_FRAME=50
;视频边线检测多边形区域透明度
VIDEO_SIDE_CHECK_POLYGON_OPACITY=0.15
;视频人工校准区域透明度
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment