请允许我大言不惭,叫做教程,特希望各位能指正。哦,我用的是vs2017。使用虹软技术
一、准备工作
1.创建项目
2.添加EMGU.CV包
3.复制虹软的dll到项目
,并设属性“复制到输出目录”为“如果较新则复制
准备工作到此结束,按F7切换到代码,然后进入第二步。
二、代码
using Emgu.CV;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ArcFace2Demo
{
public partial class Form1 : Form
{
#region ArcFaceConst
const uint ASF_DETECT_MODE_VIDEO = 0x00000000; //Video模式,一般用于多帧连续检测
const uint ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF; //Image模式,一般用于静态图的单次检测
const uint ASF_NONE = 0x00000000;
const uint ASF_FACE_DETECT = 0x00000001; //此处detect可以是tracking或者detection两个引擎之一,具体的选择由detect mode 确定
const uint ASF_FACERECOGNITION = 0x00000004;
const uint ASF_AGE = 0x00000008;
const uint ASF_GENDER = 0x00000010;
const uint ASF_FACE3DANGLE = 0x00000020;
/// <summary>
/// 结构ASF_FaceRect的长度
/// 32位程序是16,64位程序需要改为32
/// </summary>
const int SizeOfASF_FaceRect = 16;
#endregion
#region ArceDataStructure
/// <summary>
/// 人脸在图片中的位置
/// </summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ASF_FaceRect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public Rectangle GetRectangle()
{
return new Rectangle(Left, Top, Right - Left, Bottom - Top);
}
}
/// <summary>
/// 多人脸信息
/// </summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ASF_MultiFaceInfo
{
public IntPtr PFaceRect;
public IntPtr PFaceOrient;
[MarshalAs(UnmanagedType.I4)]
public int FaceNum;
}
/// <summary>
/// 单人脸信息
/// </summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ASF_SingleFaceInfo
{
public ASF_FaceRect FaceRect;
public int FaceOrient;
}
/// <summary>
/// 人脸特征
/// </summary>
[StructLayout(LayoutKind.Sequential)]
internal struct ASF_FaceFeature
{
public IntPtr PFeature;
[MarshalAs(UnmanagedType.I4)]
public int FeatureSize;
}
#endregion
#region ArcWrapper
/// <summary>
/// 激活SDK
/// </summary>
/// <param name="appId"></param>
/// <param name="sdkKey"></param>
/// <returns>0:激活成功,0x16002表示已经激活</returns>
[DllImport("libarcsoft_face_engine.dll", EntryPoint = "ASFActivation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern int ASFActivation(string appId, string sdkKey);
/// <summary>
/// 初始化引擎
/// </summary>
/// <param name="detectMode">long会返回scale错误0x16004</param>
/// <p