c# OpenCv 2-使用haarcascade模型进行人脸识别

Test:
1. 读取cascade模型文件
2. 对输入的图片进行灰度处理
3. 使用cascade以及模型文件(本例使用的是人脸正面)对图片进行预测

TestCrop:
步骤如Test,截取出人脸照片

haarcascades的模型可以从opencv获得:
https://github.com/opencv/opencv/tree/master/data

...
    public class FRTest
    {

        private CascadeClassifier _cascadeClassifier;
        private Capture _capture;


        public void Test(Bitmap bmp)
        {
            //_capture = new Capture();

            var imageFrame = new Image<Bgr, byte>(bmp); //_capture.QueryFrame();
            _cascadeClassifier = new CascadeClassifier(Application.StartupPath + "/haarcascades/haarcascade_frontalface_default.xml");
            //using (var imageFrame = _capture.QueryFrame().ToImage<Bgr, Byte>())
            //{
            if (imageFrame != null)
            {
   
本文将介绍如何使用OpenCV进行人脸识别模型的训练。 1. 收集人脸数据 首先需要准备一些标记了人脸的图像,可以通过人工标注或使用自动化工具来收集。要求每个人的数据独立,没有与其他人的数据交叠。对于每个人,建议至少收集15张标记了人脸的图像。 2. 准备数据集 将数据集按照以下格式进行组织: ``` data/ person1/ image1.jpg image2.jpg ... person2/ image1.jpg image2.jpg ... ... ``` 3. 训练模型 使用OpenCV中的 `cv2.face.LBPHFaceRecognizer_create()` 函数进行模型的训练。此函数需要接收两个参数,打开数据集后,第一个是训练图像列表,第二个是标记列表。 一旦模型训练完成,可以将它保存下来以备后续使用。 以下是示例代码: ```python import cv2 import os # 准备数据集 data_dir = "data" labels = [] images = [] for subdir in os.listdir(data_dir): subdir_path = os.path.join(data_dir, subdir) if os.path.isdir(subdir_path): label = int(subdir[1:]) for filename in os.listdir(subdir_path): image_path = os.path.join(subdir_path, filename) image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) images.append(image) labels.append(label) # 训练模型 face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.train(images, labels) # 保存模型 model_file = "face_recognizer.yml" face_recognizer.write(model_file) print("Model Trained") ``` 以上代码将在 `data` 目录中查找子目录 `person1`, `person2` 等人的图像。`cv2.imread()` 函数读取图像并将其添加到图像列表中,同时将标签添加到相应的标签列表中。然后通过 `cv2.face.LBPHFaceRecognizer_create()` 函数来创建一个人脸识别器,并调用 `train()` 函数以训练识别器。最后,使用 `write()` 函数将模型保存到文件中。 4. 使用模型 训练完成后,可以使用以下代码来使用模型: ```python import cv2 # 加载模型 model_file = "face_recognizer.yml" face_recognizer = cv2.face.LBPHFaceRecognizer_create() face_recognizer.read(model_file) # 读取图像并进行人脸识别 image = cv2.imread("test_image.jpg", cv2.IMREAD_GRAYSCALE) label = face_recognizer.predict(image)[0] ``` 使用 `cv2.face.LBPHFaceRecognizer_create()` 函数加载模型,然后再使用 `read()` 函数加载已保存的模型。要对新图像进行预测,读取图像并使用 `predict()` 函数进行预测。该函数将返回一个元组 (label, confidence) ,其中 label 是预测的标签,confidence 是模型的置信度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值