From d16be0e358efad02775dc6c146547949e3e11106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=BD=87=E9=98=B3?= Date: Thu, 6 Jun 2024 11:18:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8C=E7=9B=AE=E5=B7=B2=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CPF_Cef/Common/ChunkedUpload.cs | 64 ++++----------- CPF_Cef/Common/Utils.cs | 33 ++++++++ CPF_Cef/FrmMain.cs | 6 +- CPF_Cef/MainModel.cs | 134 +++++++++++++++++++++++--------- CPF_Cef/Parame.cs | 4 +- 5 files changed, 153 insertions(+), 88 deletions(-) diff --git a/CPF_Cef/Common/ChunkedUpload.cs b/CPF_Cef/Common/ChunkedUpload.cs index d3cbd2b..77cab30 100644 --- a/CPF_Cef/Common/ChunkedUpload.cs +++ b/CPF_Cef/Common/ChunkedUpload.cs @@ -547,56 +547,22 @@ namespace AksWebBrowser.Common string parameters = jo3["parameters"].ToString(); JObject jo4 = (JObject)JsonConvert.DeserializeObject(parameters); string base64 = jo4["face_data"].ToString(); - if (Parame.isSM) + IDCardModel iDCardModel = new IDCardModel(); + iDCardModel.Name = jo4["cn_name"].ToString(); + iDCardModel.Sex = jo4["sex"].ToString(); + iDCardModel.Nation = jo4["nation"].ToString(); + iDCardModel.BirthDay = jo4["birth_date"].ToString(); + iDCardModel.Addr = jo4["address"].ToString(); + iDCardModel.Id = jo4["idcard_number"].ToString(); + iDCardModel.Regorg = jo4["deparment"].ToString(); + iDCardModel.StartDate = jo4["validity_begin"].ToString(); + iDCardModel.EndDate = jo4["balidity_end"].ToString(); + iDCardModel.ImageBase64 = "data:image/jpg;base64," + base64; + var OBJ = new { - var faceA = Utils.Base64ByImages(base64); - //开启人脸比对 - LhtCF lht = new LhtCF(); - string stat = lht.LhtCFFace("", faceA); - if (stat == "100") - { - IDCardModel iDCardModel = new IDCardModel(); - iDCardModel.Name = jo4["cn_name"].ToString(); - iDCardModel.Sex = jo4["sex"].ToString(); - iDCardModel.Nation = jo4["nation"].ToString(); - iDCardModel.BirthDay = jo4["birth_date"].ToString(); - iDCardModel.Addr = jo4["address"].ToString(); - iDCardModel.Id = jo4["idcard_number"].ToString(); - iDCardModel.Regorg = jo4["deparment"].ToString(); - iDCardModel.StartDate = jo4["validity_begin"].ToString(); - iDCardModel.EndDate = jo4["balidity_end"].ToString(); - iDCardModel.ImageBase64 = "data:image/jpg;base64," + base64; - var OBJ = new - { - Data = iDCardModel - }; - return JsonConvert.SerializeObject(OBJ); - } - else - { - - return "500"; - } - } - else - { - IDCardModel iDCardModel = new IDCardModel(); - iDCardModel.Name = jo4["cn_name"].ToString(); - iDCardModel.Sex = jo4["sex"].ToString(); - iDCardModel.Nation = jo4["nation"].ToString(); - iDCardModel.BirthDay = jo4["birth_date"].ToString(); - iDCardModel.Addr = jo4["address"].ToString(); - iDCardModel.Id = jo4["idcard_number"].ToString(); - iDCardModel.Regorg = jo4["deparment"].ToString(); - iDCardModel.StartDate = jo4["validity_begin"].ToString(); - iDCardModel.EndDate = jo4["balidity_end"].ToString(); - iDCardModel.ImageBase64 = "data:image/jpg;base64," + base64; - var OBJ = new - { - Data = iDCardModel - }; - return JsonConvert.SerializeObject(OBJ); - } + Data = iDCardModel + }; + return JsonConvert.SerializeObject(OBJ); } else { diff --git a/CPF_Cef/Common/Utils.cs b/CPF_Cef/Common/Utils.cs index 801bcb1..9f3015f 100644 --- a/CPF_Cef/Common/Utils.cs +++ b/CPF_Cef/Common/Utils.cs @@ -159,6 +159,39 @@ namespace AksWebBrowser.Common return Imgpath; } + //base64转图片 + public static string Base64ByImagesPath(string base64, string filename) + { + //生成文件 + string dirpath = Utils.getSystemPaht() + @"/wwwroot/TmpFile"; + if (!Directory.Exists(dirpath)) + { + Directory.CreateDirectory(dirpath); + } + var tempFile = dirpath + $"/{filename}.txt"; + using (StreamWriter sw = new StreamWriter(tempFile)) + { + sw.Write(base64); + sw.Close(); + sw.Dispose(); + } + //生成图片 + string dirpath1 = Utils.getSystemPaht() + @"/wwwroot/TmpFile"; + if (!Directory.Exists(dirpath1)) + { + Directory.CreateDirectory(dirpath1); + } + var Imgpath = dirpath1 + $"/{filename}.jpg"; + string command = $"base64 -d {tempFile} > {Imgpath}"; + MainModel.ShllCommad(command); + //删除图片 + Task.Run(() => + { + File.Delete(tempFile); + }); + return Imgpath; + } + /// /// 文字分段 /// diff --git a/CPF_Cef/FrmMain.cs b/CPF_Cef/FrmMain.cs index c1250c4..5322c6c 100644 --- a/CPF_Cef/FrmMain.cs +++ b/CPF_Cef/FrmMain.cs @@ -18,8 +18,10 @@ namespace AKS.EnterpriseLibrary.WebBrowser { public class FrmMain : Window { - 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() { diff --git a/CPF_Cef/MainModel.cs b/CPF_Cef/MainModel.cs index 0353c0b..4049030 100644 --- a/CPF_Cef/MainModel.cs +++ b/CPF_Cef/MainModel.cs @@ -32,6 +32,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser public class MainModel : CPF.CpfObject { private static List allSockets; + //初始化网络连接 public static void DeviceControllerInit() { @@ -245,19 +246,8 @@ namespace AKS.EnterpriseLibrary.WebBrowser /// public static string IDCardRead(string content) { - try { - - - Task.Run(async () => - { - StartFace(IdcardStr); - }); - @event9.WaitOne(); - - - var param = content.ConvertToAnonymousType(new { code = default(string), @@ -272,24 +262,59 @@ namespace AKS.EnterpriseLibrary.WebBrowser } else { - if (IdcardStr == "500") - { - result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "身份证持有者非本人" + "\"}"; - } - else if (IdcardStr.Contains("HttpClient.Timeout")) + if (IdcardStr.Contains("HttpClient.Timeout")) { result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "身份证读取失败" + "\"}"; } else { - result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":" + IdcardStr + "}"; + if (Parame.isSM) { Task.Run(async () => { - StartFace(IdcardStr); + JObject jo = (JObject)JsonConvert.DeserializeObject(IdcardStr); + string data = jo["Data"].ToString(); + jo = (JObject)JsonConvert.DeserializeObject(data); + string ImageBase64 = jo["ImageBase64"].ToString(); + StartFace(ImageBase64); }); @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\":\"" + "人证合一验证失败." + "\"}"; + } + } + else + { + result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":" + IdcardStr + "}"; } return result; } @@ -1625,7 +1650,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser /// private static string smresults = string.Empty; private static AutoResetEvent @event9 = new AutoResetEvent(false); - private static async void StartFace(string IdcardStr) + private static async void StartFace(string ImageBase64) { try { @@ -1635,10 +1660,11 @@ namespace AKS.EnterpriseLibrary.WebBrowser function = "CF_OpenCamera", show = 1, fx = 200, - fy = 450, - fw = 640, - fh = 480 + fy = 800, + fw = 800, + fh = 600 }; + Task.Delay(1000).Wait(); //打开摄像头 webSocket.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera"); //开始活检 @@ -1647,36 +1673,72 @@ namespace AKS.EnterpriseLibrary.WebBrowser { //关闭摄像头 webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); - //关闭连接 webSocket.Close(); } else if (smresults == "700")//服务端未启动 - { - //关闭连接 - webSocket.Close(); - } + { webSocket.Close(); } else { - JObject jo = (JObject)JsonConvert.DeserializeObject(smresults); string nEventId = jo["nEventId"].ToString(); if (nEventId == "100") { - string faceA = Utils.Base64ByImages(IdcardStr); - string faceB = Utils.Base64ByImages(jo["ImgBase64"].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 + }; //开始人脸比对 - + 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.Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect"); - //关闭摄像头 - webSocket.Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); - //关闭连接 webSocket.Close(); } @event9.Set(); diff --git a/CPF_Cef/Parame.cs b/CPF_Cef/Parame.cs index e9c4cc9..9e36ddf 100644 --- a/CPF_Cef/Parame.cs +++ b/CPF_Cef/Parame.cs @@ -44,9 +44,11 @@ namespace AksWebBrowser //是否开启高拍仪 public static bool isGPY = false; //双目摄像头 - public static string smWebsocket = "ws://192.168.0.234:22226"; + public static string smWebsocket = "ws://127.0.0.1:22226"; //消息推送 public static string messageData { get; set; } + //人脸比对阈值 + public static int score = 65; } public struct Func {