人脸检测哪家强?百度、腾讯、旷视大比拼(1)人脸检测抽象类定义

同系列文章

/* ----------------------------------------------------------
 * 文件名称: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;
    }
}

Comments are closed.