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
英文地址,請注明出處:http://en.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…