Commit d24d5195 by liulongfei

1. 添加手动校准功能

parent cfe6e1e6
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</Style> </Style>
<ControlTemplate x:Key="FootballFieldPanel_Horizontal" TargetType="local:FootballFieldPanel"> <ControlTemplate x:Key="FootballFieldPanel_Horizontal" TargetType="local:FootballFieldPanel">
<Grid> <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="20"></RowDefinition> <RowDefinition Height="20"></RowDefinition>
<RowDefinition Height="{Binding Path=FootballFieldHeight,RelativeSource={RelativeSource AncestorLevel=1,Mode=FindAncestor,AncestorType=local:FootballFieldPanel}}"></RowDefinition> <RowDefinition Height="{Binding Path=FootballFieldHeight,RelativeSource={RelativeSource AncestorLevel=1,Mode=FindAncestor,AncestorType=local:FootballFieldPanel}}"></RowDefinition>
...@@ -88,9 +88,8 @@ ...@@ -88,9 +88,8 @@
</Grid> </Grid>
</ControlTemplate> </ControlTemplate>
<ControlTemplate x:Key="FootballFieldPanel_Vertical" TargetType="local:FootballFieldPanel"> <ControlTemplate x:Key="FootballFieldPanel_Vertical" TargetType="local:FootballFieldPanel">
<Grid> <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="20"></RowDefinition> <RowDefinition Height="20"></RowDefinition>
<RowDefinition Height="{Binding Path=FootballFieldWidth,RelativeSource={RelativeSource AncestorLevel=1,Mode=FindAncestor,AncestorType=local:FootballFieldPanel}}"></RowDefinition> <RowDefinition Height="{Binding Path=FootballFieldWidth,RelativeSource={RelativeSource AncestorLevel=1,Mode=FindAncestor,AncestorType=local:FootballFieldPanel}}"></RowDefinition>
......
...@@ -45,5 +45,15 @@ namespace VIZ.H2V.Connection ...@@ -45,5 +45,15 @@ namespace VIZ.H2V.Connection
/// 3. 战术机位 Tactics /// 3. 战术机位 Tactics
/// </remarks> /// </remarks>
public const string borderline_correction = "borderline_correction"; public const string borderline_correction = "borderline_correction";
/// <summary>
/// 手动校准
/// <see cref="VIZ.H2V.Storage.AlgorithmStrategyType"/>
/// </summary>
/// <remarks>
/// 除单人机位外的其他机位支持
/// 1. 单人机位 Single
/// </remarks>
public const string manual_correction = "manual_correction";
} }
} }
...@@ -48,6 +48,7 @@ namespace VIZ.H2V.Connection ...@@ -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.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.borderline = package.borderline;
message.correction_area = package.correction_area;
ApplicationDomainEx.MessageManager.Send(message); ApplicationDomainEx.MessageManager.Send(message);
} }
......
...@@ -23,8 +23,8 @@ namespace VIZ.H2V.Connection ...@@ -23,8 +23,8 @@ namespace VIZ.H2V.Connection
public bool enable_sendto_crop { get; set; } public bool enable_sendto_crop { get; set; }
/// <summary> /// <summary>
/// 边线检测点 /// 手动校准(x,y,r)
/// </summary> /// </summary>
public AlgorithmInfo_borderpoint borderpoint { get; set; } public List<int> correction_area { get; set; }
} }
} }
...@@ -29,6 +29,11 @@ namespace VIZ.H2V.Connection ...@@ -29,6 +29,11 @@ namespace VIZ.H2V.Connection
public List<int> target_bbox { get; set; } public List<int> target_bbox { get; set; }
/// <summary> /// <summary>
/// 手动校准区域(x,y,半径r)
/// </summary>
public List<int> correction_area { get; set; }
/// <summary>
/// 边线信息 /// 边线信息
/// </summary> /// </summary>
public AlgorithmInfo_borderline borderline { get; set; } public AlgorithmInfo_borderline borderline { get; set; }
......
...@@ -40,5 +40,10 @@ namespace VIZ.H2V.Connection ...@@ -40,5 +40,10 @@ namespace VIZ.H2V.Connection
/// 距离所占权重(0~1) /// 距离所占权重(0~1)
/// </summary> /// </summary>
public double weight_distance { get; set; } public double weight_distance { get; set; }
/// <summary>
/// 手动校准
/// </summary>
public List<int> correction_area { get; set; }
} }
} }
...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection ...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection
/// 对应 cmd = borderline_correction 时有值 /// 对应 cmd = borderline_correction 时有值
/// </remarks> /// </remarks>
public AlgorithmInfo_borderpoint borderpoint { get; set; } public AlgorithmInfo_borderpoint borderpoint { get; set; }
/// <summary>
/// 手动校准
/// </summary>
public List<int> correction_area { get; set; }
} }
} }
...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection ...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection
/// 对应 cmd = borderline_correction 时有值 /// 对应 cmd = borderline_correction 时有值
/// </remarks> /// </remarks>
public AlgorithmInfo_borderpoint borderpoint { get; set; } public AlgorithmInfo_borderpoint borderpoint { get; set; }
/// <summary>
/// 手动校准
/// </summary>
public List<int> correction_area { get; set; }
} }
} }
...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection ...@@ -49,5 +49,10 @@ namespace VIZ.H2V.Connection
/// 对应 cmd = borderline_correction 时有值 /// 对应 cmd = borderline_correction 时有值
/// </remarks> /// </remarks>
public AlgorithmInfo_borderpoint borderpoint { get; set; } public AlgorithmInfo_borderpoint borderpoint { get; set; }
/// <summary>
/// 手动校准
/// </summary>
public List<int> correction_area { get; set; }
} }
} }
...@@ -29,6 +29,11 @@ namespace VIZ.H2V.Domain ...@@ -29,6 +29,11 @@ namespace VIZ.H2V.Domain
public AlgorithmInfo_borderline borderline { get; set; } public AlgorithmInfo_borderline borderline { get; set; }
/// <summary> /// <summary>
/// 手动校准区域
/// </summary>
public List<int> correction_area { get; set; }
/// <summary>
/// 时间码 /// 时间码
/// </summary> /// </summary>
public long timecode { get; set; } public long timecode { get; set; }
......
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;
using VIZ.H2V.Storage;
namespace VIZ.H2V.Module.Resource
{
/// <summary>
/// 算法类型 -> 足球场 高度 转化器
/// </summary>
public class AlgorithmStrategyType2FootballFieldHeightConverter : IValueConverter
{
/// <summary>
/// 不包含时的高度
/// </summary>
public double NotContainsHeight { get; set; } = 140;
/// <summary>
/// 包含时的高度
/// </summary>
public double ContainsHeight { get; set; } = 190;
#region StrategyTypeListString -- 算法列表字符串
private string strategyTypeListString;
/// <summary>
/// 算法列表字符串
/// </summary>
public string StrategyTypeListString
{
get { return strategyTypeListString; }
set
{
strategyTypeListString = value;
string[] items = value.Split(',');
List<AlgorithmStrategyType> list = new List<AlgorithmStrategyType>();
foreach (string item in items)
{
list.Add((AlgorithmStrategyType)Enum.Parse(typeof(AlgorithmStrategyType), item.Trim()));
}
this.strategyTypeList = list;
}
}
/// <summary>
/// 算法列表
/// </summary>
private List<AlgorithmStrategyType> strategyTypeList;
#endregion
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is AlgorithmStrategyType))
return this.NotContainsHeight;
AlgorithmStrategyType type = (AlgorithmStrategyType)value;
return this.strategyTypeList.Contains(type) ? this.ContainsHeight : this.NotContainsHeight;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
...@@ -122,10 +122,12 @@ namespace VIZ.H2V.Module.Resource ...@@ -122,10 +122,12 @@ namespace VIZ.H2V.Module.Resource
AlgorithmStrategyMode mode = (AlgorithmStrategyMode)values[1]; AlgorithmStrategyMode mode = (AlgorithmStrategyMode)values[1];
AlgorithmStrategyType type = (AlgorithmStrategyType)values[2]; AlgorithmStrategyType type = (AlgorithmStrategyType)values[2];
return this.viewStatusList.Contains(status) && Visibility result = this.viewStatusList.Contains(status) &&
this.strategyModeList.Contains(mode) && this.strategyModeList.Contains(mode) &&
this.strategyTypeList.Contains(type) this.strategyTypeList.Contains(type)
? Visibility.Visible : Visibility.Collapsed; ? Visibility.Visible : Visibility.Collapsed;
return result;
} }
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
......
...@@ -69,4 +69,40 @@ ...@@ -69,4 +69,40 @@
</Style.Triggers> </Style.Triggers>
</Style> </Style>
<Style TargetType="RadioButton" x:Key="RadioButton_NdiView_Tool">
<Setter Property="FocusVisualStyle" Value="{x:Null}"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid x:Name="bd_outer" Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Rectangle x:Name="rect" Fill="#22ffffff" Grid.Column="0"></Rectangle>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Grid.Column="1"></ContentPresenter>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="rect" Property="Fill" Value="#fff79b00"></Setter>
<Setter TargetName="bd_outer" Property="Background" Value="#11ffffff"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd_outer" Property="Background" Value="#22ffffff"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.7"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary> </ResourceDictionary>
\ No newline at end of file
...@@ -120,6 +120,7 @@ ...@@ -120,6 +120,7 @@
</Page> </Page>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Converter\AlgorithmStrategyType2FootballFieldHeightConverter.cs" />
<Compile Include="Converter\AlgorithmStrategyType2FootballFieldOrientationConverter.cs" /> <Compile Include="Converter\AlgorithmStrategyType2FootballFieldOrientationConverter.cs" />
<Compile Include="Converter\NDIViewProperty2VisibilityConverter.cs" /> <Compile Include="Converter\NDIViewProperty2VisibilityConverter.cs" />
<Compile Include="Converter\NDIViewProperty2BoolConverter.cs" /> <Compile Include="Converter\NDIViewProperty2BoolConverter.cs" />
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 无球时自动跟人 --> <!-- 无球时自动跟人 -->
...@@ -171,7 +172,17 @@ ...@@ -171,7 +172,17 @@
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>
</Grid> </Grid>
<!-- 手动校准半径 -->
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="380"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="手动校准半径(像素)" Foreground="White" FontSize="18" VerticalAlignment="Center"></TextBlock>
<fcommon:NumberBox Grid.Column="1" MinValue="200" MaxValue="400" Interval="1" Height="40"
Value="{Binding Path=ManualCorrectionRadius,Mode=TwoWay}"></fcommon:NumberBox>
</Grid>
</Grid> </Grid>
</Border> </Border>
</UserControl> </UserControl>
\ No newline at end of file
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 无球时自动跟人 --> <!-- 无球时自动跟人 -->
...@@ -172,6 +173,16 @@ ...@@ -172,6 +173,16 @@
</ComboBox> </ComboBox>
</Grid> </Grid>
<!-- 手动校准半径 -->
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="380"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="手动校准半径(像素)" Foreground="White" FontSize="18" VerticalAlignment="Center"></TextBlock>
<fcommon:NumberBox Grid.Column="1" MinValue="200" MaxValue="400" Interval="1" Height="40"
Value="{Binding Path=ManualCorrectionRadius,Mode=TwoWay}"></fcommon:NumberBox>
</Grid>
</Grid> </Grid>
</Border> </Border>
</UserControl> </UserControl>
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 无球时自动跟人 --> <!-- 无球时自动跟人 -->
...@@ -172,6 +173,16 @@ ...@@ -172,6 +173,16 @@
</ComboBox> </ComboBox>
</Grid> </Grid>
<!-- 手动校准半径 -->
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="380"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="手动校准半径(像素)" Foreground="White" FontSize="18" VerticalAlignment="Center"></TextBlock>
<fcommon:NumberBox Grid.Column="1" MinValue="200" MaxValue="400" Interval="1" Height="40"
Value="{Binding Path=ManualCorrectionRadius,Mode=TwoWay}"></fcommon:NumberBox>
</Grid>
</Grid> </Grid>
</Border> </Border>
</UserControl> </UserControl>
\ No newline at end of file
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 无球时自动跟人 --> <!-- 无球时自动跟人 -->
...@@ -172,6 +173,16 @@ ...@@ -172,6 +173,16 @@
</ComboBox> </ComboBox>
</Grid> </Grid>
<!-- 手动校准半径 -->
<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="380"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="手动校准半径(像素)" Foreground="White" FontSize="18" VerticalAlignment="Center"></TextBlock>
<fcommon:NumberBox Grid.Column="1" MinValue="200" MaxValue="400" Interval="1" Height="40"
Value="{Binding Path=ManualCorrectionRadius,Mode=TwoWay}"></fcommon:NumberBox>
</Grid>
</Grid> </Grid>
</Border> </Border>
</UserControl> </UserControl>
\ No newline at end of file
...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module ...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ManualCorrectionRadius -- 手动校准半径
private double manualCorrectionRadius;
/// <summary>
/// 手动校准半径
/// </summary>
public double ManualCorrectionRadius
{
get { return manualCorrectionRadius; }
set { manualCorrectionRadius = value; this.RaisePropertyChanged(nameof(ManualCorrectionRadius)); }
}
#endregion
// ====================================================================================== // ======================================================================================
// === Command === // === Command ===
// ====================================================================================== // ======================================================================================
...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module ...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module
this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson; this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson;
this.SmoothCoeff = config.SmoothCoeff; this.SmoothCoeff = config.SmoothCoeff;
this.KeepPrevFrame = config.KeepPrevFrame; this.KeepPrevFrame = config.KeepPrevFrame;
this.ManualCorrectionRadius = config.ManualCorrectionRadius;
// 场景信息 // 场景信息
this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault(); this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault();
...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module ...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module
if (this.SelectedBorderScence.Key != this.Config.BorderScene) if (this.SelectedBorderScence.Key != this.Config.BorderScene)
return true; return true;
if (this.ManualCorrectionRadius != this.Config.ManualCorrectionRadius)
return true;
return false; return false;
} }
...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module ...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module
this.Config.SmoothCoeff = this.SmoothCoeff; this.Config.SmoothCoeff = this.SmoothCoeff;
this.Config.KeepPrevFrame = this.KeepPrevFrame; this.Config.KeepPrevFrame = this.KeepPrevFrame;
this.Config.BorderScene = this.SelectedBorderScence.Key; this.Config.BorderScene = this.SelectedBorderScence.Key;
this.Config.ManualCorrectionRadius = this.ManualCorrectionRadius;
this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0; this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0;
ApplicationDomainEx.LiteDbContext.AlgorithmCableway.Upsert(this.Config); ApplicationDomainEx.LiteDbContext.AlgorithmCableway.Upsert(this.Config);
......
...@@ -114,6 +114,20 @@ namespace VIZ.H2V.Module ...@@ -114,6 +114,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ManualCorrectionRadius -- 手动校准半径
private double manualCorrectionRadius;
/// <summary>
/// 手动校准半径
/// </summary>
public double ManualCorrectionRadius
{
get { return manualCorrectionRadius; }
set { manualCorrectionRadius = value; this.RaisePropertyChanged(nameof(ManualCorrectionRadius)); }
}
#endregion
// ====================================================================================== // ======================================================================================
// === Command === // === Command ===
// ====================================================================================== // ======================================================================================
...@@ -141,6 +155,7 @@ namespace VIZ.H2V.Module ...@@ -141,6 +155,7 @@ namespace VIZ.H2V.Module
this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson; this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson;
this.SmoothCoeff = config.SmoothCoeff; this.SmoothCoeff = config.SmoothCoeff;
this.KeepPrevFrame = config.KeepPrevFrame; this.KeepPrevFrame = config.KeepPrevFrame;
this.ManualCorrectionRadius = config.ManualCorrectionRadius;
// 场景信息 // 场景信息
this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault(); this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault();
...@@ -185,6 +200,9 @@ namespace VIZ.H2V.Module ...@@ -185,6 +200,9 @@ namespace VIZ.H2V.Module
if (this.SelectedBorderScence.Key != this.Config.BorderScene) if (this.SelectedBorderScence.Key != this.Config.BorderScene)
return true; return true;
if (this.ManualCorrectionRadius != this.Config.ManualCorrectionRadius)
return true;
return false; return false;
} }
...@@ -222,6 +240,7 @@ namespace VIZ.H2V.Module ...@@ -222,6 +240,7 @@ namespace VIZ.H2V.Module
this.Config.SmoothCoeff = this.SmoothCoeff; this.Config.SmoothCoeff = this.SmoothCoeff;
this.Config.KeepPrevFrame = this.KeepPrevFrame; this.Config.KeepPrevFrame = this.KeepPrevFrame;
this.Config.BorderScene = this.SelectedBorderScence.Key; this.Config.BorderScene = this.SelectedBorderScence.Key;
this.Config.ManualCorrectionRadius = this.ManualCorrectionRadius;
ApplicationDomainEx.LiteDbContext.AlgorithmNear.Upsert(this.Config); ApplicationDomainEx.LiteDbContext.AlgorithmNear.Upsert(this.Config);
......
...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module ...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ManualCorrectionRadius -- 手动校准半径
private double manualCorrectionRadius;
/// <summary>
/// 手动校准半径
/// </summary>
public double ManualCorrectionRadius
{
get { return manualCorrectionRadius; }
set { manualCorrectionRadius = value; this.RaisePropertyChanged(nameof(ManualCorrectionRadius)); }
}
#endregion
// ====================================================================================== // ======================================================================================
// === Command === // === Command ===
// ====================================================================================== // ======================================================================================
...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module ...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module
this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson; this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson;
this.SmoothCoeff = config.SmoothCoeff; this.SmoothCoeff = config.SmoothCoeff;
this.KeepPrevFrame = config.KeepPrevFrame; this.KeepPrevFrame = config.KeepPrevFrame;
this.ManualCorrectionRadius = config.ManualCorrectionRadius;
// 场景信息 // 场景信息
this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault(); this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault();
...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module ...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module
if (this.SelectedBorderScence.Key != this.Config.BorderScene) if (this.SelectedBorderScence.Key != this.Config.BorderScene)
return true; return true;
if (this.ManualCorrectionRadius != this.Config.ManualCorrectionRadius)
return true;
return false; return false;
} }
...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module ...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module
this.Config.SmoothCoeff = this.SmoothCoeff; this.Config.SmoothCoeff = this.SmoothCoeff;
this.Config.KeepPrevFrame = this.KeepPrevFrame; this.Config.KeepPrevFrame = this.KeepPrevFrame;
this.Config.BorderScene = this.SelectedBorderScence.Key; this.Config.BorderScene = this.SelectedBorderScence.Key;
this.Config.ManualCorrectionRadius = this.ManualCorrectionRadius;
this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0; this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0;
ApplicationDomainEx.LiteDbContext.AlgorithmSixteen.Upsert(this.Config); ApplicationDomainEx.LiteDbContext.AlgorithmSixteen.Upsert(this.Config);
......
...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module ...@@ -112,6 +112,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ManualCorrectionRadius -- 手动校准半径
private double manualCorrectionRadius;
/// <summary>
/// 手动校准半径
/// </summary>
public double ManualCorrectionRadius
{
get { return manualCorrectionRadius; }
set { manualCorrectionRadius = value; this.RaisePropertyChanged(nameof(ManualCorrectionRadius)); }
}
#endregion
// ====================================================================================== // ======================================================================================
// === Command === // === Command ===
// ====================================================================================== // ======================================================================================
...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module ...@@ -139,6 +153,7 @@ namespace VIZ.H2V.Module
this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson; this.NoBallAutoChangeToPerson = config.NoBallAutoChangeToPerson;
this.SmoothCoeff = config.SmoothCoeff; this.SmoothCoeff = config.SmoothCoeff;
this.KeepPrevFrame = config.KeepPrevFrame; this.KeepPrevFrame = config.KeepPrevFrame;
this.ManualCorrectionRadius = config.ManualCorrectionRadius;
// 场景信息 // 场景信息
this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault(); this.SelectedBorderScence = this.BorderScences?.FirstOrDefault(p => p.Key == this.Config.BorderScene) ?? this.BorderScences?.FirstOrDefault();
...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module ...@@ -183,6 +198,9 @@ namespace VIZ.H2V.Module
if (this.SelectedBorderScence.Key != this.Config.BorderScene) if (this.SelectedBorderScence.Key != this.Config.BorderScene)
return true; return true;
if (this.ManualCorrectionRadius != this.Config.ManualCorrectionRadius)
return true;
return false; return false;
} }
...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module ...@@ -220,6 +238,7 @@ namespace VIZ.H2V.Module
this.Config.SmoothCoeff = this.SmoothCoeff; this.Config.SmoothCoeff = this.SmoothCoeff;
this.Config.KeepPrevFrame = this.KeepPrevFrame; this.Config.KeepPrevFrame = this.KeepPrevFrame;
this.Config.BorderScene = this.SelectedBorderScence.Key; this.Config.BorderScene = this.SelectedBorderScence.Key;
this.Config.ManualCorrectionRadius = this.ManualCorrectionRadius;
this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0; this.ViewConfig.GPU = this.SelectedGpuInfo?.Physics ?? 0;
ApplicationDomainEx.LiteDbContext.AlgorithmTactics.Upsert(this.Config); ApplicationDomainEx.LiteDbContext.AlgorithmTactics.Upsert(this.Config);
......
...@@ -205,6 +205,12 @@ namespace VIZ.H2V.Module ...@@ -205,6 +205,12 @@ namespace VIZ.H2V.Module
public abstract void BorderPoint(AlgorithmInfo_borderpoint boarderpoint); public abstract void BorderPoint(AlgorithmInfo_borderpoint boarderpoint);
/// <summary> /// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public abstract void ManualCorrection(ManualCorrectionInfo info);
/// <summary>
/// 获取配置信息 /// 获取配置信息
/// </summary> /// </summary>
/// <returns>配置信息</returns> /// <returns>配置信息</returns>
......
...@@ -65,6 +65,12 @@ namespace VIZ.H2V.Module ...@@ -65,6 +65,12 @@ namespace VIZ.H2V.Module
void BorderPoint(AlgorithmInfo_borderpoint borderpoint); void BorderPoint(AlgorithmInfo_borderpoint borderpoint);
/// <summary> /// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
void ManualCorrection(ManualCorrectionInfo info);
/// <summary>
/// 初始化算法 /// 初始化算法
/// </summary> /// </summary>
/// <remarks> /// <remarks>
......
...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module ...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmPackage__auto_mode_Cableway package = this.BuildPackage(null); AlgorithmPackage__auto_mode_Cableway package = this.BuildPackage(null, null);
package.signal = AlgorithmPackageSignal.no_mode; package.signal = AlgorithmPackageSignal.no_mode;
AlgorithmSender.AutoMode(manager, package, option); AlgorithmSender.AutoMode(manager, package, option);
} }
...@@ -67,7 +67,7 @@ namespace VIZ.H2V.Module ...@@ -67,7 +67,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option);
} }
/// <summary> /// <summary>
...@@ -98,7 +98,7 @@ namespace VIZ.H2V.Module ...@@ -98,7 +98,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option);
} }
/// <summary> /// <summary>
...@@ -111,6 +111,26 @@ namespace VIZ.H2V.Module ...@@ -111,6 +111,26 @@ namespace VIZ.H2V.Module
} }
/// <summary> /// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public override void ManualCorrection(ManualCorrectionInfo info)
{
if (info == null)
return;
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(this.Support.ViewKey);
AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
List<int> correction_area = new List<int>() { (int)info.SrcCenter.X, (int)info.SrcCenter.Y, (int)info.SrcRadius };
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.manual_correction, correction_area), option);
}
/// <summary>
/// 获取配置信息 /// 获取配置信息
/// </summary> /// </summary>
/// <returns>配置信息</returns> /// <returns>配置信息</returns>
...@@ -136,8 +156,9 @@ namespace VIZ.H2V.Module ...@@ -136,8 +156,9 @@ namespace VIZ.H2V.Module
/// 构建数据包 /// 构建数据包
/// </summary> /// </summary>
/// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param> /// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param>
/// <param name="correction_area">人工校准区域</param>
/// <returns>数据包</returns> /// <returns>数据包</returns>
public AlgorithmPackage__auto_mode_Cableway BuildPackage(string cmd) public AlgorithmPackage__auto_mode_Cableway BuildPackage(string cmd, List<int> correction_area)
{ {
AlgorithmCableway config = ApplicationDomainEx.LiteDbContext.AlgorithmCableway.FindOne(p => p.ViewKey == this.Support.ViewKey); AlgorithmCableway config = ApplicationDomainEx.LiteDbContext.AlgorithmCableway.FindOne(p => p.ViewKey == this.Support.ViewKey);
if (config == null) if (config == null)
...@@ -155,6 +176,7 @@ namespace VIZ.H2V.Module ...@@ -155,6 +176,7 @@ namespace VIZ.H2V.Module
package.auto_follow_human = config.NoBallAutoChangeToPerson ? 1 : 0; package.auto_follow_human = config.NoBallAutoChangeToPerson ? 1 : 0;
package.border_scene = config.BorderScene; package.border_scene = config.BorderScene;
package.border_on = config.IsBorderEnabled ? 1 : 0; package.border_on = config.IsBorderEnabled ? 1 : 0;
package.correction_area = correction_area;
return package; return package;
} }
......
...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module ...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmPackage__auto_mode_Near package = this.BuildPackage(null, null); AlgorithmPackage__auto_mode_Near package = this.BuildPackage(null, null, null);
package.signal = AlgorithmPackageSignal.no_mode; package.signal = AlgorithmPackageSignal.no_mode;
AlgorithmSender.AutoMode(manager, package, option); AlgorithmSender.AutoMode(manager, package, option);
...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module ...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module ...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module ...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module
AlgorithmSenderOption option = new AlgorithmSenderOption(); AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
option.borderpoint = new AlgorithmInfo_borderpoint();
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint, null), option);
}
/// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public override void ManualCorrection(ManualCorrectionInfo info)
{
if (info == null)
return;
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(this.Support.ViewKey);
AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
List<int> correction_area = new List<int>() { (int)info.SrcCenter.X, (int)info.SrcCenter.Y, (int)info.SrcRadius };
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.manual_correction, null, correction_area), option);
} }
/// <summary> /// <summary>
...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module ...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module
/// </summary> /// </summary>
/// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param> /// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param>
/// <param name="boarderpoint">边框检测点</param> /// <param name="boarderpoint">边框检测点</param>
/// <param name="correction_area">手动裁切区域</param>
/// <returns>数据包</returns> /// <returns>数据包</returns>
private AlgorithmPackage__auto_mode_Near BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint) private AlgorithmPackage__auto_mode_Near BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint, List<int> correction_area)
{ {
AlgorithmNear config = ApplicationDomainEx.LiteDbContext.AlgorithmNear.FindOne(p => p.ViewKey == this.Support.ViewKey); AlgorithmNear config = ApplicationDomainEx.LiteDbContext.AlgorithmNear.FindOne(p => p.ViewKey == this.Support.ViewKey);
if (config == null) if (config == null)
...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module ...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module
package.borderpoint = boarderpoint; package.borderpoint = boarderpoint;
package.border_scene = config.BorderScene; package.border_scene = config.BorderScene;
package.border_on = config.IsBorderEnabled ? 1 : 0; package.border_on = config.IsBorderEnabled ? 1 : 0;
package.correction_area = correction_area;
return package; return package;
} }
......
...@@ -130,6 +130,15 @@ namespace VIZ.H2V.Module ...@@ -130,6 +130,15 @@ namespace VIZ.H2V.Module
} }
/// <summary> /// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public override void ManualCorrection(ManualCorrectionInfo info)
{
}
/// <summary>
/// 获取配置信息 /// 获取配置信息
/// </summary> /// </summary>
/// <returns>配置信息</returns> /// <returns>配置信息</returns>
......
...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module ...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmPackage__auto_mode_Sixteen package = this.BuildPackage(null, null); AlgorithmPackage__auto_mode_Sixteen package = this.BuildPackage(null, null, null);
package.signal = AlgorithmPackageSignal.no_mode; package.signal = AlgorithmPackageSignal.no_mode;
AlgorithmSender.AutoMode(manager, package, option); AlgorithmSender.AutoMode(manager, package, option);
...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module ...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module ...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module ...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module
AlgorithmSenderOption option = new AlgorithmSenderOption(); AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
option.borderpoint = new AlgorithmInfo_borderpoint();
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint, null), option);
}
/// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public override void ManualCorrection(ManualCorrectionInfo info)
{
if (info == null)
return;
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(this.Support.ViewKey);
AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
List<int> correction_area = new List<int>() { (int)info.SrcCenter.X, (int)info.SrcCenter.Y, (int)info.SrcRadius };
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.manual_correction, null, correction_area), option);
} }
/// <summary> /// <summary>
...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module ...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module
/// </summary> /// </summary>
/// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param> /// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param>
/// <param name="boarderpoint">边框检测点</param> /// <param name="boarderpoint">边框检测点</param>
/// <param name="correction_area">手动校准区域</param>
/// <returns>数据包</returns> /// <returns>数据包</returns>
public AlgorithmPackage__auto_mode_Sixteen BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint) public AlgorithmPackage__auto_mode_Sixteen BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint, List<int> correction_area)
{ {
AlgorithmSixteen config = ApplicationDomainEx.LiteDbContext.AlgorithmSixteen.FindOne(p => p.ViewKey == this.Support.ViewKey); AlgorithmSixteen config = ApplicationDomainEx.LiteDbContext.AlgorithmSixteen.FindOne(p => p.ViewKey == this.Support.ViewKey);
if (config == null) if (config == null)
...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module ...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module
package.borderpoint = boarderpoint; package.borderpoint = boarderpoint;
package.border_scene = config.BorderScene; package.border_scene = config.BorderScene;
package.border_on = config.IsBorderEnabled ? 1 : 0; package.border_on = config.IsBorderEnabled ? 1 : 0;
package.correction_area = correction_area;
return package; return package;
} }
......
...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module ...@@ -37,7 +37,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmPackage__auto_mode_Tactics package = this.BuildPackage(null, null); AlgorithmPackage__auto_mode_Tactics package = this.BuildPackage(null, null, null);
package.signal = AlgorithmPackageSignal.no_mode; package.signal = AlgorithmPackageSignal.no_mode;
AlgorithmSender.AutoMode(manager, package, option); AlgorithmSender.AutoMode(manager, package, option);
...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module ...@@ -68,7 +68,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module ...@@ -99,7 +99,7 @@ namespace VIZ.H2V.Module
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.set_params, null, null), option);
} }
/// <summary> /// <summary>
...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module ...@@ -116,9 +116,28 @@ namespace VIZ.H2V.Module
AlgorithmSenderOption option = new AlgorithmSenderOption(); AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID; option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop; option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
option.borderpoint = new AlgorithmInfo_borderpoint();
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint), option); AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.borderline_correction, borderpoint, null), option);
}
/// <summary>
/// 手动校准
/// </summary>
/// <param name="info">手动校准信息</param>
public override void ManualCorrection(ManualCorrectionInfo info)
{
if (info == null)
return;
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(this.Support.ViewKey);
AlgorithmSenderOption option = new AlgorithmSenderOption();
option.id = this.Support.ID;
option.enable_sendto_crop = this.Support.ViewConfig.IsSendToCrop;
List<int> correction_area = new List<int>() { (int)info.SrcCenter.X, (int)info.SrcCenter.Y, (int)info.SrcRadius };
AlgorithmSender.AutoMode(manager, this.BuildPackage(AlgorithmAutoModeCmd.manual_correction, null, correction_area), option);
} }
/// <summary> /// <summary>
...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module ...@@ -148,8 +167,9 @@ namespace VIZ.H2V.Module
/// </summary> /// </summary>
/// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param> /// <param name="cmd">命令<see cref="AlgorithmAutoModeCmd"/></param>
/// <param name="boarderpoint">边框检测点</param> /// <param name="boarderpoint">边框检测点</param>
/// <param name="correction_area">手动校准区域</param>
/// <returns>数据包</returns> /// <returns>数据包</returns>
public AlgorithmPackage__auto_mode_Tactics BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint) public AlgorithmPackage__auto_mode_Tactics BuildPackage(string cmd, AlgorithmInfo_borderpoint boarderpoint, List<int> correction_area)
{ {
AlgorithmTactics config = ApplicationDomainEx.LiteDbContext.AlgorithmTactics.FindOne(p => p.ViewKey == this.Support.ViewKey); AlgorithmTactics config = ApplicationDomainEx.LiteDbContext.AlgorithmTactics.FindOne(p => p.ViewKey == this.Support.ViewKey);
if (config == null) if (config == null)
...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module ...@@ -168,6 +188,7 @@ namespace VIZ.H2V.Module
package.borderpoint = boarderpoint; package.borderpoint = boarderpoint;
package.border_scene = config.BorderScene; package.border_scene = config.BorderScene;
package.border_on = config.IsBorderEnabled ? 1 : 0; package.border_on = config.IsBorderEnabled ? 1 : 0;
package.correction_area = correction_area;
return package; return package;
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<ResourceDictionary Source="/VIZ.H2V.Module.Resource;component/Style/RadioButton/RadioButton_NdiView.xaml"></ResourceDictionary> <ResourceDictionary Source="/VIZ.H2V.Module.Resource;component/Style/RadioButton/RadioButton_NdiView.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<fcore:Bool2BoolConverter x:Key="Bool2BoolConverter"></fcore:Bool2BoolConverter> <fcore:Bool2BoolConverter x:Key="Bool2BoolConverter"></fcore:Bool2BoolConverter>
<fcore:StringAppendConverter x:Key="StringAppendConverter"></fcore:StringAppendConverter>
<resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter" TrueListString="Detect,CropRoi"></resource:NDIViewStatus2BoolConverter> <resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter" TrueListString="Detect,CropRoi"></resource:NDIViewStatus2BoolConverter>
<resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter_SettingButton" TrueListString="Stop,Detect,CropRoi"></resource:NDIViewStatus2BoolConverter> <resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter_SettingButton" TrueListString="Stop,Detect,CropRoi"></resource:NDIViewStatus2BoolConverter>
<resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter_StopButton" TrueListString="WaitSetup,WaitCheckOK,Detect,CropRoi"></resource:NDIViewStatus2BoolConverter> <resource:NDIViewStatus2BoolConverter x:Key="NDIViewStatus2IsEnabledConverter_StopButton" TrueListString="WaitSetup,WaitCheckOK,Detect,CropRoi"></resource:NDIViewStatus2BoolConverter>
...@@ -47,6 +48,16 @@ ...@@ -47,6 +48,16 @@
<resource:AlgorithmStrategyType2FootballFieldOrientationConverter x:Key="AlgorithmStrategyType2FootballFieldOrientationConverter" <resource:AlgorithmStrategyType2FootballFieldOrientationConverter x:Key="AlgorithmStrategyType2FootballFieldOrientationConverter"
StrategyTypeListString="Near,Tactics"></resource:AlgorithmStrategyType2FootballFieldOrientationConverter> StrategyTypeListString="Near,Tactics"></resource:AlgorithmStrategyType2FootballFieldOrientationConverter>
<resource:AlgorithmStrategyType2FootballFieldHeightConverter x:Key="AlgorithmStrategyType2FootballFieldHeightConverter"
StrategyTypeListString="Near,Tactics" NotContainsHeight="140" ContainsHeight="190">
</resource:AlgorithmStrategyType2FootballFieldHeightConverter>
<!-- 手动校准面板 -->
<resource:NDIViewProperty2VisibilityConverter x:Key="NDIViewProperty2VisibilityConverter_ManualCorrection"
ViewStatusListString="CropRoi"
StrategyModeListString="auto_mode"
StrategyTypeListString="Near,Sixteen,Tactics,Cableway">
</resource:NDIViewProperty2VisibilityConverter>
</ResourceDictionary> </ResourceDictionary>
</UserControl.Resources> </UserControl.Resources>
...@@ -105,8 +116,8 @@ ...@@ -105,8 +116,8 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<CheckBox FontSize="16" Content="裁切策略:" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" <CheckBox FontSize="16" Content="裁切策略:" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"
IsChecked="{Binding Path=IsUseClip,Mode=TwoWay}" IsChecked="{Binding Path=IsUseClip,Mode=TwoWay}"
Style="{StaticResource CheckBox_NdiView}"></CheckBox> Style="{StaticResource CheckBox_NdiView}"></CheckBox>
<Rectangle Grid.Row="1" Grid.RowSpan="10" Fill="#ff181d2b"></Rectangle> <Rectangle Grid.Row="1" Grid.RowSpan="10" Fill="#ff181d2b"></Rectangle>
<Grid Grid.Row="1" IsEnabled="{Binding IsUseClip,Mode=OneWay}"> <Grid Grid.Row="1" IsEnabled="{Binding IsUseClip,Mode=OneWay}">
<Grid.RowDefinitions> <Grid.RowDefinitions>
...@@ -157,21 +168,49 @@ ...@@ -157,21 +168,49 @@
</MultiBinding> </MultiBinding>
</Button.Visibility> </Button.Visibility>
</Button> </Button>
<!-- 近景机位 & 16米机位 & 战术机位 ===== 边线检测选择面板 -->
<Border HorizontalAlignment="Center" VerticalAlignment="Bottom" <Grid HorizontalAlignment="Stretch" VerticalAlignment="Bottom">
Visibility="{Binding Path=AlgorithmConfig.IsShowBorder,Mode=OneWay,Converter={StaticResource Bool2VisibilityConverter}}"> <Grid.RowDefinitions>
<common:FootballFieldPanel FootballFieldWidth="150" FootballFieldHeight="100" <RowDefinition Height="50"></RowDefinition>
DataContext="{Binding Path=FootballFieldPanelModel}" <RowDefinition Height="auto"></RowDefinition>
Orientation="{Binding ElementName=uc,Path=DataContext.StrategyType,Converter={StaticResource AlgorithmStrategyType2FootballFieldOrientationConverter}}"> </Grid.RowDefinitions>
<common:FootballFieldPanel.Visibility>
<MultiBinding Converter="{StaticResource NDIViewProperty2VisibilityConverter_FootballFieldPanel}"> <RadioButton Content="手动校准" Foreground="White" FontSize="20"
Style="{StaticResource RadioButton_NdiView_Tool}"
IsChecked="{Binding Path=ToolPartViewModel.IsManualCorrectionChecked,Mode=TwoWay}"
GroupName="{Binding Path=ViewKey,Converter={StaticResource StringAppendConverter}, ConverterParameter=Tool}"
HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource NDIViewProperty2VisibilityConverter_ManualCorrection}">
<Binding Path="DataContext.ViewStatus" ElementName="uc"></Binding> <Binding Path="DataContext.ViewStatus" ElementName="uc"></Binding>
<Binding Path="DataContext.StrategyMode" ElementName="uc"></Binding> <Binding Path="DataContext.StrategyMode" ElementName="uc"></Binding>
<Binding Path="DataContext.StrategyType" ElementName="uc"></Binding> <Binding Path="DataContext.StrategyType" ElementName="uc"></Binding>
</MultiBinding> </MultiBinding>
</common:FootballFieldPanel.Visibility> </RadioButton.Visibility>
</common:FootballFieldPanel> </RadioButton>
</Border>
<!-- 近景机位 & 16米机位 & 战术机位 ===== 边线检测选择面板 -->
<Border Grid.Row="1"
Visibility="{Binding Path=AlgorithmConfig.IsShowBorder,Mode=OneWay,Converter={StaticResource Bool2VisibilityConverter}}">
<RadioButton Style="{StaticResource RadioButton_NdiView_Tool}"
Height="{Binding ElementName=uc,Path=DataContext.StrategyType,Converter={StaticResource AlgorithmStrategyType2FootballFieldHeightConverter}}"
IsChecked="{Binding Path=ToolPartViewModel.IsSideCheckPolygonChecked,Mode=TwoWay}"
GroupName="{Binding Path=ViewKey,Converter={StaticResource StringAppendConverter}, ConverterParameter=Tool}"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource NDIViewProperty2VisibilityConverter_FootballFieldPanel}">
<Binding Path="DataContext.ViewStatus" ElementName="uc"></Binding>
<Binding Path="DataContext.StrategyMode" ElementName="uc"></Binding>
<Binding Path="DataContext.StrategyType" ElementName="uc"></Binding>
</MultiBinding>
</RadioButton.Visibility>
<common:FootballFieldPanel FootballFieldWidth="150" FootballFieldHeight="100"
DataContext="{Binding Path=FootballFieldPanelModel}"
Orientation="{Binding ElementName=uc,Path=DataContext.StrategyType,Converter={StaticResource AlgorithmStrategyType2FootballFieldOrientationConverter}}">
</common:FootballFieldPanel>
</RadioButton>
</Border>
</Grid>
</Grid> </Grid>
<!-- 视频区域 --> <!-- 视频区域 -->
<Border BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="1"> <Border BorderBrush="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="1">
......
...@@ -128,6 +128,11 @@ namespace VIZ.H2V.Module ...@@ -128,6 +128,11 @@ namespace VIZ.H2V.Module
SideCheckPolygonPlugin sideCheckPolygonPlugin = new SideCheckPolygonPlugin(view.video); SideCheckPolygonPlugin sideCheckPolygonPlugin = new SideCheckPolygonPlugin(view.video);
sideCheckPolygonPlugin.Click += SideCheckPolygonPlugin_Click; sideCheckPolygonPlugin.Click += SideCheckPolygonPlugin_Click;
view.video.AttachPlugin(sideCheckPolygonPlugin); view.video.AttachPlugin(sideCheckPolygonPlugin);
// 手动校准插件
ManualCorrectionPlugin manualCorrectionPlugin = new ManualCorrectionPlugin(view.video);
manualCorrectionPlugin.Click += ManualCorrectionPlugin_Click;
view.video.AttachPlugin(manualCorrectionPlugin);
} }
/// <summary> /// <summary>
...@@ -151,13 +156,6 @@ namespace VIZ.H2V.Module ...@@ -151,13 +156,6 @@ namespace VIZ.H2V.Module
return; return;
this.AlgorithmControllerDic[this.StrategyType].Tracking(e.HitTrackingBoxInfo); this.AlgorithmControllerDic[this.StrategyType].Tracking(e.HitTrackingBoxInfo);
// ====================================================================================
// DEBUG
//if (ApplicationDomainEx.IS_DEBUG)
//{
// this.DebugLog = $"点击跟踪框:[{e.HitTrackingBoxInfo.SrcRect.Left}, {e.HitTrackingBoxInfo.SrcRect.Top}, {e.HitTrackingBoxInfo.SrcRect.Right}, {e.HitTrackingBoxInfo.SrcRect.Bottom}]";
//}
} }
/// <summary> /// <summary>
...@@ -165,6 +163,10 @@ namespace VIZ.H2V.Module ...@@ -165,6 +163,10 @@ namespace VIZ.H2V.Module
/// </summary> /// </summary>
private void SideCheckPolygonPlugin_Click(object sender, SideCheckPolygonClickEventArgs e) private void SideCheckPolygonPlugin_Click(object sender, SideCheckPolygonClickEventArgs e)
{ {
// 当前模式需要在边线检测模式下处理
if (!this.ToolPartViewModel.IsSideCheckPolygonChecked)
return;
// 边线检测只能在自动裁切时触发 // 边线检测只能在自动裁切时触发
if (this.StrategyMode != AlgorithmStrategyMode.auto_mode) if (this.StrategyMode != AlgorithmStrategyMode.auto_mode)
return; return;
...@@ -197,16 +199,42 @@ namespace VIZ.H2V.Module ...@@ -197,16 +199,42 @@ namespace VIZ.H2V.Module
} }
this.AlgorithmControllerDic[this.StrategyType].BorderPoint(borderpoint); this.AlgorithmControllerDic[this.StrategyType].BorderPoint(borderpoint);
}
// ==================================================================================== /// <summary>
// DEBUG /// 手动校准点击事件
/// </summary>
private void ManualCorrectionPlugin_Click(object sender, ManualCorrectionClickEventArgs e)
{
// 当前需要在手动校准模式下处理
if (!this.ToolPartViewModel.IsManualCorrectionChecked)
return;
if (ApplicationDomainEx.IS_DEBUG) // 手动校准只能在自动裁切时触发
{ if (this.StrategyMode != AlgorithmStrategyMode.auto_mode)
this.DebugLog = $"点击边线检测点:{e.SrcPoint}"; return;
}
} // 手动校准只能在当前状态为接收裁切状态时可以触发
if (this.ViewStatus != NDIViewStatus.CropRoi)
return;
// 单人模式不需要处理
if (this.StrategyType == AlgorithmStrategyType.Single)
return;
NDIView view = this.GetView<NDIView>();
if (view == null)
return;
ManualCorrectionInfo info = new ManualCorrectionInfo();
info.SrcCenter = new RawVector2((int)e.SrcPoint.X, (int)e.SrcPoint.Y);
info.SrcRadius = (float)this.AlgorithmConfig.ManualCorrectionRadius;
info.FillColor = this.ManualCorrectionColor;
// 向算法发送区域信息
this.AlgorithmControllerDic[this.StrategyType].ManualCorrection(info);
// 绘制区域信息
view.video.UpdateManualCorrection(info);
}
#endregion #endregion
......
...@@ -158,6 +158,9 @@ namespace VIZ.H2V.Module ...@@ -158,6 +158,9 @@ namespace VIZ.H2V.Module
// 更新边线检测框 // 更新边线检测框
this.OnAlgorithmMessage__crop_roi__borderline(msg, renderInfo, view); this.OnAlgorithmMessage__crop_roi__borderline(msg, renderInfo, view);
// 更新手动校准区域
this.OnAlgorithmMessage__crop_roi__correction_area(msg, renderInfo, view);
// 更新算法帧率统计 // 更新算法帧率统计
this.AlgorithmFPS.CalcFps(); this.AlgorithmFPS.CalcFps();
} }
...@@ -283,6 +286,30 @@ namespace VIZ.H2V.Module ...@@ -283,6 +286,30 @@ namespace VIZ.H2V.Module
} }
/// <summary> /// <summary>
/// 裁切信息更新 -- 更新手动校准区域
/// </summary>
/// <param name="msg">裁切消息</param>
/// <param name="renderInfo">渲染信息</param>
/// <param name="view">视图</param>
private void OnAlgorithmMessage__crop_roi__correction_area(AlgorithmMessage__crop_roi msg, VideoRenderInfo renderInfo, NDIView view)
{
if (msg.correction_area == null || msg.correction_area.Count != 3)
{
view.video.ClearManualCorrection();
return;
}
ManualCorrectionInfo manualCorrectionInfo = new ManualCorrectionInfo();
manualCorrectionInfo.SrcCenter = new RawVector2(msg.correction_area[0], msg.correction_area[1]);
manualCorrectionInfo.SrcRadius = msg.correction_area[2];
manualCorrectionInfo.FillColor = this.ManualCorrectionColor;
view.video.UpdateManualCorrection(manualCorrectionInfo);
}
/// <summary>
/// 构建边线多边形信息 /// 构建边线多边形信息
/// </summary> /// </summary>
/// <param name="data">数据</param> /// <param name="data">数据</param>
......
...@@ -59,6 +59,11 @@ namespace VIZ.H2V.Module ...@@ -59,6 +59,11 @@ namespace VIZ.H2V.Module
private readonly double VIDEO_SIDE_CHECK_POLYGON_OPACITY = ApplicationDomainEx.IniStorage.GetValue<VideoConfig, double>(p => p.VIDEO_SIDE_CHECK_POLYGON_OPACITY); private readonly double VIDEO_SIDE_CHECK_POLYGON_OPACITY = ApplicationDomainEx.IniStorage.GetValue<VideoConfig, double>(p => p.VIDEO_SIDE_CHECK_POLYGON_OPACITY);
/// <summary> /// <summary>
/// 手动校准区域透明度
/// </summary>
private readonly double VIDEO_MANUAL_CORRECTION_OPACITY = ApplicationDomainEx.IniStorage.GetValue<VideoConfig, double>(p => p.VIDEO_MANUAL_CORRECTION_OPACITY);
/// <summary>
/// 是否显示目标框 /// 是否显示目标框
/// </summary> /// </summary>
private readonly bool ALGORITHM_IS_SHOW_TARGET_BOX = ApplicationDomainEx.IniStorage.GetValue<AlgorithmConfig, bool>(p => p.ALGORITHM_IS_SHOW_TARGET_BOX); private readonly bool ALGORITHM_IS_SHOW_TARGET_BOX = ApplicationDomainEx.IniStorage.GetValue<AlgorithmConfig, bool>(p => p.ALGORITHM_IS_SHOW_TARGET_BOX);
...@@ -84,6 +89,11 @@ namespace VIZ.H2V.Module ...@@ -84,6 +89,11 @@ namespace VIZ.H2V.Module
/// </summary> /// </summary>
private RawColor4 BorderSceneColor; private RawColor4 BorderSceneColor;
/// <summary>
/// 人工校准填充颜色
/// </summary>
private RawColor4 ManualCorrectionColor;
// ====================================================================================== // ======================================================================================
// === Controller === // === Controller ===
// ====================================================================================== // ======================================================================================
...@@ -483,6 +493,20 @@ namespace VIZ.H2V.Module ...@@ -483,6 +493,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ToolPartViewModel -- 工具部分视图模型
private NDIViewToolPartViewModel toolPartViewModel = new NDIViewToolPartViewModel();
/// <summary>
/// 工具部分视图模型
/// </summary>
public NDIViewToolPartViewModel ToolPartViewModel
{
get { return toolPartViewModel; }
set { toolPartViewModel = value; this.RaisePropertyChanged(nameof(ToolPartViewModel)); }
}
#endregion
#region DebugLog -- 调试日志 #region DebugLog -- 调试日志
private string debugLog; private string debugLog;
......
...@@ -282,6 +282,10 @@ namespace VIZ.H2V.Module ...@@ -282,6 +282,10 @@ namespace VIZ.H2V.Module
RawColor4 borderSceneColor = SharpDxColorHelper.FromString(config.BorderSceneColor); RawColor4 borderSceneColor = SharpDxColorHelper.FromString(config.BorderSceneColor);
borderSceneColor.A = (float)this.VIDEO_SIDE_CHECK_POLYGON_OPACITY; borderSceneColor.A = (float)this.VIDEO_SIDE_CHECK_POLYGON_OPACITY;
this.BorderSceneColor = borderSceneColor; this.BorderSceneColor = borderSceneColor;
RawColor4 manualCorrectionColor = SharpDxColorHelper.FromString(config.ManualCorrectionColor);
manualCorrectionColor.A = (float)this.VIDEO_MANUAL_CORRECTION_OPACITY;
this.ManualCorrectionColor = manualCorrectionColor;
} }
/// <summary> /// <summary>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VIZ.Framework.Core;
namespace VIZ.H2V.Module
{
/// <summary>
/// NDI视图工具部分视图模型
/// </summary>
public class NDIViewToolPartViewModel : ModelBase
{
#region IsManualCorrectionChecked -- 手动校准是否选中
private bool isManualCorrectionChecked = true;
/// <summary>
/// 手动校准是否选中
/// </summary>
public bool IsManualCorrectionChecked
{
get { return isManualCorrectionChecked; }
set { isManualCorrectionChecked = value; this.RaisePropertyChanged(nameof(IsManualCorrectionChecked)); }
}
#endregion
#region IsSideCheckPolygonChecked -- 边线检测是否选中
private bool isSideCheckPolygonChecked;
/// <summary>
/// 边线检测是否选中
/// </summary>
public bool IsSideCheckPolygonChecked
{
get { return isSideCheckPolygonChecked; }
set { isSideCheckPolygonChecked = value; this.RaisePropertyChanged(nameof(IsSideCheckPolygonChecked)); }
}
#endregion
}
}
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition> <RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- 剪切框颜色 --> <!-- 剪切框颜色 -->
...@@ -72,9 +73,18 @@ ...@@ -72,9 +73,18 @@
<TextBlock Text="边线检测区域颜色" Foreground="White" FontSize="18" VerticalAlignment="Center" Grid.Row="2"></TextBlock> <TextBlock Text="边线检测区域颜色" Foreground="White" FontSize="18" VerticalAlignment="Center" Grid.Row="2"></TextBlock>
<fcommon:ColorPickButton Grid.Column="1" Color="{Binding Path=BorderSceneColor,Mode=TwoWay}" Height="30" Grid.Row="2"></fcommon:ColorPickButton> <fcommon:ColorPickButton Grid.Column="1" Color="{Binding Path=BorderSceneColor,Mode=TwoWay}" Height="30" Grid.Row="2"></fcommon:ColorPickButton>
</Grid> </Grid>
<!-- 手动校准颜色 -->
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="手动校准颜色" Foreground="White" FontSize="18" VerticalAlignment="Center" Grid.Row="2"></TextBlock>
<fcommon:ColorPickButton Grid.Column="1" Color="{Binding Path=ManualCorrectionColor,Mode=TwoWay}" Height="30" Grid.Row="2"></fcommon:ColorPickButton>
</Grid>
<!-- 裁切框移动 --> <!-- 裁切框移动 -->
<TextBlock Text="裁切框移动" Foreground="White" FontSize="18" VerticalAlignment="Center" Grid.Row="3"></TextBlock> <TextBlock Text="裁切框移动" Foreground="White" FontSize="18" VerticalAlignment="Center" Grid.Row="4"></TextBlock>
<Grid Grid.Row="4"> <Grid Grid.Row="5">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="*"></RowDefinition> <RowDefinition Height="*"></RowDefinition>
......
...@@ -90,6 +90,20 @@ namespace VIZ.H2V.Module ...@@ -90,6 +90,20 @@ namespace VIZ.H2V.Module
#endregion #endregion
#region ManualCorrectionColor -- 手动校准颜色
private Color manualCorrectionColor;
/// <summary>
/// 手动校准颜色
/// </summary>
public Color ManualCorrectionColor
{
get { return manualCorrectionColor; }
set { manualCorrectionColor = value; this.RaisePropertyChanged(nameof(ManualCorrectionColor)); }
}
#endregion
#region ManualSmoothCoeff -- 手动裁切平滑系数 #region ManualSmoothCoeff -- 手动裁切平滑系数
private double manualSmoothCoeff; private double manualSmoothCoeff;
...@@ -129,6 +143,7 @@ namespace VIZ.H2V.Module ...@@ -129,6 +143,7 @@ namespace VIZ.H2V.Module
this.ClipExceptionColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.ClipExceptionColor); this.ClipExceptionColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.ClipExceptionColor);
this.ClipManualColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.ClipManualColor); this.ClipManualColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.ClipManualColor);
this.BorderSceneColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.BorderSceneColor); this.BorderSceneColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.BorderSceneColor);
this.ManualCorrectionColor = (Color)ColorConverter.ConvertFromString(this.SystemConfig.ManualCorrectionColor);
this.ManualSmoothCoeff = this.SystemConfig.ManualSmoothCoeff; this.ManualSmoothCoeff = this.SystemConfig.ManualSmoothCoeff;
} }
...@@ -157,6 +172,9 @@ namespace VIZ.H2V.Module ...@@ -157,6 +172,9 @@ namespace VIZ.H2V.Module
if (this.BorderSceneColor.ToString() != this.SystemConfig.BorderSceneColor) if (this.BorderSceneColor.ToString() != this.SystemConfig.BorderSceneColor)
return true; return true;
if (this.ManualCorrectionColor.ToString() != this.SystemConfig.ManualCorrectionColor)
return true;
if (this.ManualSmoothCoeff != this.SystemConfig.ManualSmoothCoeff) if (this.ManualSmoothCoeff != this.SystemConfig.ManualSmoothCoeff)
return true; return true;
...@@ -174,6 +192,7 @@ namespace VIZ.H2V.Module ...@@ -174,6 +192,7 @@ namespace VIZ.H2V.Module
this.SystemConfig.ClipExceptionColor = this.ClipExceptionColor.ToString(); this.SystemConfig.ClipExceptionColor = this.ClipExceptionColor.ToString();
this.SystemConfig.ClipManualColor = this.ClipManualColor.ToString(); this.SystemConfig.ClipManualColor = this.ClipManualColor.ToString();
this.SystemConfig.BorderSceneColor = this.BorderSceneColor.ToString(); this.SystemConfig.BorderSceneColor = this.BorderSceneColor.ToString();
this.SystemConfig.ManualCorrectionColor = this.ManualCorrectionColor.ToString();
this.SystemConfig.ManualSmoothCoeff = this.ManualSmoothCoeff; this.SystemConfig.ManualSmoothCoeff = this.ManualSmoothCoeff;
ApplicationDomainEx.LiteDbContext.SystemConfig.Update(this.SystemConfig); ApplicationDomainEx.LiteDbContext.SystemConfig.Update(this.SystemConfig);
......
...@@ -246,6 +246,7 @@ ...@@ -246,6 +246,7 @@
<Compile Include="NDIView\VieweModel\NDIViewModel.Message.cs" /> <Compile Include="NDIView\VieweModel\NDIViewModel.Message.cs" />
<Compile Include="NDIView\VieweModel\NDIViewModel.Property.cs" /> <Compile Include="NDIView\VieweModel\NDIViewModel.Property.cs" />
<Compile Include="NDIView\VieweModel\NDIViewModel.cs" /> <Compile Include="NDIView\VieweModel\NDIViewModel.cs" />
<Compile Include="NDIView\VieweModel\Part\NDIViewToolPartViewModel.cs" />
<Compile Include="Setup\Provider\AppSetup_Algorithm.cs" /> <Compile Include="Setup\Provider\AppSetup_Algorithm.cs" />
<Compile Include="Setup\Provider\AppSetup_Recording.cs" /> <Compile Include="Setup\Provider\AppSetup_Recording.cs" />
<Compile Include="Setup\Provider\AppSetup_InitUDP.cs" /> <Compile Include="Setup\Provider\AppSetup_InitUDP.cs" />
......
...@@ -48,5 +48,10 @@ namespace VIZ.H2V.Storage ...@@ -48,5 +48,10 @@ namespace VIZ.H2V.Storage
/// 是否显示边线检测 /// 是否显示边线检测
/// </summary> /// </summary>
public bool IsShowBorder { get; set; } = true; public bool IsShowBorder { get; set; } = true;
/// <summary>
/// 手动校准半径
/// </summary>
public double ManualCorrectionRadius { get; set; } = 200;
} }
} }
...@@ -35,7 +35,12 @@ namespace VIZ.H2V.Storage ...@@ -35,7 +35,12 @@ namespace VIZ.H2V.Storage
/// <summary> /// <summary>
/// 边线检测区域颜色 /// 边线检测区域颜色
/// </summary> /// </summary>
public string BorderSceneColor { get; set; } = "#FFFF000000"; public string BorderSceneColor { get; set; } = "#FFFF0000";
/// <summary>
/// 手动校准区域颜色
/// </summary>
public string ManualCorrectionColor { get; set; } = "#FFFF0000";
/// <summary> /// <summary>
/// 手动裁切平滑系数 /// 手动裁切平滑系数
......
...@@ -26,7 +26,7 @@ namespace VIZ.H2V.UdpTestTool ...@@ -26,7 +26,7 @@ namespace VIZ.H2V.UdpTestTool
// 设置默认值 // 设置默认值
this.check_ok = $"{{'signal':'checked_ok','id':'{UdpTestApplicationDomain.AlgorithmID}' }}"; this.check_ok = $"{{'signal':'checked_ok','id':'{UdpTestApplicationDomain.AlgorithmID}' }}";
this.detect = $"{{'signal':'detect','id':'{UdpTestApplicationDomain.AlgorithmID}', 'bboxes': [[100,100,200,300],[400,200,600,600]] }}"; this.detect = $"{{'signal':'detect','id':'{UdpTestApplicationDomain.AlgorithmID}', 'bboxes': [[100,100,200,300],[400,200,600,600]] }}";
this.crop_roi = $"{{'signal':'crop_roi','id':'{UdpTestApplicationDomain.AlgorithmID}', 'roi': [400,0,1200,1080], 'target_bbox': [500,100,600,400], 'borderline':{{ 'up': [[100,100],[500,200],[300,400],[200,100],[100,100]] }} }}"; this.crop_roi = $"{{'signal':'crop_roi','id':'{UdpTestApplicationDomain.AlgorithmID}', 'roi': [400,0,1200,1080], 'target_bbox': [500,100,600,400], 'borderline':{{ 'up': [[100,100],[500,200],[300,400],[200,100],[100,100]] }},'correction_area':[200,200,200]}}";
// 注册命令 // 注册命令
this.SendCommand_check_ok = new VCommand(this.Send_check_ok); this.SendCommand_check_ok = new VCommand(this.Send_check_ok);
......
...@@ -42,6 +42,8 @@ VIDEO_CLIP_BOX_BORDER_COLOR=#FFFF0000 ...@@ -42,6 +42,8 @@ VIDEO_CLIP_BOX_BORDER_COLOR=#FFFF0000
VIDEO_CLIP_BOX_MASK_COLOR=#88000000 VIDEO_CLIP_BOX_MASK_COLOR=#88000000
;视频边线检测多边形区域透明度 ;视频边线检测多边形区域透明度
VIDEO_SIDE_CHECK_POLYGON_OPACITY=0.15 VIDEO_SIDE_CHECK_POLYGON_OPACITY=0.15
;视频人工校准区域透明度
VIDEO_MANUAL_CORRECTION_OPACITY=0.2
; ============================================================ ; ============================================================
; === Navigation3D === ; === Navigation3D ===
; ============================================================ ; ============================================================
......
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