如何用CaffeModel实现OpenCVSharp识别?
摘要:前言 今天这个例子用来学习一下在OpenCVSharp中如何使用caffemodel。 首先需要了解一下Caffe是什么? Caffe是一个快速的开源深度学习框架。 GitHub地址:https:github.comBVLCcaff
前言
今天这个例子用来学习一下在OpenCVSharp中如何使用caffemodel。
首先需要了解一下Caffe是什么?
Caffe是一个快速的开源深度学习框架。
GitHub地址:https://github.com/BVLC/caffe
Caffe 是一个以表达性、速度和模块化为核心设计的深度学习框架。它由伯克利人工智能研究(BAIR)/伯克利视觉与学习中心(BVLC)及社区贡献者共同开发。
caffemodel在这里指的就是使用这个框架训练的模型。
先来看下这个Demo的效果:
实践
在使用这个模型之前需要先了解这三个东西:
一个.prototxt文件、一个caffemodel文件与一个txt文件。
caffmodl下载地址:http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel
另外两个文件在OpencvSharp仓库中有了,地址:https://github.com/shimat/opencvsharp_samples/tree/master/SampleBase/Data/Text
来看看.prototxt文件是什么?
打开之后是这样的:
.prototxt文件是一种文本格式的模型配置文件,主要用于Caffe深度学习框架。它用于定义神经网络结构与定义训练配置。
synset_words.txt打开是这样的:
synset_words.txt 是一个 标签文件。它包含了ImageNet数据集中所有 1000 个类别的人类可读的名称。
在OpenCVSharp加载CaffeModel就一行代码:
using var net = CvDnn.ReadNetFromCaffe(ProtoTxt, CaffeModel);
OpenCVSharp封装了一个CvDnn静态类,现在看看这个函数签名:
public static Net? ReadNetFromCaffe(string prototxt, string? caffeModel = null)
{
return Net.ReadNetFromCaffe(prototxt, caffeModel);
}
public static Net? ReadNetFromCaffe(string prototxt, string? caffeModel = null)
{
if (prototxt is null)
throw new ArgumentNullException(nameof(prototxt));
NativeMethods.HandleException(
NativeMethods.dnn_readNetFromCaffe(prototxt, caffeModel, out var p));
return (p == IntPtr.Zero) ? null : new Net(p);
}
OpenCVSharp中创建了一个Net类用于创建和操作复杂的人工神经网络。
在C#中这样写就会调用OpenCV对应的C++接口,要注意OpenCVSharp并不是OpenCV的C#实现,而是充当了C#与C++代码之间的一层桥接。
现在就是看怎么使用了。
