日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用OpenCV怎么實現(xiàn)一個人臉檢測功能-創(chuàng)新互聯(lián)

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

網(wǎng)頁設(shè)計是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁設(shè)計更深度的剖析產(chǎn)品和設(shè)計風(fēng)格定位,結(jié)合最新的網(wǎng)頁設(shè)計流行趨勢,與WVI應(yīng)用標(biāo)準(zhǔn),設(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 
#include 
 
using namespace cv;
 
#include 
#include 
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 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 
#include 
 
using namespace cv;
using namespace cv::dnn;
 
#include 
#include 
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 layersTimings;
  double freq = getTickFrequency() / 1000;
  double time = net.getPerfProfile(layersTimings) / freq;
  Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr());
 
  ostringstream ss;
  for (int i = 0; i < detectionMat.rows; i++)
  {
   // 置信度 0~1之間
   float confidence = detectionMat.at(i, 2);
   if (confidence > confidenceThreshold)
   {
    count++;
    int xLeftBottom = static_cast(detectionMat.at(i, 3) * frame.cols);
    int yLeftBottom = static_cast(detectionMat.at(i, 4) * frame.rows);
    int xRightTop = static_cast(detectionMat.at(i, 5) * frame.cols);
    int yRightTop = static_cast(detectionMat.at(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)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)建站的支持。

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


文章題目:使用OpenCV怎么實現(xiàn)一個人臉檢測功能-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://www.dlmjj.cn/article/eppgp.html