澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:人脸识别Emgucv,调用本地

2019-10-21 作者:www.8455.com   |   浏览(124)

OpenCV

近些日子铺面让做黄金时代款产品!供给要用到人脸识别手艺,稍后一时间本人收拾下思路甚至利用的技艺!

 

OpenCV是由C/C 编写的图像处理库,C#不能够一贯调用,

【百度完善】

OpenCV是二个开源的跨平台的微型计算机视觉库,它的铺排指标时进行进程尽量快,首要关怀实时应用。能够运维在Linux、Windows、Mac OS、Android、IOS、Maemo、FreeBSD、OpenBSD等操作系统上。OpenCV选用C/C 语言开采和行使外还扶助使用C#、Ruby、Java等编制程序语言,同期提供了对Python、MATLAB等语言的接口,完成了图像管理和计量视觉方面包车型客车不菲通用算法。OpenCV包含的函数500三个,覆盖了Computer视觉的多多应用领域,如工厂产品检验、历史学成像、消息安全、客户分界面、录制机标定、立体视觉和机器人、显卡加速等。

 

  工欲善其事,磨刀不误砍柴工。

但是EmguCV是使用C#对openCV实行打包。

  LIBSVM是台大林智仁(Lin Chih-Jen)教授等开采设计的一个简易、易于使用和便捷有效的SVM情势识别与回归的软件包,他不但提供了编写翻译好的可在Windows连串系统的实践文书,还提供了源代码,方便立异、修改以致在别的操作系统上使用;该软件对SVM所波及的参数调度相对少之甚少,提供了比较多的暗中认可参数,利用这么些私下认可参数能够缓慢解决大多主题素材;并提供了相互核算(CrossValidation)的功效。该软件可以消除C-SVM、ν-SVM、ε-SV翼虎和ν-SV安德拉等主题材料,包罗基于风度翩翩对旭日东升算法的多类方式识别难点……

Emgu 介绍

 

一、下载

那就是说问题来讲,EmguCV怎样采用?

  如若你对libsvm还缺乏领悟,建议先浏览下百度百科等对libsvm的介绍~

Emgu CV是将OpenCV使用.NET编程语言(C#)封装成的.NET库,使用Emgu CV就可以在.NET平台上调用OpenCV的功用。

EmguCv简介

  Emgucv学习早先,我们先要搭建好开垦环-Emgucv库、VS开荒平台。

本身那边开拓条件是VS二零一二 Win7

【C# Wrapper 动机】

Emgu历九纹龙度如下:

EmguCV 是.NET 平台下对OpenCV 图像管理库的包装。也便是OpenCV的.NET 版。它运维在.NET 宽容的编制程序语言下调用OpenCV的函数,如C#、VB、VC 、IronPython 等。这些封装库可以在Mono 下编写翻译和在Linux / Mac OS X 上运营。这几天在互联网上有关Emgucv 的篇章不菲,不过由于EmguCv 每一个版本都有涂改一片段函数,版本向下包容做的不是很好,所以相比混乱,。小编的开销遇到为VS2014 EmguCv3.1.0 版本。

  (1)VS开垦平台,个人认为VS二〇一四蛮好用的,比如:自定义窗口布局、更优的代码编辑器、Shared Project 集成、Bower和NPM中的代码智能提示、调节和测量检验Lambdas表明式等。

1、首先供给下载EmguCV ,下载地址:

  插足过贰个品类,使用IDE是VS winform,工具包为EmguCV 2.4.10。大家了然OpenCV第22中学的svm部分是基于libsvm-2.6编写制定的,该版本的libsvm已经能够estimate预测概率了(libsvm首页的change log中有详尽表达),但是OpenCV却扬弃了predictProbability。在切实可行的项目中,借使得以猎取预测可能率信息,那将对巩固识别性有十分的大的扶助。可是,opencv2遗弃了甄别可能率,包含opencv3,小编看源代码的svm部分也是基于libsvm-2.6改动的,也并未有引入predictProbability。

2010年四月 第三个本子开源版本EmguCV 1.1.1公布

EmguCv安装和计划

以此的下载能源能够找度娘,这里提供网盘的下载链接。

下载完结后,实行安装,安装步骤是二货式安装,但要记着友好的装置路径(eg:C:Emguemgucv)

  因此,在EmguCV的ML满足不断的景况下,萌生了四个主见:

二〇〇七年11月 EmguCV 1.2.2 正式发布,实现了从Image和Matrix类中拿走》NET数组O(1)操作,甚至叁个窗体图像展现控件ImageBox。

风度翩翩、去官方网站下载 Emgucv : 

链接: 密码:z4wh

2、需求配置景况变量。

    意气风发是修改OpenCV代码,然后再次CMake获得cvextern.dll;

二零零六年7月 EmugCV 1.3.0业内宣布,改进了繁多bug,新添了Bgra色彩空间,同有时候引进了ZedGraph组件突显直方图,何况对程序集完毕了强签字。

澳门新萄京官方网站 1

  (2)Emgucv库跟OpenCV一样都以开源库,可透过上边地址下载自身索要的本子

开辟本人的微管理器 ==>> 张开高等系统安装==>>展开情况变量==>>在系统变量中找到Path变量==>>在对话框中的文本框中的最终增加EmguCV的设置路线,如本身的安装路线为:C:Emguemgucvbin==>>点击分明,供给时重启Computer生效。

    二是一向找别的的svm库。

二零零六年七月 EmugCV 1.4.0 正式发布,扶持OpenCV 1.1Pre1版本。

 

  

路线须求指向bin目录下。

  首先尝试CMake。像OpenCV那样的大类别,CMake起来实在不便于,更况且是从零早先学CMake。在时刻不容许的尺码下,只得走第二条路。找到libsvmSharp后,笔者受宠若惊。可是,相当的慢小编又再一次失望了,因为实时性供给满足不断(EmguCV自带SVM能够在5ms内到位辨认预测,而libsvmSharp需求500ms)。

二零零六年十月 EmugCV 1.5.0 正式发布,新扩充了机器学习库。

 

澳门新萄京官方网站 2

澳门新萄京官方网站 3

  那是干吗?

2008年八月 EmugCV 2.0.1 正式发布,基于OpenCV 2.0付出

澳门新萄京官方网站 4

本人下载了:libemgucv-windows-universal-3.0.0.2157-0

尖端系统装置

  同样是C#对C 的wrapper,同样都以基于libsvm,同样是对C 所编写翻译的dll的引用,功能竟相差百倍!本着大器晚成颗学习的心,作者调控大器晚成探毕竟……

2009年11月 EmguCV 2.2.0 正式布告,,新添了特点检测,并起首匡助VS 二零零六付出情状。

安装很简短,这里就不说了

二、安装

澳门新萄京官方网站 5

【现有libsvm的C#/.Net版本】

二〇一三年六月 EmguCV 2.2.1 正式公布,新添GPU硬件加快组件。

安装完毕后所获猎取到的目录结构

Emgucv库安装包下载下来是二个.exe文本,双击安装就能够。

碰到变量

  目前,LIBSVM拥有C、Java、Matlab、C#、Ruby、Python、Evoque、Perl、Common LISP、Labview等数十种语言版本。最常使用的是C、Matlab、Java和命令行(c语言编写翻译的工具)的版本。

二零一三年6月 EmguCV 2.3.0 正式宣布,使用tesseract 3.0新扩展OC福特Explorer检查评定,同期进步及修复GPU组件功能。

 澳门新萄京官方网站 6

选料设置路线

澳门新萄京官方网站 7

  首先大家看张libsvm官方网址首页上的截图:

二零一二年5-1月 EmguCV 2.4.X(0,2) 正式宣布,新扩张IOS及Android方面包车型地铁生意版本,同期将GPU组件创立在CUDTIIDA.2版本之上。

 

澳门新萄京官方网站 8

系统变量中的Path变量

澳门新萄京官方网站 9

二〇一二年十月-2015年十月 EmguCV 2.4.9 (Alpha,Beta)宣布,GPU构架不在重视顾客机Nvidia显卡驱动程序,并开始帮助Windows Store App,新扩张CLAHE算法。

差不离介绍下上海体育场地的目录结构,

到下边这一步后,点击安装,就能够依照提醒到位。

澳门新萄京官方网站 10

  上面,大家看看以后libsvm有何C#版本:

2014年12月 EmguCV 2.4.10发布,基于OpenCV 2.4.10开发。

bin :里面有以后建项目所用倒的 dll(动态链接库)

澳门新萄京官方网站 11

Path里面增添EmguCV的设置路线

  1、SVM.NET by Matthewa Johnson

二零一六年二月 Emgu CV 3.0.0 候选版公布,基于OpenCV 3.0.0-rc1本子,新增对Windows Phone8.1、Unity5.0的扶持。

Emgu.CV.Example: 官方给出的一些demo

设置到位后,在PC上转移目录如下:

3、VS2013中配置EmguCV。

  二〇〇八年,耶路撒冷希伯来大学的马特hewa 约翰逊博士将SVM.NET更新到了V2.89,也正是今日的摩登版本。无语未来不FQ竟已经找不到SVM.NET的原生版了。那份神秘感使本人认为,这一个C#本子的libsvm应该是质感最高的。

2016年七月 公布Emgu CV3.0.0,基于OpenCV 3.0.0,将非托管代码合併到二个dll库(cvextern.dll)。新增添对VS 2014的支撑,移除VS 二零零六 的调节和测量检验可视化辅助。

Emgu.CV.Documentation.chm: 官方的交由的认证文书档案加泰罗尼亚语版,

澳门新萄京官方网站 12

新建三个Windows窗体程序==>>增多对C:Emguemgucvbin目录下的对EmguCVd的援用(共4个零件:Emgu.CV.World.dll  ZedGraph.dll  Emgu.CV.UI.GL.dll  Emgu.CV.UI.dll)。

  后人有在V2.89的基础上做一些退换,建议了:SVM.NET with Parallel Optimization。相关描述为:When finding parameters, C and Gamma, in Grid-search algorithm using ParameterSelection.PGrid instead of the original ParameterSelection.Grid will increase the calculation speed.

2014年一月 发表 Emgu CV 3.1.0不再扶助x86上的CUDA,CUDA 7.0版本已经放任了x86协助。

 

三、配置

澳门新萄京官方网站 13

  2、NSVM by Joannes

二零一四年5月 公布 Emgu CV 3.1.0-r16.12,CUDA营造基于CUDA 8.0并扶持最新的NVIDIA设备。

布置情形变量:

 Emgucv的布局相对于Opencv来讲依然比较轻易的。

vs增多4个援引文件

澳门新萄京官方网站 14

前年10月 发表Emgu CV 3.2.0,基于OpenCV 3.2,进级苔丝eract OC奥迪Q7到 4.0-dev版本,何况选择更加好的LSTM -OC瑞虎引擎代替原先的OC奥迪Q5引擎

  1.此Computer(小编的win10)右键属性

(1)配置境况变量

布置进度到此为完毕。

    3年岁月,却只有2下载量,何其惨淡……好啊,或然你也像本人同一主观臆断了。

二〇一七年五月 公布Emgu CV3.3.0 基于OpenCV 3.3,Windows版本使用Visual Studio 2017构建,同一时间将CUDA进级到9.0。

  澳门新萄京官方网站 15

右击 Computer ,选拔属性,接纳高等系统装置 -> 高端 ->遇到变量 ->系统变量:Path选项下,增加:";D:Emguemgucv-windesktop 3.3.0.2824bin",即我们抬高的门路前用分号跟后边隔断。

4、具体代码完成。

3、KMLib(Kernel Machine Library with GPU SVM solver in .Net) by Krzysztof Sopyła

2018年4月 发布EmugCV 3.4.1 基于OpenCV 3.4.1 ,升级CUDA到9.1。

 

(2)配置开拓条件

在Windows窗体上 ,拖贰个ImageBox、三个按键到到窗体上。双击开关,编写Click事件代码

  Key Features

Emug财富地址:

 

在运用Emgucv开辟时,VS工程中,须要在引用中添加Emgucv相关的动态链接库

编写Click事件代码。具体代码如下:

    • .Net implementation
    • Parallel kernel implementation
    • SVM CUDA acceleration – kernels and solver
    • CUDA SVM with sparse data formats: CSR, Ellpack-R, Sliced-Ellpack
    • For non commercial and academic use: Free MIT license when use please cite: Bibtex CUDA SVM CSR

Emgu CV官网:

 澳门新萄京官方网站 16

澳门新萄京官方网站 17

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
namespace WinFrom1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private VideoCapture capture;
private bool isProcess = false;
private void button1_Click(object sender, EventArgs e)
{
if (capture != null)
{
if (isProcess)
{
Application.Idle -= new EventHandler(ProcessFram);
this.startBtn.Text = "Stop";
}
else
{
Application.Idle = new EventHandler(ProcessFram);
this.startBtn.Text = "Start";
}
isProcess = !isProcess;
}
else
{
try
{
capture = new VideoCapture();
}
catch (NullReferenceException expt)
{
MessageBox.Show(expt.Message);
}
}
}
private void ProcessFram(object sender, EventArgs arg)
{
imageBox1.Image = capture.QueryFrame();
}
}
}

  其余,还应该有一点亟待重申的是,它是基于libsvm的java版本转变过来的。也正因如此,小编倍感用起来或者会略带艰难,故并未有选用。

Emug CV 安装文件下载地址:

澳门新萄京官方网站 18

点击浏览,找到Emgucv安装目录的bin目录

5、运维进程中只怕出现的Bug。

4、libsvmSharp by ccerhan

Emgu CV 源码地址:

 

澳门新萄京官方网站 19

a) 点击运转,大概会如下十分:System.TypeInitializationException”类型的未经管理的特别在 Emgu.CV.World.dll 中生出

  选拔它的说辞十分轻易,有一定的下载量(从众心绪又最初生事了!)下载方便,用VS的Nuget package,通过命令“PM> Install-Package LibSVMsharp”即下载到本地。

从官方网站络您能够找到EmguCV的风行版本、基础教程和在线API文书档案。在自身写这篇小说时,EmguCV公布的风靡版本为Emgu.CV-3.4.1,如若从官方网址下载速度相当慢,你可以从本身的网盘下载,地址为::。下载获得的时一个称谓为libemgucv-windesktop-3.4.1.2976.exe的安装程序,安装实现后,在安装目录内容如下图所示:

安插路线: C:Emguemgucv-windesktop 3.1.0.2282binx64(就是您的Emgucv的安装路径) 

挑选上边多个动态库,后续有更眼花缭乱的选用时,再增添任何的。

缓和情势:将EmguCV bin目录下的x64 x86文件拷贝到项目下Debug目录下即可。(笔者本地已调节和测验好,不报该错误了,暂无图片。)

5、libsvm-net by Nicolas Panel

澳门新萄京官方网站 20

 

澳门新萄京官方网站 21

b) 再度运维,继续提醒报错,如下图:

  下载起来同样十一分便于: NuGet package : PM> Install-Package libsvm.net,比起libsvmSharp有越来越高的人气。

在Solution文件夹中有Visual Studio的种类文件,在那之中Example项目包涵了Emgu的源代码和例程,这几个例程包括形状检查测量检验、脸部检验、车牌检查评定、OCQashqai、交通标记检查实验、SU揽胜F性情相称、录像拍卖等特别丰富的演示,具体例程项目如下图:

好啊到此 第一步甘休,

(3)加载Emgu.Cv.UI.dll中的控件

澳门新萄京官方网站 22

【分析libsvmSharp】

澳门新萄京官方网站 23

二、用Emgucv创造三个Hello World 

 【工具】→【接纳工具箱(如图1.14)】→【单击选取工具箱】→【在.NET Framework组件栏中单击浏览】→【选择设置路线下的bin文件夹下的Emgu.CV.UI.dll(如图1.15)】→【单击分明举办加多】→【增多做到在工具箱中就具有选取的工具】。

那会儿意况为贫乏VC redit.exe程序。

  为何libsvmSharp.dll如此低效?

新建项目

 

 澳门新萄京官方网站 24

附链接地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

  在反编写翻译后的源代码中(稍后将介绍如何反编写翻译C#编写翻译出来的dll文件),我们得以看出libsvmSharp所用的数据结构有:

1、 新建三个调节台项目,项目名称设置为德姆o。

澳门新萄京官方网站 25h

澳门新萄京官方网站 26

    1、struct:svm_node、svm_model、svm_problem、svm_parameter;

2、 添加Emgu引用

 (4)例程

redit.exe程序

    2、calss:SVMNode、SVMModel、SVMProblem、SVMParameter。

澳门新萄京官方网站 27澳门新萄京官方网站 28

在VS中新建七个系列,选择Visual C#下的Windows窗体应用程序。

傻蛋式安装改exe程序,供给时重启Computer。

实则,结构体能做的事务,类完全也能做,就像结构体未有存在的化腐朽为神奇。

3、 增添OpenCV库—从安装目录下的libs X86(X64)文件夹中加多OpenCV库:

向Form1窗体中加多三个Pixcture博克斯控件和一个Button控件,如图PixctureBox的SizeMode属性为Zoom

c)再度运营程序。

  并且,能够见见各个的落实中,有不菲“结构体=>类”、“指针=>结构体”、“类=>指针”等如此的类型转变。大家知道,C#要援用C 所编写翻译的dll,用得最多的正是IntPtr这一个数据结构。而libsvmSharp低效的案由,也正在于对指针的拍卖政策选拔不当,它只在急需传指针的时候,硬生生地用Marshal类重新在内部存款和储蓄器中开采当前数据结构大小的区域,并赶回指针,美其名曰convert到指针。这种办法,无论是在时刻上照旧空中上,都有太多没须求的萧条。

澳门新萄京官方网站 29

澳门新萄京官方网站 30

澳门新萄京官方网站 31

  这里我们用libsvm中的svm_predict作为例子来说学。

累积完结后入选它们,然后右击设置器属性,将“生成操作设置为”W无,“复制到输出目录设置为:假设较新则复制。

在开关单击事件中加多如下代码:

能够显得了,哈哈哈哈

  在libsvm.dll(该dll由C 编写翻译得到)中,函数为:

澳门新萄京官方网站 32

private void button1_Click(object sender, EventArgs e)
{
  Image<Bgr, byte> image = new Image<Bgr, byte>(320,240,new Bgr(0,255,255));//创制一张320*240尺寸颜色为香艳的图像
  imageBox1.Image = image;
}

澳门新萄京官方网站:人脸识别Emgucv,调用本地录像头。==>> 恭喜,成功了,能够洗洗睡了。

 double svm_predict(const svm_model *model, const svm_node *x)

迄今,大家就创办了一个方可采用的Emgu项目,在Program.cs中输入以下代码测量检验看是还是不是能常常运作。

澳门新萄京官方网站 33

澳门新萄京官方网站 34

  在libsvmSharp.dll(该dll由C#编写翻译获得)中,大家如此评释它:

static void Main(string[] args)
        {
            //从文件中读取图像
            var mat = new Mat("lena.jpg");
            //创建一个显示窗口
            CvInvoke.NamedWindow("Lena", Emgu.CV.CvEnum.NamedWindowType.AutoSize);
            //显示图像
            CvInvoke.Imshow("Lena", mat);

            //等等按键输入
            CvInvoke.WaitKey(0);
            //销毁显示窗口
            CvInvoke.DestroyWindow("Lena");

            //释放资源
            mat.Dispose();
        }

 

哈哈哈哈

 [DllImport("libsvm.dll", CallingConvention = CallingConvention.Cdecl)]
 public static extern double svm_predict(IntPtr model, IntPtr x);

运营效果:

Image<Bgr, byte>为Emgucv库中的方法,出现上面结果,表明库配置成功。

澳门新萄京官方网站 35

  DllImport时,越多关于C 数据结构到C#数据结构的新闻请读者查阅资料猎取。由上可以预知,IntPtr是个很要紧的数据结构,由它注解的变量实际上是一个指针值(即内部存款和储蓄器地址值)。第贰个参数IntPtr model,须要传入model所在内部存款和储蓄器区域的地点,第1个参数IntPtr x,必要传入特征节点数组所在内存区域的地方。上面,我们看看libsvmSharp是怎么利用这几个函数的:

澳门新萄京官方网站 36

 

1024

 1         public static double Predict(SVMModel model, SVMNode[] x)
 2         {
 3             if (model == null)
 4             {
 5                 throw new ArgumentNullException("model");
 6             }
 7             if (x == null)
 8             {
 9                 throw new ArgumentNullException("x");
10             }
11             IntPtr intPtr = SVMModel.Allocate(model);
12             double result = SVM.Predict(intPtr, x);
13             SVMModel.Free(intPtr);
14             return result;
15         }
16 
17         public static double Predict(IntPtr ptr_model, SVMNode[] x)
18         {
19             if (ptr_model == IntPtr.Zero)
20             {
21                 throw new ArgumentNullException("ptr_model");
22             }
23             if (x == null)
24             {
25                 throw new ArgumentNullException("x");
26             }
27             List<SVMNode> list = (from a in x
28             select a.Clone()).ToList<SVMNode>();
29             list.Add(new SVMNode(-1, 0.0));
30             IntPtr intPtr = SVMNode.Allocate(list.ToArray());
31             double result = libsvm.svm_predict(ptr_model, intPtr);
32             SVMNode.Free(intPtr);
33             return result;
34         }

作者:潘圣国

-----于20171024晚,哦,,,,不,,,不,,,不  已经25号了,那么些猿节就像此呢。

  留意的您有未有觉察怎么难点?看不懂?毕竟本身是以偏概全。不过,请看第11行,每回调用都要重复给model分配内部存款和储蓄器哦!再如,第27、28、29、30行,在熟习C 的人看来,that's what?参数字传送进来的可不是数组名吗,干嘛如此冥思苦想?内部存款和储蓄器不会被玩坏吗?

出处:

  风姿罗曼蒂克切都以因为C#有指针,但不是特别大家所驾驭的指针。C#平素不像Java同样完全撤除指针,但为了代码安全思索而降低指针。C#是面向对象的言语,里面其余风姿浪漫种数据结构都不曾指针那蒸蒸日上性能,除非您自个儿在定义数据结构时,将指针作为成员变量。大家所熟谙的EmguCV正是这么完成对OpenCV的wrapper的。

本文版权归作者全体,迎接转发,但未经作者同意必须保留此段注解,且在作品页面鲜明地方给出原来的小说连接。好的能源我们一齐享受,共同提升。

【开始libsvm的C# Wrapper之旅】

  很好,大家能够步向正题了。笔者将以wrapper libsvm为例,分步骤批注整个进程。读者能够触类旁通,希望本文能够帮助您加深你对跨语言编程的明亮。

  1.wrapper第一步(准备)

  获取你要wrapper的dll(由C 编写翻译得到),最棒有源代码,当然有仿照效法手册也能够,可是风流洒脱旦除去dll的名字,对该dll一无所知,那大概就不可能了。

  安装C#的dll反编写翻译工具,这里推荐ILSpy。为何要设置?比起和睦乌黑中追寻,假诺有能够参谋借鉴的能源,满不在乎是多么缺憾的生气勃勃件事啊。EmguCV真的称得上wrapper中的优秀。

  1. wrapper第二步(DllImport)

  首先,VS新建C#工程,项目项目选项类库,那样结尾生成设计方案后,便得以在bin/Debug目录下获得实用的dll文件了。小编将品种命名字为libsvmSharpCyc。

  其次,增添须求wrapper的C dll文件。右键单击解决方案财富管理器中的libsvmSharpCyc,然后增添现成项,把libsvm.dll增添进项目。

  接着,新建类,用于DllImport。作者建的是LsInvoke.cs,能够像下图所示这样,把想要使用的函数方法给Import进来:

澳门新萄京官方网站 37

  该进度中,DllImport要如何行使,感兴趣的读者可自动学习,这里供给注意的是C 函数中的数据结构到C#中的数据结构是有酷炫关系的,下边附上一张dll援用常用转变表:

            C              C#
        =====================================
        WORD              ushort
        DWORD             uint
        UCHAR             int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte 
        UCHAR*            string/IntPtr
        unsigned char*    [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
        char*             string
        LPCTSTR           string
        LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string
        long              int
        ulong             uint
        Handle            IntPtr
        HWND              IntPtr
        void*             IntPtr
        int               int
        int*              ref int
        *int              IntPtr
        unsigned int      uint
        COLORREF          uint

3、wrapper第三步(数据结构)

  这一步是非常根本的一步,在C#中新建数据结构,应当要与C 中的数据结构相平等,不然际遇不可能预料的主题材料。

  前文已经轻巧地介绍过libsvm的数据结构了。这里再一次一下:

 1 struct svm_node
 2 {
 3     int index;
 4     double value;
 5 };
 6 
 7 struct svm_problem
 8 {
 9     int l;
10     double *y;
11     struct svm_node **x;
12 };
13 
14 enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR };    /* svm_type */
15 enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */
16 
17 struct svm_parameter
18 {
19     int svm_type;
20     int kernel_type;
21     int degree;    /* for poly */
22     double gamma;    /* for poly/rbf/sigmoid */
23     double coef0;    /* for poly/sigmoid */
24 
25     /* these are for training only */
26     double cache_size; /* in MB */
27     double eps;    /* stopping criteria */
28     double C;    /* for C_SVC, EPSILON_SVR and NU_SVR */
29     int nr_weight;        /* for C_SVC */
30     int *weight_label;    /* for C_SVC */
31     double* weight;        /* for C_SVC */
32     double nu;    /* for NU_SVC, ONE_CLASS, and NU_SVR */
33     double p;    /* for EPSILON_SVR */
34     int shrinking;    /* use the shrinking heuristics */
35     int probability; /* do probability estimates */
36 };
37 
38 //
39 // svm_model
40 // 
41 struct svm_model
42 {
43     struct svm_parameter param;    /* parameter */
44     int nr_class;        /* number of classes, = 2 in regression/one class svm */
45     int l;            /* total #SV */
46     struct svm_node **SV;        /* SVs (SV[l]) */
47     double **sv_coef;    /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */
48     double *rho;        /* constants in decision functions (rho[k*(k-1)/2]) */
49     double *probA;        /* pariwise probability information */
50     double *probB;
51     int *sv_indices;        /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */
52 
53     /* for classification only */
54 
55     int *label;        /* label of each class (label[k]) */
56     int *nSV;        /* number of SVs for each class (nSV[k]) */
57                 /* nSV[0]   nSV[1]   ...   nSV[k-1] = l */
58     /* XXX */
59     int free_sv;        /* 1 if svm_model is created by svm_load_model*/
60                 /* 0 if svm_model is created by svm_train */
61 };

  对应地,我们在C#中创设数据结构:

    public struct svm_node
    {
        /// <summary>
        /// 索引
        /// </summary>
        public int index;

        /// <summary>
        /// 值
        /// </summary>
        public double value;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="i"></param>
        /// <param name="v"></param>
        public svm_node(int i,double v)
        {
            this.index = i;
            this.value = v;
        }
        public bool Equals(svm_node x)
        {
            return this.index.Equals(x.index) && this.value.Equals(x.value);
        }
    }
    public struct svm_problem
    {
        /// <summary>
        /// 支持向量个数
        /// </summary>
        public int l;

        /// <summary>
        /// 标签值
        /// </summary>
        public IntPtr y;

        /// <summary>
        /// 节点情况
        /// </summary>
        public IntPtr x;
    }
    ……

  也许有读者会问,结构体你加构造函数和任何函数干嘛?那件事实上是为着以往好简化代码。不然,每趟对象创设于赋值分开操作有一些劳顿。

  实行到以往,大家只是完毕了数据结构搭建的一小部分,下边是从EmguCV中学习到的杰出部分!将在下篇作介绍~

本文由澳门新萄京官方网站发布于www.8455.com,转载请注明出处:澳门新萄京官方网站:人脸识别Emgucv,调用本地

关键词: