C++实战:人脸识别7大核心实例

计算机视觉实例应用

基于C++的人脸识别实例

以下是一些基于C++的人脸识别实例的示例和实现方法,涵盖了多种技术和库的应用。这些例子可以帮助开发者快速上手并实现人脸识别功能。

OpenCV 基础人脸检测

使用OpenCV的预训练模型进行人脸检测是入门级示例。OpenCV自带Haar级联分类器,适合快速实现。

#include <opencv2/opencv.hpp>
using namespace cv;int main() {CascadeClassifier faceCascade;faceCascade.load("haarcascade_frontalface_default.xml");VideoCapture cap(0);Mat frame;while (cap.read(frame)) {std::vector<Rect> faces;faceCascade.detectMultiScale(frame, faces);for (const auto& face : faces) {rectangle(frame, face, Scalar(255, 0, 0), 2);}imshow("Face Detection", frame);if (waitKey(1) == 27) break;}return 0;
}

Dlib 68点人脸特征检测

Dlib库提供了更精确的人脸特征点检测功能,适合需要高精度定位的应用。

#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing.h>
using namespace dlib;int main() {frontal_face_detector detector = get_frontal_face_detector();shape_predictor predictor;deserialize("shape_predictor_68_face_landmarks.dat") >> predictor;cv::VideoCapture cap(0);cv::Mat frame;while (cap.read(frame)) {cv_image<bgr_pixel> cimg(frame);std::vector<rectangle> faces = detector(cimg);for (const auto& face : faces) {full_object_detection shape = predictor(cimg, face);for (unsigned int i = 0; i < shape.num_parts(); ++i) {cv::circle(frame, cv::Point(shape.part(i).x(), shape.part(i).y()), 2, cv::Scalar(0, 255, 0), -1);}}cv::imshow("Landmark Detection", frame);if (cv::waitKey(1) == 27) break;}return 0;
}

深度学习人脸识别 (OpenCV DNN模块)

使用OpenCV的DNN模块加载深度学习模型(如Caffe或TensorFlow模型)进行人脸识别。

#include <opencv2/dnn.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace dnn;int main() {Net net = readNetFromCaffe("deploy.prototxt", "res10_300x300_ssd_iter_140000.caffemodel");VideoCapture cap(0);Mat frame;while (cap.read(frame)) {Mat blob = blobFromImage(frame, 1.0, Size(300, 300), Scalar(104, 177, 123));net.setInput(blob);Mat detections = net.forward();for (int i = 0; i < detections.size[2]; ++i) {float confidence = detections.at<float>(0, 0, i, 2);if (confidence > 0.5) {int x1 = static_cast<int>(detections.at<float>(0, 0, i, 3) * frame.cols);int y1 = static_cast<int>(detections.at<float>(0, 0, i, 4) * frame.rows);int x2 = static_cast<int>(detections.at<float>(0, 0, i, 5) * frame.cols);int y2 = static_cast<int>(detections.at<float>(0, 0, i, 6) * frame.rows);rectangle(frame, Point(x1, y1), Point(x2, y2), Scalar(0, 255, 0), 2);}}imshow("Deep Learning Face Detection", frame);if (waitKey(1) == 27) break;}return 0;
}

实时人脸识别 (Face Recognition库)

使用Python的face_recognition库结合C++实现实时人脸识别。

#include <Python.h>
#include <opencv2/opencv.hpp>
using namespace cv;int main() {Py_Initialize();PyRun_SimpleString("import face_recognition");PyRun_SimpleString("import cv2");VideoCapture cap(0);Mat frame;while (cap.read(frame)) {imwrite("temp.jpg", frame);PyRun_SimpleString("image = face_recognition.load_image_file('temp.jpg')");PyRun_SimpleString("face_locations = face_recognition.face_locations(image)");PyObject* face_locations = PyObject_GetAttrString(PyImport_AddModule("__main__"), "face_locations");if (face_locations && PyList_Check(face_locations)) {for (Py_ssize_t i = 0; i < PyList_Size(face_locations); ++i) {PyObject* location = PyList_GetItem(face_locations, i);if (PyTuple_Check(location) && PyTuple_Size(location) == 4) {int top = PyLong_AsLong(PyTuple_GetItem(location, 0));int right = PyLong_AsLong(PyTuple_GetItem(location, 1));int bottom = PyLong_AsLong(PyTuple_GetItem(location, 2));int left = PyLong_AsLong(PyTuple_GetItem(location, 3));rectangle(frame, Point(left, top), Point(right, bottom), Scalar(0, 255, 0), 2);}}}imshow("Face Recognition", frame);if (waitKey(1) == 27) break;}Py_Finalize();return 0;
}

人脸识别与追踪

结合人脸检测和追踪算法,实现高效的人脸追踪功能。

#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
using namespace cv;int main() {CascadeClassifier faceCascade;faceCascade.load("haarcascade_frontalface_default.xml");Ptr<Tracker> tracker = TrackerKCF::create();VideoCapture cap(0);Mat frame;bool tracking = false;Rect2d faceRect;while (cap.read(frame)) {if (!tracking) {std::vector<Rect> faces;faceCascade.detectMultiScale(frame, faces);if (!faces.empty()) {faceRect = faces[0];tracker->init(frame, faceRect);tracking = true;}} else {tracker->update(frame, faceRect);rectangle(frame, faceRect, Scalar(255, 0, 0), 2);}imshow("Face Tracking", frame);if (waitKey(1) == 27) break;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90378.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Uniapp中使用vue3语法

在setup语法糖中调用uniapp的页面生命周期 <script setup>import { onShow } from "dcloudio/uni-app"onShow(() > {//hanlder...}) </script>vue2混入在vue3中建议使用组合式API 新建baseHook.js import { ref } from "vue"; export fu…

C++vector(2)

2.vector深度剖析及模拟实现 2.1std::vector的核心框架接口的模拟实现bit::vector vector的模拟实现 2.2 使用memcpy拷贝问题 假设模拟实现的vector中的reserve接口中&#xff0c;使用memcpy进行的拷贝&#xff0c;以下代码会发生什么问题&#xff1f; int main() {gxl::ve…

IPSec VPN -- 野蛮模式

一、野蛮模式简介野蛮模式VPN是指IPsec VPN中IKE协商采用野蛮模式&#xff08;Aggressive Mode&#xff09;的虚拟专用网络。它是IKE第一阶段协商的一种方式&#xff0c;与主模式相对&#xff0c;具有协商速度快但安全性稍低的特点。以下是具体介绍&#xff1a;1、工作原理&…

rk3588开发板使用硬件编码处理视频

开发板默认下载的ffmpeg是通用版&#xff0c;无法调用rk3588的硬件编码器&#xff0c;视频编码效率低。 nyanmisaka开发了用于jellyfin的ffmpeg&#xff0c;支持rk3588硬件编码器&#xff0c;编译方法&#xff1a; https://github.com/nyanmisaka/ffmpeg-rockchip/wiki/Compil…

`neutron router-gateway-set` 操作失败的可能原因及解决方案

根据提供的错误信息和搜索结果&#xff0c;neutron router-gateway-set 操作失败的可能原因及解决方案如下&#xff1a;一、常见错误原因数据库字符集配置问题&#xff08;中文名支持&#xff09; 表现&#xff1a;若路由器名称包含中文字符&#xff0c;可能因数据库字符集非UT…

(一)ZooKeeper 发展历史

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

OpenCV快速入门之CV宝典

文章目录OpenCV的基础应用一、OpenCV简介&#xff1a;1.1 OpenCV 优势1.2 OpenCV-Python二、环境安装2.1 环境导入三、图像表示3.1 颜色空间&#xff08;Color Space&#xff09;3.2 具体说明3.3 图像在计算机中的表示四、基本图像操作4.1 创建窗口**1. 核心窗口行为控制**cv.W…

LangChain4j 两种类型API

LangChain4j operates on two levels of abstraction: &#xfeff;LangChain4j 提供了两种类型API抽象Low level. At this level, you have the most freedom and access to all the low-level components such as ChatModel, UserMessage, AiMessage, EmbeddingStore, Embedd…

CLI 与 IDE 编码代理比较:提升开发效率的两种路径

引言 在当今快速发展的软件开发领域&#xff0c;人工智能编码助手已成为开发者工具箱中不可或缺的一部分。根据行业报告&#xff0c;使用AI编码助手可以将开发速度提高55%以上&#xff0c;同时显著提升代码质量。目前市场上主要有两种类型的编码代理&#xff1a;集成在IDE中的代…

【STM32】FreeRTOS 任务的创建(二)

这篇文章在于 详细解释 FreeRTOS 中任务的创建过程&#xff0c;包括任务创建的本质过程、API 详解、两种创建方式&#xff08;动态/静态&#xff09;、任务函数规范、常见错误及实践建议。 这里参照&#xff1a;RTOS官方文档&#xff1a;https://www.freertos.org/zh-cn-cmn-s…

软考 系统架构设计师系列知识点之面向服务架构设计理论与实践(9)

接前一篇文章:软考 系统架构设计师系列知识点之面向服务架构设计理论与实践(8) 所属章节: 第15章. 面向服务架构设计理论与实践 第3节 SOA的参考架构 15.3 SOA的参考架构 IBM的Websphere业务集成参考架构(如图15-2所示,以下简称参考架构)是典型的以服务为中心的企业集…

分区域材料设计:主承重区 / 次承重区 / 足弓区的弹性参数与刺激强度匹配

你是否总在为足部酸痛、膝盖不适或腰背僵硬烦恼&#xff1f;穿了昂贵的缓震跑鞋&#xff0c;用了定制矫形器&#xff0c;问题却反复出现&#xff1f;今天&#xff0c;我们要颠覆一个流传百年的“常识”——脚不是脆弱的“需要被保护的对象”&#xff0c;而是被错误的设计“惯坏…

使用Qt下QAudioOutput播放声音

导读本项目目的是使用QAudioOutput播放声音 &#xff0c;音频数据来源为ffmpeg解码后的音频数据。Qt音频播放类说明 QAudioFormatQAudioFormat是Qt多媒体框架中用于定义音频格式的核心类&#xff0c;用于设置音频数据的参数&#xff0c;确保与硬件设备兼容。其主要功能和参数如…

日语学习-日语知识点小记-构建基础-JLPT-N3阶段(9):ようなN

日语学习-日语知识点小记-构建基础-JLPT-N3阶段&#xff08;9&#xff09;&#xff1a;ようなN 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰2、知识点&#xff08;&#xff11;&#xff09;复习&#xff08;&#xff12;&#xff09;复习&…

洛谷P1512 伊甸园日历游戏

一开始&#xff0c;我发现有“必胜策略”&#xff0c;就知道是博弈论&#xff0c;然后看了两种操作&#xff08;月份1和天数1&#xff09;&#xff0c;于是想到用记忆化搜索找出所有的可能性 &#xff0c;但不知道怎么判断当前是否为先手必胜/必败态&#xff0c;使用了TJ方法后…

Kafka——消费者组到底是什么?

引言在分布式系统中&#xff0c;消息中间件的核心价值在于高效地连接生产者与消费者&#xff0c;实现数据的可靠传递。然而&#xff0c;传统消息引擎面临一个两难困境&#xff1a;如何在“消息不重复消费”与“系统可扩展性”之间找到平衡&#xff1f;点对点模型&#xff08;如…

新mac电脑软件安装指南(前端开发用)

1. 下载git 未下载git直接下载homebrew也会提示你下载git 2. 下载homebrew 介绍&#xff1a; Homebrew 是 macOS 和 Linux 系统的开源包管理器‌&#xff0c;通过命令行实现软件的快速安装、更新和管理&#xff0c;极大简化了开发者及普通用户的工作流程。 命令&#xff1a;…

【HarmonyOS】ArkUI 布局与容器组件

目录前言一、线性布局(Column/Row)1.先布局后内容2.元素在主轴上的排列方式3.元素在交叉轴上的排列方式二、层叠布局(Stack)1.开发布局2.对齐方式三、弹性布局(Flex)四、创建列表(List)五、创建轮播(Swiper)1.基本用法2.常用属性3.样式自定义六、选项卡Tabs1.基本用法2.常用属性…

MCNN-BiLSTM-Attention分类预测模型等!

MCNN-BiLSTM-Attention分类预测模型基于多尺度卷积神经网络(MCNN)双向长短期记忆网络(BiLSTM)注意力机制(Attention)的分类预测模型&#xff0c;matlab代码&#xff0c;直接运行使用&#xff01;1、模型介绍&#xff1a;针对传统方法在噪声环境下诊断精度低的问题&#xff0c;提…

【Luogu】每日一题——Day12. P3149 排序 (树状数组 + 逆序对)

链接&#xff1a;P3149 排序 - 洛谷 题目&#xff1a; 思路&#xff1a; 经典搭配了 首先我们来分析以下操作的作用&#xff0c;如果我们选了 a[k]&#xff0c;那么对逆序对有什么影响呢&#xff1f; ①.对于 x y&#xff0c;且 x > a[k]&#xff0c;y < a[k] 由于 x…