中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

使用OpenCV怎么實現(xiàn)一個人臉檢測功能-創(chuàng)新互聯(lián)

使用OpenCV怎么實現(xiàn)一個人臉檢測功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

網(wǎng)頁設(shè)計是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁設(shè)計更深度的剖析產(chǎn)品和設(shè)計風格定位,結(jié)合最新的網(wǎng)頁設(shè)計流行趨勢,與WVI應(yīng)用標準,設(shè)計出具企業(yè)表現(xiàn)力,大器而深穩(wěn)的網(wǎng)站界面設(shè)。創(chuàng)新互聯(lián)建站公司2013年成立,是成都網(wǎng)站建設(shè)公司:提供企業(yè)網(wǎng)站設(shè)計,成都品牌網(wǎng)站建設(shè),營銷型企業(yè)網(wǎng)站建設(shè)方案,自適應(yīng)網(wǎng)站建設(shè),成都小程序開發(fā),專業(yè)建站公司做網(wǎng)站。

1、HAAR級聯(lián)檢測

#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main(int artc, char** argv) {
 face_detect_haar();
 waitKey(0);
 return 0;
}
 
void face_detect_haar() {
 CascadeClassifier faceDetector;
 std::string haar_data_file = "./models/haarcascades/haarcascade_frontalface_alt_tree.xml";
 faceDetector.load(haar_data_file); 
 vector<Rect> faces;
 //VideoCapture capture(0);
 VideoCapture capture("./video/test.mp4");
 Mat frame, gray;
 int count=0;
 while (capture.read(frame)) {
 int64 start = getTickCount();
 if (frame.empty())
 {
 break;
 }
 // 水平鏡像調(diào)整
 // flip(frame, frame, 1);
 imshow("input", frame);
 if (frame.channels() == 4)
 cvtColor(frame, frame, COLOR_BGRA2BGR);
 cvtColor(frame, gray, COLOR_BGR2GRAY);
 equalizeHist(gray, gray);
 faceDetector.detectMultiScale(gray, faces, 1.2, 1, 0, Size(30, 30), Size(400, 400));
 for (size_t t = 0; t < faces.size(); t++) {
 count++;
 rectangle(frame, faces[t], Scalar(0, 255, 0), 2, 8, 0);
 }
 float fps = getTickFrequency() / (getTickCount() - start);
 ostringstream ss;ss.str("");
 ss << "FPS: " << fps << " ; inference time: " << time << " ms";
 putText(frame, ss.str(), Point(20, 20), 0, 0.75, Scalar(0, 0, 255), 2, 8);
 imshow("haar_face_detection", frame);
 if (waitKey(1) >= 0) break;
 }
 
 printf("total face: %d\n", count);
}

2、 DNN人臉檢測

#include <opencv2/dnn.hpp>
#include <opencv2/opencv.hpp>
 
using namespace cv;
using namespace cv::dnn;
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
const size_t inWidth = 300;
const size_t inHeight = 300;
const double inScaleFactor = 1.0;
const Scalar meanVal(104.0, 177.0, 123.0);
const float confidenceThreshold = 0.7;
void face_detect_dnn();
void mtcnn_demo();
int main(int argc, char** argv)
{
 face_detect_dnn();
 waitKey(0);
 return 0;
}
 
void face_detect_dnn() {
 //這里采用tensorflow模型
 std::string modelBinary = "./models/dnn/face_detector/opencv_face_detector_uint8.pb";
 std::string modelDesc = "./models/dnn/face_detector/opencv_face_detector.pbtxt";
 // 初始化網(wǎng)絡(luò)
 dnn::Net net = readNetFromTensorflow(modelBinary, modelDesc);
 
 net.setPreferableBackend(DNN_BACKEND_OPENCV);
 net.setPreferableTarget(DNN_TARGET_CPU);
 if (net.empty())
 {
  printf("Load models fail...\n");
  return;
 }
 
 // 打開攝像頭
 // VideoCapture capture(0);
 VideoCapture capture("./video/test.mp4");
 if (!capture.isOpened()) {
  printf("Don't find video...\n");
  return;
 }
 
 Mat frame;
 int count=0;
 while (capture.read(frame)) {
  int64 start = getTickCount();
  if (frame.empty())
  {
   break;
  }
  // 水平鏡像調(diào)整
  // flip(frame, frame, 1);
  imshow("input", frame);
  if (frame.channels() == 4)
   cvtColor(frame, frame, COLOR_BGRA2BGR);
 
  // 輸入數(shù)據(jù)調(diào)整
  Mat inputBlob = blobFromImage(frame, inScaleFactor,
   Size(inWidth, inHeight), meanVal, false, false);
  net.setInput(inputBlob, "data");
 
  // 人臉檢測
  Mat detection = net.forward("detection_out");
  vector<double> layersTimings;
  double freq = getTickFrequency() / 1000;
  double time = net.getPerfProfile(layersTimings) / freq;
  Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>());
 
  ostringstream ss;
  for (int i = 0; i < detectionMat.rows; i++)
  {
   // 置信度 0~1之間
   float confidence = detectionMat.at<float>(i, 2);
   if (confidence > confidenceThreshold)
   {
    count++;
    int xLeftBottom = static_cast<int>(detectionMat.at<float>(i, 3) * frame.cols);
    int yLeftBottom = static_cast<int>(detectionMat.at<float>(i, 4) * frame.rows);
    int xRightTop = static_cast<int>(detectionMat.at<float>(i, 5) * frame.cols);
    int yRightTop = static_cast<int>(detectionMat.at<float>(i, 6) * frame.rows);
 
    Rect object((int)xLeftBottom, (int)yLeftBottom,
     (int)(xRightTop - xLeftBottom),
     (int)(yRightTop - yLeftBottom));
 
    rectangle(frame, object, Scalar(0, 255, 0));
 
    ss << confidence;
    std::string conf(ss.str());
    std::string label = "Face: " + conf;
    int baseLine = 0;
    Size labelSize = getTextSize(label, FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
    rectangle(frame, Rect(Point(xLeftBottom, yLeftBottom - labelSize.height),
     Size(labelSize.width, labelSize.height + baseLine)),
     Scalar(255, 255, 255), FILLED);
    putText(frame, label, Point(xLeftBottom, yLeftBottom),
     FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0));
   }
  }
  float fps = getTickFrequency() / (getTickCount() - start);
  ss.str("");
  ss << "FPS: " << fps << " ; inference time: " << time << " ms";
  putText(frame, ss.str(), Point(20, 20), 0, 0.75, Scalar(0, 0, 255), 2, 8);
  imshow("dnn_face_detection", frame);
  if (waitKey(1) >= 0) break;
 }
 printf("total face: %d\n", count);
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)建站的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、建站服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:使用OpenCV怎么實現(xiàn)一個人臉檢測功能-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.rwnh.cn/article18/eppgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、動態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
阳信县| 建始县| 丹江口市| 卓尼县| 台中市| 独山县| 黑水县| 桐城市| 蓬溪县| 乌拉特前旗| 姜堰市| 靖安县| 赣州市| 肇庆市| 桓仁| 皮山县| 镇沅| 全州县| 舞钢市| 江油市| 夏河县| 枣强县| 且末县| 宝丰县| 霞浦县| 温宿县| 彭泽县| 辰溪县| 法库县| 惠州市| 紫阳县| 攀枝花市| 宁海县| 上林县| 淳安县| 绿春县| 望奎县| 岳西县| 永修县| 长顺县| 施秉县|