Commit 2acf19e8 authored by 姜春辉's avatar 姜春辉

完成身份验证页面各种验证方式的切换逻辑

parent a74a4562
......@@ -30,8 +30,7 @@
<Property Name="Tag" Caption="标识"></Property>
</Declare>
<Datas>
<Data DisplayName="ActiveCard1" Type="Card" Descript="BOSTEX读卡器主动" VID="1A86" PID="5523" MI="3" isVirtual="false" ImplDLLName="Device.Implement.BostexCardReader.dll" isWatch="true" isPolling="true" AllowFind="true" Interval="600" Tag="" />
<Data DisplayName="门锁控制" Type="GPIO" Descript="门锁控制" VID="" PID="" MI="22" isVirtual="true" ImplDLLName="Device.Implement.GPIO.dll" isWatch="true" isPolling="false" AllowFind="false" Interval="1000" Tag="" />
<Data DisplayName="DKQ_A16D_Second" Type="Second" Descript="新中新二代证阅读器DKQ-A16D" VID="0316" PID="5020" MI="" isVirtual="false" ImplDLLName="Device.Implement.SecondCardReader.dll" isWatch="true" isPolling="false" AllowFind="true" Interval="300" Tag="" />
</Datas>
</Structure>
</Structures>
......
......@@ -107,6 +107,14 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Content Include="..\..\..\Addons\GS.Terminal.DeviceManager\Device\Device.Implement.SecondCardReader.dll">
<Link>Addons\GS.Terminal.DeviceManager\Device\Device.Implement.SecondCardReader.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\..\..\Addons\GS.Terminal.DeviceManager\Device\GS.Terminal.DeviceManager.DeviceLocker.dll">
<Link>Addons\GS.Terminal.DeviceManager\Device\GS.Terminal.DeviceManager.DeviceLocker.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Addons\GS.Terminal.MainShell\Images\logo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
......@@ -297,9 +305,7 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Folder Include="Addons\GS.Terminal.DeviceManager\Device\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="DataSpaceConfig.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
......
using System;
using GalaSoft.MvvmLight.Threading;
using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
......@@ -8,9 +11,56 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
{
public class AuthenticationPageHandler : Corebase<ViewModels.Pages.AuthenticationPage.ViewModel>
{
private string _FaceEngineId = string.Empty;
public override void Init()
{
VM.OnExitClick += VM_OnExitClick;
VM.OnNavigateInto += VM_OnNavigateInto;
VM.OnNavigateOut += VM_OnNavigateOut;
VM.OnAuthModeChanged += VM_OnAuthModeChanged;
_FaceEngineId = ThirdAddon.FastRecognization.CreateFastFaceRecognized(null, null, null, 0.85f);
ThirdAddon.FastRecognization.Pause(_FaceEngineId);
ThirdAddon.FastRecognization.RegistFeatureExtracted(_FaceEngineId, FaceFeatureExtracted);
}
private void VM_OnAuthModeChanged(ViewModels.Pages.AuthenticationPage.AuthenticationMode nowMode)
{
if (nowMode == ViewModels.Pages.AuthenticationPage.AuthenticationMode.Face)
{
ThirdAddon.FaceRecognization.RegistOutPutMatEvent(VideoOut);
ThirdAddon.FastRecognization.Restart(_FaceEngineId);
}
else
{
ThirdAddon.FastRecognization.Pause(_FaceEngineId);
ThirdAddon.FaceRecognization.UnRegistOutPutMatEvent(VideoOut);
}
}
private void FaceFeatureExtracted(byte[] feature, string fid)
{
}
private void VM_OnNavigateOut()
{
ThirdAddon.FastRecognization.Pause(_FaceEngineId);
ThirdAddon.FaceRecognization.UnRegistOutPutMatEvent(VideoOut);
}
private void VM_OnNavigateInto()
{
//启动摄像头
ThirdAddon.FaceRecognization.RegistOutPutMatEvent(VideoOut);
ThirdAddon.FastRecognization.Restart(_FaceEngineId);
}
private void VideoOut(Mat mat)
{
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
VM.VideoOutput = mat.ToBitmapSource();
});
}
private void VM_OnExitClick()
......
......@@ -22,7 +22,7 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
}
else
{
var result = DeviceManager.CallDeviceByTypeWithDynamic("Second");
}
}
}
......
......@@ -77,6 +77,7 @@
<Reference Include="OpenCvSharp.UserInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6adad1e807fea099, processorArchitecture=MSIL">
<HintPath>..\..\packages\OpenCvSharp3-AnyCPU.4.0.0.20181129\lib\net40\OpenCvSharp.UserInterface.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
......
......@@ -34,6 +34,16 @@ namespace GS.Terminal.VisitorSelfService.Logic.ThirdAddon
_Service?.RemoveCardCallback(GetCallback);
}
public static string CallDeviceByTypeWithJson(string deviceType, params string[] callParameters)
{
return _DeviceTiggerService?.CallDeviceByTypeWithJson(deviceType, callParameters);
}
public static dynamic CallDeviceByTypeWithDynamic(string deviceType, params string[] callParameters)
{
return _DeviceTiggerService?.CallDeviceByTypeWithDynamic(deviceType, callParameters);
}
public static dynamic CallGPIO(string arg)
{
return _DeviceTiggerService?.CallGPIO(arg);
......
......@@ -62,5 +62,10 @@ namespace GS.Terminal.VisitorSelfService.Logic.ThirdAddon
_Service.Restart(fid);
}
}
public static void RegistFeatureExtracted(string fid, Action<byte[], string> action)
{
_Service.RegistFeatureExtracted(fid, action);
}
}
}
......@@ -6,22 +6,96 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace ViewModels.Pages.AuthenticationPage
{
public partial class ViewModel : ViewModelBase, IViewModel
public enum AuthenticationMode
{
Face,
IdCard,
QRCode
}
public delegate void AuthModeChangedDelegate(AuthenticationMode nowMode);
public partial class ViewModel : ViewModelBase, IViewModel, IViewModelBehavior
{
public string ViewID => "bbf0b764-4029-4db8-8beb-97b9627a4ac5";
public event Action OnExitClick;
public event Action OnNavigateInto;
public event Action OnNavigateOut;
public event AuthModeChangedDelegate OnAuthModeChanged;
public RelayCommand ExitCommand => new RelayCommand(() =>
{
OnExitClick?.Invoke();
});
public RelayCommand<string> ChangeAuthModeCommand =>
new RelayCommand<string>(para =>
{
AuthMode = (AuthenticationMode)int.Parse(para);
});
private ImageSource _VideoOutput;
public ImageSource VideoOutput
{
get { return _VideoOutput; }
set { _VideoOutput = value; RaisePropertyChanged("VideoOutput"); }
}
private AuthenticationMode _AuthMode = AuthenticationMode.Face;
public AuthenticationMode AuthMode
{
get { return _AuthMode; }
set
{
_AuthMode = value;
RaisePropertyChanged("AuthMode");
OnAuthModeChanged?.Invoke(value);
}
}
private bool _EnableFace = true;
public bool EnableFace
{
get { return _EnableFace; }
set { _EnableFace = value; RaisePropertyChanged("EnableFace"); }
}
private bool _EnableIdCard = true;
public bool EnableIdCard
{
get { return _EnableIdCard; }
set { _EnableIdCard = value; RaisePropertyChanged("EnableIdCard"); }
}
private bool _EnableQRCode = true;
public bool EnableQRCode
{
get { return _EnableQRCode; }
set { _EnableQRCode = value; RaisePropertyChanged("EnableQRCode"); }
}
public void Reset()
{
}
public void NavigateInto(IViewModel from)
{
OnNavigateInto?.Invoke();
}
public void NavigateOut(IViewModel to)
{
OnNavigateOut?.Invoke();
}
}
}
......@@ -49,6 +49,7 @@
<Reference Include="GS.Terminal.LogicShell.Interface">
<HintPath>..\..\..\..\Addons\GS.Terminal.LogicShell\GS.Terminal.LogicShell.Interface.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
......
......@@ -23,62 +23,14 @@
<RowDefinition/>
<RowDefinition Height="140"/>
</Grid.RowDefinitions>
<StackPanel>
<TextBlock Text="正在通过人脸识别您的身份" FontSize="60" HorizontalAlignment="Center"/>
<Border>
<Grid Margin="0,100,0,0">
<Border Width="600" Height="600" BorderThickness="10" BorderBrush="#02eea6" CornerRadius="300">
<!--580*580-->
<Image/>
</Border>
</Grid>
</Border>
</StackPanel>
<ContentControl Style="{StaticResource Authentication_CurrentMode}"/>
<!--识别方式-->
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="其他识别方式" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Grid Grid.Row="1" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button VerticalAlignment="Center" HorizontalAlignment="Center">
<Button.Template>
<ControlTemplate TargetType="Button">
<StackPanel>
<gs:ImageButtonFix Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}"
Width="330" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"
Image="/Views;component/Resources/auth_mode_idcard.png" />
<TextBlock Text="二代证识别" HorizontalAlignment="Center" FontSize="36"/>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
<Button Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button.Template>
<ControlTemplate TargetType="Button">
<StackPanel>
<gs:ImageButtonFix Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}"
Width="330" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"
Image="/Views;component/Resources/auth_mode_qrcode.png" />
<TextBlock Text="预约二维码识别" HorizontalAlignment="Center" FontSize="36"/>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Grid>
<ContentControl Grid.Row="1" Template="{StaticResource Authentication_OtherMode}"/>
<Button Grid.Row="2" Template="{StaticResource CommonButton}"
Command="{Binding ExitCommand}"
Width="250" Height="60" Content="退出" Foreground="#2a2b2d" FontSize="24">
</Button>
Width="250" Height="60" Content="退出" Foreground="#2a2b2d" FontSize="24"/>
</Grid>
</Grid>
</Page>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:gs="clr-namespace:Develop.Extension.Wpf;assembly=Develop.Extension.Wpf"
xmlns:local="clr-namespace:Views.Pages.AuthenticationPage">
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<ControlTemplate x:Key="Authentication_CurrentMode_Face" TargetType="ContentControl">
<StackPanel>
<TextBlock Text="正在通过人脸识别您的身份" FontSize="60" HorizontalAlignment="Center"/>
<Border>
<Grid Margin="0,100,0,0">
<Border Width="600" Height="600" BorderThickness="10" BorderBrush="#02eea6" CornerRadius="300">
<!--580*580-->
<Image Source="{Binding VideoOutput}" Stretch="Fill">
<Image.Clip>
<GeometryGroup FillRule="Nonzero">
<EllipseGeometry RadiusX="290" RadiusY="290" Center="290, 290"></EllipseGeometry>
</GeometryGroup>
</Image.Clip>
</Image>
</Border>
</Grid>
</Border>
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Key="Authentication_CurrentMode_IdCard" TargetType="ContentControl">
<StackPanel>
<TextBlock FontSize="72" HorizontalAlignment="Center">
<Run Text="请将二代身份证"/>
<LineBreak/>
<Run Text="放置到读卡区域"/>
</TextBlock>
<Image Source="/Views;component/Resources/auth_mode_current_idcard.png"/>
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Key="Authentication_CurrentMode_QRCode" TargetType="ContentControl">
<StackPanel>
<TextBlock FontSize="72" HorizontalAlignment="Center">
<Run Text="请将预约二维码"/>
<LineBreak/>
<Run Text="放置到扫码区域"/>
</TextBlock>
<Image Source="/Views;component/Resources/auth_mode_current_qrcode.png"/>
</StackPanel>
</ControlTemplate>
<Style x:Key="Authentication_CurrentMode" TargetType="ContentControl">
<Setter Property="Template" Value="{StaticResource Authentication_CurrentMode_QRCode}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding AuthMode}" Value="0">
<Setter Property="Template" Value="{StaticResource Authentication_CurrentMode_Face}"/>
</DataTrigger>
<DataTrigger Binding="{Binding AuthMode}" Value="1">
<Setter Property="Template" Value="{StaticResource Authentication_CurrentMode_IdCard}"/>
</DataTrigger>
<DataTrigger Binding="{Binding AuthMode}" Value="2">
<Setter Property="Template" Value="{StaticResource Authentication_CurrentMode_QRCode}"/>
</DataTrigger>
</Style.Triggers>
</Style>
<ControlTemplate x:Key="Authentication_OtherMode" TargetType="ContentControl">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="其他识别方式" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Height="296">
<Border Visibility="{Binding EnableIdCard, Converter={StaticResource BooleanToVisibilityConverter}}">
<Button x:Name="PART_idcard" Command="{Binding ChangeAuthModeCommand}" CommandParameter="1" Width="330" Height="296" Margin="50,0,50,0">
<Button.Template>
<ControlTemplate TargetType="Button">
<StackPanel>
<gs:ImageButtonFix Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}"
Width="330" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"
Image="/Views;component/Resources/auth_mode_idcard.png" />
<TextBlock Text="二代证识别" HorizontalAlignment="Center" FontSize="36"/>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</Border>
<Border Visibility="{Binding EnableQRCode, Converter={StaticResource BooleanToVisibilityConverter}}">
<Button x:Name="PART_qrcode" Command="{Binding ChangeAuthModeCommand}" CommandParameter="2" Width="330" Height="296" Margin="50,0,50,0">
<Button.Template>
<ControlTemplate TargetType="Button">
<StackPanel>
<gs:ImageButtonFix Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}"
Width="330" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"
Image="/Views;component/Resources/auth_mode_qrcode.png" />
<TextBlock Text="预约二维码识别" HorizontalAlignment="Center" FontSize="36"/>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</Border>
<Border Visibility="{Binding EnableFace, Converter={StaticResource BooleanToVisibilityConverter}}">
<Button x:Name="PART_face" Command="{Binding ChangeAuthModeCommand}" CommandParameter="0" Width="330" Height="296" Margin="50,0,50,0">
<Button.Template>
<ControlTemplate TargetType="Button">
<StackPanel>
<gs:ImageButtonFix Command="{TemplateBinding Command}" CommandParameter="{TemplateBinding CommandParameter}"
Width="330" Height="250" HorizontalAlignment="Center" VerticalAlignment="Center"
Image="/Views;component/Resources/auth_mode_face.png" />
<TextBlock Text="刷脸识别" HorizontalAlignment="Center" FontSize="36"/>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</Border>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding AuthMode}" Value="0">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_face"/>
</DataTrigger>
<DataTrigger Binding="{Binding AuthMode}" Value="1">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_idcard"/>
</DataTrigger>
<DataTrigger Binding="{Binding AuthMode}" Value="2">
<Setter Property="Visibility" Value="Collapsed" TargetName="PART_qrcode"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ResourceDictionary>
\ No newline at end of file
......@@ -177,5 +177,9 @@
<Resource Include="Resources\history_appointment.png" />
<Resource Include="Resources\history_visit.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\auth_mode_current_idcard.png" />
<Resource Include="Resources\auth_mode_current_qrcode.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
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