同系列文章
/* ---------------------------------------------------------- * 文件名称:FrCore.cs * 作者:秦建辉 * * 微信:splashcn * * 博客:http://www.firstsolver.com/wordpress/ * * 开发环境: * Visual Studio V2017 * .NET Framework 4 * * 版本历史: * V1.0 2018年03月27日 * 人脸检测抽象类定义 ------------------------------------------------------------ */ using System; using System.Text; using System.Text.RegularExpressions; namespace Com.FirstSolver.FR { /// <summary> /// 人脸检测接口 /// </summary> public abstract class FrCore : IDisposable { /// <summary> /// 厂家名称 /// </summary> public abstract string Company { get; } /// <summary> /// 作者名称 /// </summary> public virtual string Author { get { return "秦建辉"; } } /// <summary> /// 错误描述 /// </summary> public string ErrorMessage { get; protected set; } /// <summary> /// 初始化接口 /// </summary> /// <returns> /// 0:初始化接口成功 /// 其它:错误编号 /// </returns> public abstract int Initialize(); /// <summary> /// 关闭接口 /// </summary> public virtual void Close() { Dispose(); } /// <summary> /// 人脸检测 /// </summary> /// <param name="image">人脸图像数据</param> /// <param name="faceset">输出:人脸特征信息集合</param> /// <returns> /// 0:操作成功 /// 其它:错误编号 /// </returns> public abstract int Detect(byte[] image, out FFI[] faceset); /// <summary> /// 释放资源 /// </summary> public virtual void Dispose() { ErrorMessage = null; } /// <summary> /// 网址编码 /// </summary> /// <param name="str">要编码的字符串</param> /// <param name="e">字符编码方案</param> /// <param name="uppercase">是否输出大写字母</param> /// <returns>编码字符串</returns> public static string UrlEncode(string str, Encoding e, bool uppercase = false) { if (uppercase) { return Regex.Replace(System.Web.HttpUtility.UrlEncode(str, e), @"%[0-9a-f]{2}", m => m.Value.ToUpper()); } else { return System.Web.HttpUtility.UrlEncode(str, e); } } /// <summary> /// 将字节数组转换为16进制编码字符串 /// </summary> /// <param name="buffer">要转换的字节数组</param> /// <param name="uppercase">是否输出大写字母</param> /// <returns>16进制编码字符串</returns> public static string ToHexString(byte[] buffer, bool uppercase = false) { StringBuilder sb = new StringBuilder(); if (uppercase) { foreach (byte b in buffer) sb.Append(b.ToString("X2")); } else { foreach (byte b in buffer) sb.Append(b.ToString("x2")); } return sb.ToString(); } } /// <summary> /// 人脸特征信息 /// </summary> public class FFI { /// <summary> /// 人脸框位置 /// </summary> public System.Drawing.Rectangle Region; /// <summary> /// 人脸关键点集合 /// </summary> public System.Drawing.Point[] CriticalPoints; /// <summary> /// 人脸特征点集合 /// </summary> public System.Drawing.Point[] FeaturePoints; } }