Browse Source

可使用

master
胡超1 1 year ago
parent
commit
35a3143b79
  1. 9
      CPF_Cef/Common/Log.cs
  2. 31
      CPF_Cef/Common/Utils.cs
  3. 26
      CPF_Cef/Devices/IDCard.cs
  4. 107
      CPF_Cef/Devices/LhtCF.cs
  5. 71
      CPF_Cef/MainModel.cs

9
CPF_Cef/Common/Log.cs

@ -26,7 +26,7 @@ namespace AKSWebBrowser.Commen
{ {
streamWriter = !File.Exists(directPath) ? File.CreateText(directPath) : File.AppendText(directPath); streamWriter = !File.Exists(directPath) ? File.CreateText(directPath) : File.AppendText(directPath);
} }
else if (streamWriter != null)
{ {
streamWriter.WriteLine("***********************************************************************"); streamWriter.WriteLine("***********************************************************************");
streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss")); streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
@ -68,10 +68,13 @@ namespace AKSWebBrowser.Commen
{ {
try { streamWriter = !File.Exists(directPath) ? File.CreateText(directPath) : File.AppendText(directPath); } catch { } finally { } try { streamWriter = !File.Exists(directPath) ? File.CreateText(directPath) : File.AppendText(directPath); } catch { } finally { }
} }
if (streamWriter != null)
{
streamWriter.WriteLine("***********************************************************************"); streamWriter.WriteLine("***********************************************************************");
streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss")); streamWriter.WriteLine(DateTime.Now.ToString("HH:mm:ss"));
streamWriter.WriteLine("输出信息:信息"); streamWriter.WriteLine("输出信息:Info信息");
streamWriter.WriteLine("信息:\r\n" + message); streamWriter.WriteLine("Info信息:\r\n" + message);
}
} }
catch { } catch { }
finally finally

31
CPF_Cef/Common/Utils.cs

@ -2,6 +2,7 @@
using CPF.Controls; using CPF.Controls;
using System; using System;
using System.Drawing; using System.Drawing;
using System.Globalization;
using System.IO; using System.IO;
namespace AksWebBrowser.Common namespace AksWebBrowser.Common
@ -12,7 +13,8 @@ namespace AksWebBrowser.Common
/// 消息弹框 /// 消息弹框
/// </summary> /// </summary>
/// <param name="mes"></param> /// <param name="mes"></param>
public static void MessagesBox(string mes) { public static void MessagesBox(string mes)
{
MessageBox.ShowSync(mes); MessageBox.ShowSync(mes);
} }
@ -53,5 +55,32 @@ namespace AksWebBrowser.Common
File.Delete(file); File.Delete(file);
} }
} }
/// <summary>
/// 获取运行路径
/// </summary>
/// <returns></returns>
public static string getSystemPaht()
{
string dirpath = AppDomain.CurrentDomain.BaseDirectory;
string[] array = dirpath.Split("/");
int o = 0;
foreach (string file in array)
{
if (file.Contains("aks"))
{
o = o + 1;
}
}
if (o == 0)
{
dirpath = dirpath + "/aks/aks";
}
else if (o == 1)
{
dirpath = dirpath + "/aks";
}
return dirpath;
}
} }
} }

26
CPF_Cef/Devices/IDCard.cs

@ -3,7 +3,10 @@ using AKSWebBrowser.Commen;
using CPF.Linux; using CPF.Linux;
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Security.Cryptography; using System.Security.Cryptography;
@ -52,16 +55,31 @@ namespace AksWebBrowser.Devices
status = LibClass.ReadIDCardBaseMsg(Convert.ToInt32(icdev), 1, CHMsg, ref cLen, PHMsg, ref pLen, FPMsg, ref fLen); status = LibClass.ReadIDCardBaseMsg(Convert.ToInt32(icdev), 1, CHMsg, ref cLen, PHMsg, ref pLen, FPMsg, ref fLen);
if (status == 0) if (status == 0)
{ {
//获取图片 ////生成base64
byte[] FileName = new byte[65536]; byte[] FileName = new byte[65536];
status = LibClass.ParseIDCardPic(PHMsg, 1024, 3, FileName); status = LibClass.ParseIDCardPic(PHMsg, 1024, 3, FileName);
//string time = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
//string dirpath = Utils.getSystemPaht() + @"/wwwroot/Face";
//if (!Directory.Exists(dirpath))
//{
// Directory.CreateDirectory(dirpath);
//}
//Log.Info(dirpath);
//var tempFile = dirpath + "/" + time + ".bmp";
////生成图片
//LibClass.ParseIDCardPic(PHMsg, 1024, 2, Encoding.Default.GetBytes(tempFile));
//byte[] byteArray = File.ReadAllBytes(tempFile);
//string base64String = Convert.ToBase64String(byteArray);
if (status == 0) if (status == 0)
{ {
string txt = Encoding.UTF8.GetString(FileName); string txt = Encoding.UTF8.GetString(FileName);
iDCardModel.ImageBase64 = "data:image/jpg;base64," + txt.Substring(0, (txt.IndexOf("=") + 1)); iDCardModel.ImageBase64 = "data:image/jpg;base64," + txt.Substring(0, (txt.IndexOf("=") + 1));
//开启人脸比对 ////开启人脸比对
string stat = LhtCF.LhtCFFace(code, txt); //LhtCF lht = new LhtCF();
if (stat == "0") //string stat = lht.LhtCFFace(code, tempFile);
if (true)
{ {
byte[] sCHMsg = new byte[520]; byte[] sCHMsg = new byte[520];
int itype = 0; int itype = 0;

107
CPF_Cef/Devices/LhtCF.cs

@ -1,4 +1,5 @@
using AKSWebBrowser.Commen; using AksWebBrowser.Common;
using AKSWebBrowser.Commen;
using CPF.Linux; using CPF.Linux;
using CPF.Mac.CoreGraphics; using CPF.Mac.CoreGraphics;
using CPF.Windows; using CPF.Windows;
@ -15,20 +16,31 @@ namespace AksWebBrowser.Devices
{ {
public class LhtCF public class LhtCF
{ {
public static string face = string.Empty; public static string pathfile = string.Empty;
public LhtCF() { } libLhtCFs.DetectCallBack pDetectCallBack = null;
private delegate int DetectCallBackDelegate(int nResultID);
public LhtCF()
{
//设置检测回调
Log.Info("设置检测回调");
if (pDetectCallBack == null)
{
pDetectCallBack = new libLhtCFs.DetectCallBack(DetectCallBackPro);
libLhtCFs.CF_SetDetectCallBack(pDetectCallBack, IntPtr.Zero); //设置回调
}
}
/// <summary> /// <summary>
/// 人脸比对 /// 人脸比对
/// </summary> /// </summary>
/// <param name="code"></param> /// <param name="code"></param>
/// <returns></returns> /// <returns></returns>
public static string LhtCFFace(string code, string _face) public string LhtCFFace(string code, string _pathfile)
{ {
int status = -1; int status = -1;
try try
{ {
face = _face; pathfile = _pathfile;
status = libLhtCFs.CF_Init(); status = libLhtCFs.CF_Init();
if (status == 0) if (status == 0)
{ {
@ -41,61 +53,88 @@ namespace AksWebBrowser.Devices
status = libLhtCFs.CF_StartLiveDetectEx(10000); status = libLhtCFs.CF_StartLiveDetectEx(10000);
if (status == 0) if (status == 0)
{ {
//status = libLhtCFs.SetCamADataCallbackEx(GetMjpegStream);
//Log.Info("设置回调:" + status);
string time = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); }
string dirpath = System.IO.Directory.GetCurrentDirectory(); //关闭视频预览窗口
string[] array = dirpath.Split("/"); //Task.Run(() => { libLhtCFs.CF_CloseWindow(0); });
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0); }
if (groupCount.Count() == 1) //关闭摄像头
//Task.Run(() => { libLhtCFs.CF_CloseCamera(); });
}
}
}
catch (Exception ex)
{ {
dirpath = dirpath + "/aks"; ////关闭视频预览窗口
//Task.Run(() => { libLhtCFs.CF_CloseWindow(0); });
////关闭摄像头
//Task.Run(() => { libLhtCFs.CF_CloseCamera(); });
Log.Info("双目摄像头采集人脸异常:" + ex.Message);
}
return status.ToString();
} }
else if (groupCount.Count() == 0)
//检测回调函数
public void DetectCallBackPro(int nResultID, IntPtr lpParam)
{
DetectCallBackDelegate myDelegate = (message) =>
{ {
dirpath = dirpath + "/aks/aks"; Console.WriteLine($"Hello, {message}!");
return 0; // 返回值
};
//new DetectCallBackDelegate(DetectCallBackResultf, nResultID);
//Task.Run(new DetectCallBackDelegate(DetectCallBackResult), nResultID);
} }
dirpath = dirpath + @"/wwwroot/Face"; public int DetectCallBackResult(int nResultID)
{
Log.Info("检测回调函数:" + nResultID);
if (nResultID == 100)
{
string time = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = Utils.getSystemPaht() + @"/wwwroot/Face";
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {
Directory.CreateDirectory(dirpath); Directory.CreateDirectory(dirpath);
} }
Log.Info(dirpath);
var tempFile = dirpath + "/" + time + ".jpg"; var tempFile = dirpath + "/" + time + ".jpg";
int status = libLhtCFs.CF_GetImage(0, Encoding.Default.GetBytes(tempFile));
Log.Info("人脸路径:" + tempFile); Log.Info("人脸路径:" + tempFile);
status = libLhtCFs.CF_GetImage(0, Encoding.Default.GetBytes(tempFile)); byte[] faceA = File.ReadAllBytes(pathfile);
Log.Info("获取人脸:" + status); Log.Info("身份证图片路径:" + pathfile);
} byte[] faceB = File.ReadAllBytes(tempFile);
//关闭视频预览窗口 int score = 0;
Task.Run(() => { libLhtCFs.CF_CloseWindow(0); }); status = libLhtCFs.CF_FaceCompare(faceA, faceB, ref score);
} Log.Info("人脸比对:" + status);
//关闭摄像头 Log.Info("人脸值:" + score);
Task.Run(() => { libLhtCFs.CF_CloseCamera(); }); if (score > 60 && status == 0)
} {
} status = 0;
} }
catch (Exception ex) else
{ {
status = -1;
}
//关闭视频预览窗口 //关闭视频预览窗口
Task.Run(() => { libLhtCFs.CF_CloseWindow(0); }); Task.Run(() => { libLhtCFs.CF_CloseWindow(0); });
//关闭摄像头 //关闭摄像头
Task.Run(() => { libLhtCFs.CF_CloseCamera(); }); Task.Run(() => { libLhtCFs.CF_CloseCamera(); });
Log.Info("双目摄像头采集人脸异常:" + ex.Message);
} }
return status.ToString(); return 0;
} }
} }
class libLhtCFs class libLhtCFs
{ {
// 检测回调函数定义 // 检测回调函数定义
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)] [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void DetectCallBack(int nEventId, IntPtr lpContext); public delegate void DetectCallBack(int nEventId, IntPtr lpContext);
//RGB数据回调函数定义 //RGB数据回调函数定义
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)] [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void GetVideoStream(byte[] rgbData, int width, int height); public delegate void GetVideoStream(IntPtr buf, int width, int height);
//mjpeg数据回调函数定义 //mjpeg数据回调函数定义
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)] [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.Cdecl)]
@ -162,7 +201,7 @@ namespace AksWebBrowser.Devices
public extern static int CF_GetImage(int nImageType, byte[] FilePath); public extern static int CF_GetImage(int nImageType, byte[] FilePath);
//人脸比对 //人脸比对
[DllImport("LhtCF.dll", CallingConvention = CallingConvention.Cdecl)] [DllImport("libLhtCF", CallingConvention = CallingConvention.Cdecl)]
public extern static int CF_FaceCompare(byte[] picPathA, byte[] picPathB, ref int score); public extern static int CF_FaceCompare(byte[] picPathA, byte[] picPathB, ref int score);
//创建视频预览窗口 //创建视频预览窗口

71
CPF_Cef/MainModel.cs

@ -35,14 +35,15 @@ namespace AKS.EnterpriseLibrary.WebBrowser
SAEA.WebSocket.WSServer ws = new SAEA.WebSocket.WSServer(19983); SAEA.WebSocket.WSServer ws = new SAEA.WebSocket.WSServer(19983);
ws.OnConnected += (s) => ws.OnConnected += (s) =>
{ {
lit.Add(s.ToString());
string result = "{\"keycode\":\"" + "" + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":\"连接成功\"}"; string result = "{\"keycode\":\"" + "" + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":\"连接成功\"}";
byte[] bytes = SerializeContent(result); byte[] bytes = SerializeContent(result);
ws.Reply(s.ToString(), new SAEA.WebSocket.Model.WSProtocal(SAEA.WebSocket.Type.WSProtocalType.Text, bytes)); ws.Reply(s.ToString(), new SAEA.WebSocket.Model.WSProtocal(SAEA.WebSocket.Type.WSProtocalType.Text, bytes));
Log.Error("请求连接" + s.ToString());
}; };
ws.OnMessage += (s, e) => ws.OnMessage += (s, e) =>
{ {
string content = Encoding.UTF8.GetString(e.Content); string content = Encoding.UTF8.GetString(e.Content);
Log.Error("收到请求:" + s.ToString() + " 请求参数:" + content);
//读取参数 //读取参数
if (content != "ping" && !string.IsNullOrEmpty(content)) if (content != "ping" && !string.IsNullOrEmpty(content))
{ {
@ -149,6 +150,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{ {
result = "{\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}"; result = "{\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}";
} }
Log.Error("答复请求者:" + s.ToString() + " 返回数据:" + result);
//答复请求者(处理完请求后在些答复) //答复请求者(处理完请求后在些答复)
byte[] bytes = SerializeContent(result); byte[] bytes = SerializeContent(result);
ws.Reply(s.ToString(), new SAEA.WebSocket.Model.WSProtocal(SAEA.WebSocket.Type.WSProtocalType.Text, bytes)); ws.Reply(s.ToString(), new SAEA.WebSocket.Model.WSProtocal(SAEA.WebSocket.Type.WSProtocalType.Text, bytes));
@ -171,7 +173,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{ {
try try
{ {
lit.RemoveAll(n => n == s); Log.Error("断开连接" + s.ToString());
} }
catch { } catch { }
finally { } finally { }
@ -664,18 +666,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
string time = DateTime.Now.ToString( string time = DateTime.Now.ToString(
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = System.IO.Directory.GetCurrentDirectory(); string dirpath = Utils.getSystemPaht() + @"/wwwroot/PrintFile";
string[] array = dirpath.Split("/");
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0);
if (groupCount.Count() == 1)
{
dirpath = dirpath + "/aks";
}
else if (groupCount.Count() == 0)
{
dirpath = dirpath + "/aks/aks";
}
dirpath = dirpath + @"/wwwroot/PrintFile";
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {
Directory.CreateDirectory(dirpath); Directory.CreateDirectory(dirpath);
@ -734,18 +725,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
string time = DateTime.Now.ToString( string time = DateTime.Now.ToString(
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = System.IO.Directory.GetCurrentDirectory(); string dirpath = Utils.getSystemPaht() + @"/wwwroot/PrintFile";
string[] array = dirpath.Split("/");
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0);
if (groupCount.Count() == 1)
{
dirpath = dirpath + "/aks";
}
else if (groupCount.Count() == 0)
{
dirpath = dirpath + "/aks/aks";
}
dirpath = dirpath + @"/wwwroot/PrintFile";
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {
Directory.CreateDirectory(dirpath); Directory.CreateDirectory(dirpath);
@ -832,18 +812,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
string time = DateTime.Now.ToString( string time = DateTime.Now.ToString(
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = System.IO.Directory.GetCurrentDirectory(); string dirpath = Utils.getSystemPaht() + @"/wwwroot/WaveOutFile";
string[] array = dirpath.Split("/");
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0);
if (groupCount.Count() == 1)
{
dirpath = dirpath + "/aks";
}
else if (groupCount.Count() == 0)
{
dirpath = dirpath + "/aks/aks";
}
dirpath = dirpath + @"/wwwroot/WaveOutFile";
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {
Directory.CreateDirectory(dirpath); Directory.CreateDirectory(dirpath);
@ -1288,18 +1257,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
} }
string time = DateTime.Now.ToString( string time = DateTime.Now.ToString(
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = System.IO.Directory.GetCurrentDirectory(); string dirpath = Utils.getSystemPaht() + @"/wwwroot/Record";
string[] array = dirpath.Split("/");
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0);
if (groupCount.Count() == 1)
{
dirpath = dirpath + "/aks";
}
else if (groupCount.Count() == 0)
{
dirpath = dirpath + "/aks/aks";
}
dirpath = dirpath + @"/wwwroot/Record";
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {
Directory.CreateDirectory(dirpath); Directory.CreateDirectory(dirpath);
@ -1394,18 +1352,7 @@ namespace AKS.EnterpriseLibrary.WebBrowser
{ {
string time = DateTime.Now.ToString( string time = DateTime.Now.ToString(
"yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
string dirpath = System.IO.Directory.GetCurrentDirectory(); string dirpath = Utils.getSystemPaht() + @"/wwwroot/WavFile";
string[] array = dirpath.Split("/");
var groupCount = array.GroupBy(x => x).Select(group => new { Element = group.Key, Count = group.Count() }).Where(x => x.Count > 0);
if (groupCount.Count() == 1)
{
dirpath = dirpath + "/aks";
}
else if (groupCount.Count() == 0)
{
dirpath = dirpath + "/aks/aks";
}
dirpath = dirpath + @"/wwwroot/WavFile";
// Log.Info(dirpath); // Log.Info(dirpath);
if (!Directory.Exists(dirpath)) if (!Directory.Exists(dirpath))
{ {

Loading…
Cancel
Save