Browse Source

优化人证合一

master
胡超1 1 year ago
parent
commit
58d5fe540a
  1. 97
      CPF_Cef/Common/WebSocketClientWithHeartbeat.cs
  2. 8
      CPF_Cef/FrmMain.cs
  3. 122
      CPF_Cef/MainModel.cs
  4. 6
      CPF_Cef/Parame.cs

97
CPF_Cef/Common/WebSocketClientWithHeartbeat.cs

@ -8,6 +8,10 @@ using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Timers;
using CPF.Mac.Foundation;
using CPF.Windows;
namespace AksWebBrowser.Common
{
@ -16,6 +20,8 @@ namespace AksWebBrowser.Common
private readonly string _serverUri;
private readonly ClientWebSocket _webSocket = new ClientWebSocket();
public string funName = string.Empty;
//开启定时
System.Timers.Timer timer = new System.Timers.Timer(30000);
public WebSocketClientWithHeartbeat()
{
try
@ -52,10 +58,11 @@ namespace AksWebBrowser.Common
// 处理接收到的消息逻辑
string body = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
if (!string.IsNullOrEmpty(body))
{
if (funName == "CF_StartLiveDetect")
{
JObject jo = (JObject)JsonConvert.DeserializeObject(body);
string functionName = jo["functionName"].ToString();
if (functionName == "LiveDetectResult")
{
string status = string.Empty;
if (body.Contains("success"))
{
@ -63,24 +70,58 @@ namespace AksWebBrowser.Common
}
if (string.IsNullOrEmpty(status))
{
string functionName = jo["functionName"].ToString();
string nEventId = jo["nEventId"].ToString();
if (functionName == "LiveDetectResult" && nEventId == "100")
if (nEventId == "100")
{
Parame.messageData = body;
}
string results = Parame.ImgBase64;
if (!string.IsNullOrEmpty(results))
{
JObject jo1 = (JObject)JsonConvert.DeserializeObject(results);
string data = jo1["data"].ToString();
jo1 = (JObject)JsonConvert.DeserializeObject(data);
string data2 = jo1["Data"].ToString();
jo1 = (JObject)JsonConvert.DeserializeObject(data2);
string ImageBase64 = jo1["ImageBase64"].ToString();
var faceA = "/data/home/aks/aks/wwwroot/TmpFile/faceA.jpg";
var faceB = "/data/home/aks/aks/wwwroot/TmpFile/faceB.jpg";
//string faceA = Utils.Base64ByImagesPath(ImageBase64.Replace("data:image/jpg;base64,", ""), "faceA");
//string faceB = Utils.Base64ByImagesPath(jo["ImgBase64"].ToString(), "faceB");
var mode2 = new
{
function = "CF_FaceCompare",
filePathA = faceA,
filePathB = faceB
};
//开始人脸比对
Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare");
}
else
{
if (status != "0")
{
Parame.messageData = body;
results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100101" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
Parame.socket.Send(results);
}
}
}
}
else if (functionName == "CF_FaceCompare")
{
//停止活检
Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect");
//关闭摄像头
Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
string status = jo["success"].ToString();
string results = string.Empty;
if (status == "0")
{
results = Parame.ImgBase64;
}
else
{
Parame.messageData = body;
results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100101" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
}
Parame.socket.Send(results);
}
}
}
@ -88,7 +129,6 @@ namespace AksWebBrowser.Common
catch (Exception ex)
{
Log.Error("接收消息双目websockt" + ex.Message);
Parame.messageData = "400";
}
}
}
@ -121,7 +161,7 @@ namespace AksWebBrowser.Common
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public async Task<string> Send(string message, string _funName)
public async Task Send(string message, string _funName)
{
try
{
@ -132,27 +172,36 @@ namespace AksWebBrowser.Common
// 发送消息到服务器
var buffer = System.Text.Encoding.UTF8.GetBytes(message);
await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
int timeout = 0;
while (string.IsNullOrEmpty(Parame.messageData) && timeout < 30000)
{
timeout = timeout + 10;
Task.Delay(10).Wait();
}
if (timeout >= 30000)
if (_funName== "CF_StartLiveDetect")
{
Parame.messageData = "500";
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;//启动定时器
}
}
else
catch (Exception ex)
{
Parame.messageData = "700";
Log.Error("推送消息到双目websockt" + ex.Message);
}
}
catch (Exception ex)
//打开串口
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
Log.Error("推送消息到双目websockt" + ex.Message);
try
{
timer.Stop();
//停止活检
Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect");
//关闭摄像头
Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100101" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "活体检测超时." + "\"}";
Parame.socket.Send(results);
}
return Parame.messageData;
catch { }
finally { }
}
/// <summary>

8
CPF_Cef/FrmMain.cs

@ -18,10 +18,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
public class FrmMain : Window
{
public int w = 1080;
public int h = 1920;
//public int h = 1080;
//public int w = 1920;
//public int w = 1080;
//public int h = 1920;
public int h = 1080;
public int w = 1920;
protected override void InitializeComponent()
{

122
CPF_Cef/MainModel.cs

@ -32,7 +32,6 @@ namespace AKS.EnterpriseLibrary.WebBrowser
public class MainModel : CPF.CpfObject
{
private static List<IWebSocketConnection> allSockets;
//初始化网络连接
public static void DeviceControllerInit()
{
@ -181,9 +180,12 @@ namespace AKS.EnterpriseLibrary.WebBrowser
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}";
}
try
{
if (!string.IsNullOrEmpty(result))
{
socket.Send(result);
}
}
catch { result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "hert" + "\",\"message\":\"seccse\",\"code\":\"400\",\"status\":true,\"data\":\"返回参数失败\"}"; }
finally { }
}
@ -273,44 +275,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
Task.Run(async () =>
{
JObject jo = (JObject)JsonConvert.DeserializeObject(IdcardStr);
string data = jo["Data"].ToString();
jo = (JObject)JsonConvert.DeserializeObject(data);
string ImageBase64 = jo["ImageBase64"].ToString();
StartFace(ImageBase64);
string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":" + IdcardStr + "}";
StartFace(results);
});
@event9.WaitOne();
if (!string.IsNullOrEmpty(smresults))
{
if (smresults == "200")
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":" + IdcardStr + "}";
}
else if (smresults == "500")
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证超时" + "\"}";
}
else if (smresults == "600")
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一活体检测失败" + "\"}";
}
else if (smresults == "700")
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "服务端连接异常" + "\"}";
}
else if (smresults == "800")
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "身份证持有者非本人" + "\"}";
}
else
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败。" + "\"}";
}
}
else
{
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
}
result = "";
}
else
{
@ -1654,7 +1622,9 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{
try
{
Parame.ImgBase64 = ImageBase64;
WebSocketClientWithHeartbeat webSocket = new WebSocketClientWithHeartbeat();
Task.Delay(800).Wait();
var mode = new
{
function = "CF_OpenCamera",
@ -1664,84 +1634,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser
fw = 800,
fh = 600
};
Task.Delay(1000).Wait();
//打开摄像头
webSocket.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera");
//开始活检
smresults = await webSocket.Send("{\"function\":\"CF_StartLiveDetect\"}", "CF_StartLiveDetect");
if (smresults == "500" || smresults == "400")//500:超时,400:接收数据错误
{
//关闭摄像头
webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
webSocket.Close();
}
else if (smresults == "700")//服务端未启动
{ webSocket.Close(); }
else
{
JObject jo = (JObject)JsonConvert.DeserializeObject(smresults);
string nEventId = jo["nEventId"].ToString();
if (nEventId == "100")
{
//var faceA = "/data/home/aks/aks/wwwroot/TmpFile/faceA.jpg";
//var faceB = "/data/home/aks/aks/wwwroot/TmpFile/faceB.jpg";
string faceA = Utils.Base64ByImagesPath(ImageBase64.Replace("data:image/jpg;base64,", ""), "faceA");
string faceB = Utils.Base64ByImagesPath(jo["ImgBase64"].ToString(), "faceB");
var mode2 = new
{
function = "CF_FaceCompare",
filePathA = faceA,
filePathB = faceB
};
//开始人脸比对
smresults = await webSocket.Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare");
Log.Info(smresults);
//停止活检
webSocket.Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect");
//关闭摄像头
webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
if (smresults == "500" || smresults == "400")//500:超时,400:接收数据错误
{
//关闭摄像头
webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
webSocket.Close();
}
else if (smresults == "700")//服务端未启动
{ webSocket.Close(); }
else
{
jo = (JObject)JsonConvert.DeserializeObject(smresults);
string success = jo["success"].ToString();
if (success == "0")
{
string score = jo["score"].ToString();
if (Convert.ToInt32(score) >= Parame.score)
{
smresults = "200";//比对成功
}
else
{
smresults = "800";//非本人
}
}
else
{
smresults = "400";
}
}
}
else
{
//停止活检
webSocket.Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect");
//关闭摄像头
webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
//活体检测失败
smresults = "600";
}
webSocket.Close();
}
@event9.Set();
webSocket.Send("{\"function\":\"CF_StartLiveDetect\"}", "CF_StartLiveDetect");
}
catch (Exception ex)
{

6
CPF_Cef/Parame.cs

@ -30,7 +30,7 @@ namespace AksWebBrowser
//高拍仪devIndex
public static string gpydevIndex = "0";
//签字版、指纹、身份证
public static string signUrl = "http://127.0.0.1:9399/device";
public static string signUrl = "http://192.168.0.234:9399/device";
//请求超时
public static int timeout = 3000;
//票据打印机
@ -44,11 +44,13 @@ namespace AksWebBrowser
//是否开启高拍仪
public static bool isGPY = false;
//双目摄像头
public static string smWebsocket = "ws://127.0.0.1:22226";
public static string smWebsocket = "ws://192.168.0.234:22226";
//消息推送
public static string messageData { get; set; }
//人脸比对阈值
public static int score = 65;
//人脸比对阈值
public static string ImgBase64 = string.Empty;
}
public struct Func
{

Loading…
Cancel
Save