"你好"
在我用C#编写的一个人脸识别程序中,我在打开程序时得到一个错误。
论坛1代码:
using AForge.Video;
using AForge.Video.DirectShow;
using Emgu.CV;
using Emgu.CV.Structure;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace FaceApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
FilterInfoCollection filter;
VideoCaptureDevice device;
CascadeClassifier cascadeClassifier = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
private void Form1_Load(object sender, EventArgs e)
{
filter = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach (FilterInfo device in filter)
comboBox1.Items.Add(device.Name);
comboBox1.SelectedIndex = 0;
device = new VideoCaptureDevice();
}
private void button1_Click(object sender, EventArgs e)
{
device = new VideoCaptureDevice(filter[comboBox1.SelectedIndex].MonikerString);
device.NewFrame += Device_NewFrame;
device.Start();
}
private void Device_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
Image<Bgr, byte> grayImage = new Image<Bgr, byte>(bitmap);
Rectangle[] rectangles = cascadeClassifier.DetectMultiScale(grayImage, 1.2, 1);
foreach (Rectangle rectangle in rectangles)
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
using (Pen pen = new Pen(Color.Red, 1))
{
graphics.DrawRectangle(pen, rectangle);
}
}
}
pictureBox1.Image = bitmap;
}
private void button2_Click(object sender, EventArgs e)
{
if (device.IsRunning)
device.Stop();
}
}
}
程序失败的代码行:
CascadeClassifier cascadeClassifier = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
错误:未处理异常
Emgu.CV.Util.CvException: 'OpenCV: cv::XMLParser::parse'
我在网上搜索了一下这个错误,但没有找到解决办法。
我在下面写的代码也不起作用。
private static readonly CascadeClassifier Classifier = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
// or
private readonly CascadeClassifier Classifier = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
我怎样才能解决这个问题?
2条答案
按热度按时间ru9i0ody1#
我知道我的答案是晚了,但它将有助于那些谁面临同样的问题。我面临同样的问题,这是由于xml文件。我下载了haarcascade从EmguCV github页面。
oyjwcjzk2#
所有与OpenCV相关的示例程序,Accord.net,Emgu,等都使用.NET Framework 4.7.2或类似版本。如果任何人尝试使用.NET核心或.NET 5/6/7/8,它不会工作,显示XML解析器错误,指出CascadeClassifier无法加载“haarcascade_frontalface_alt_tree. xml”文件。所有.NET Package 应用程序都已停止更新最新版本。NET框架下实现。
类似地,.NET 7〉中对System.Drawing命名空间(完全独立于平台)的支持并不简单。您可以选择使用Microsoft.Maui.Graphics来获取Image(Bgr,Byte)和兼容的Bitmap类型,并在ImageSharp等其他工具上工作。
话虽如此,要让OpenCV在便携式.NET中工作,我们需要等到有人更新OpenCV或雅阁.NET或Emgu或类似的支持最新的. NET。