国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16實時人眼監(jiān)測實驗

這篇具有很好參考價值的文章主要介紹了Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16實時人眼監(jiān)測實驗。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


1 前言

??在Ubuntu18.04實現(xiàn)的一個人眼監(jiān)測小程序,使用Qt5.14、Dlib19.24、Opencv3.4.16實現(xiàn)。
??其主要實現(xiàn)思想是,首先通過Opencv獲取攝像頭數(shù)據(jù),然后通過Dlib提取人臉68關鍵點的算法對所輸入圖片中的人臉進行關鍵點檢測,檢測出眼部的關鍵點后,在用Opnecv中的畫圖命令進行繪制,再利用Qt進行界面展示。


2 效果

??人眼監(jiān)測小程序效果如下圖所示,將畫面中的人眼處用綠色的線進行框選。

Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16實時人眼監(jiān)測實驗


3 Ubuntu18.04下Qt、Opencv、Dlib的配置

3.0 Ubuntu18.04的安裝以及一些基本配置

??U此部分涉及到buntu18.04系統(tǒng)的安裝、配置一些基礎的應用軟件等過程。
??(1)引導盤的制作;(2)安裝ubuntu18.04系統(tǒng);(3)安裝搜狗輸入法;(4)安裝百度網(wǎng)盤;(5)安裝Chrome瀏覽器;(6)安裝激活Pycharm;(7)安裝VScode;
??整體的大概流程參照這篇博客https://blog.csdn.net/wang_chao118/article/details/130146392?spm=1001.2014.3001.5502

3.1 Qt

??從Qt官網(wǎng)下載鏈接https://download.qt.io/archive/qt/處下載所對應版本,我這里直接下載的是https://download.qt.io/archive/qt/5.14/5.14.2/這個頁面下的這個qt-opensource-linux-x64-5.14.2.run文件.下載下來后直接命令行運行,按照步驟走即可,注意一下安裝Qt的具體位置.

3.2 Opencv

??從github上下載Opencv的源碼進行編譯,我這次沒下新版本,因為之前有用過這個Opnecv3.4.16,所以就下了這個https://github.com/opencv/opencv/tree/3.4.16版本,沒有什么特別的用意,如果只是做一些小demo,僅僅用到一些opencv的基礎操作如讀取圖片等操作,下哪個版本的都可以.
??在用到cmake-gui配置編譯選項的時候,勾選編譯opencv_world,這樣的話所有的庫文件全部打包成一個,可以簡便pro文件的寫法,也不用去查某個函數(shù)到底對應哪個庫,這個libopencv_world.so.3.4.16也就20多MB吧.(此處是相對而言的,也可以不編譯為一個庫)

3.3 Dlib

??從github上下載Dlib的源碼https://github.com/davisking/dlib進行編譯,過程與編譯opencv時類似.

4 核心代碼

??本項目下的文件層級如下圖所示.
Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16實時人眼監(jiān)測實驗

4.1 pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++14

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    camera.cpp \
    fatiguedetect.cpp \
    main.cpp \
    widget.cpp

HEADERS += \
    camera.h \
    fatiguedetect.h \
    widget.h

FORMS += \
    widget.ui

#opencv庫的路徑opencv3.4.16
INCLUDEPATH += /home/ai/software/opencv3416_installed/include
LIBS += /home/ai/software/opencv3416_installed/lib/libopencv_world.so

# dlib19.24庫的路徑
INCLUDEPATH += /home/ai/software/dlib_installed/include
LIBS += /home/ai/software/dlib_installed/lib/libdlib.a

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

DISTFILES +=

4.2 Widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <iostream>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    camera_thread = new Camera();
    camera_thread->set_cam_number(0);
    connect(camera_thread, SIGNAL(sendPicture(QImage)),this,SLOT(receive(QImage)));
    camera_thread->open_camera();
}

Widget::~Widget()
{
    delete ui;
}


void Widget::receive(QImage img)
{
    QImage scaled_img = img.scaled(ui->label->width(), ui->label->height());
    ui->label->setPixmap(QPixmap::fromImage(scaled_img));
}


4.3 fatiguedetect.cpp

#include "fatiguedetect.h"

// 常量定義
const double close_standard = 0.45;
const int eye_l_len = 60;

// 判斷狀態(tài)的類
class JudgeCondition : public QObject {
    Q_OBJECT

public:
    explicit JudgeCondition(QObject *parent = nullptr) : QObject(parent), condition(0), heavy_flag(0) {};

    void judge(std::deque<int> &left_eye_l, std::deque<int> &right_eye_l)
    {
        int left_sum = std::accumulate(left_eye_l.begin(), left_eye_l.end(), 0);
        int right_sum = std::accumulate(right_eye_l.begin(), right_eye_l.end(), 0);

        if (left_sum == eye_l_len && right_sum == eye_l_len) {
            ++heavy_flag;
            if (heavy_flag > 100) {
                condition = 3;
            } else {
                condition = 2;
            }
        } else {
            heavy_flag = 0;
            condition = 1;
        }

        emit sendCondition(condition);
    };

signals:
    void sendCondition(int);

private:
    int condition;  // 狀態(tài):0=圖像缺失 1=清醒 2=疲勞 3=重度疲勞
    int heavy_flag;  // 重度疲勞標志位
};


FatigueDetect::FatigueDetect(QObject *parent) : QObject(parent),
    noImageFlag(0),
    noImage(0)
{
    cout << "[INFO] loading facial landmark predictor..." << endl;
    dlib::deserialize("./model.dat") >> predictor;          //是直接調(diào)試運行,則在build文件夾內(nèi);如果為release則與.exe在同一文件夾內(nèi)
    detector = dlib::get_frontal_face_detector();
}

cv::Mat FatigueDetect::detect(cv::Mat frame)
{
    std::vector<std::vector<cv::Point>> pos;
    cv::Mat resized_frame;
    cv::resize(frame, resized_frame, cv::Size(720, 720 * frame.rows / frame.cols));
    cv::Mat gray;
//    cv::cvtColor(resized_frame, gray, cv::COLOR_BGR2GRAY);

    cv_image<bgr_pixel> dlib_img(resized_frame);

    std::vector<dlib::rectangle> rects = detector(dlib_img, 0);    //這里放入detector的必須是dlib類型參數(shù),不能是cv::Mat,不報錯,但編譯時出“問題”

    if (rects.size() == 0)
    {
        noImage = 1;
        emit noSignal(noImageFlag);
    }

    for (dlib::rectangle rect : rects)    //for(類型 變量名稱 : 容器/數(shù)組等內(nèi)容)
    {
        noImage = 0;

        dlib::full_object_detection shape = predictor(dlib_img, rect);

        std::vector<cv::Point> pos_;

        for (int i = 36; i <= 41; i++)   //左眼關鍵點標識
        {
            cv::Point point(shape.part(i).x(), shape.part(i).y());
            pos_.push_back(point);
        }

        for (int i = 42; i <= 47; i++)   //右眼關鍵點標識
        {
            cv::Point point(shape.part(i).x(), shape.part(i).y());
            pos_.push_back(point);
        }

        pos.push_back(pos_);

        draw_point_and_line(pos_, resized_frame);
    }

    cv::Mat resized_back_frame;
    cv::resize(resized_frame, resized_back_frame, cv::Size(frame.cols, frame.rows));
    return resized_back_frame;
}

void FatigueDetect::draw_point_and_line(std::vector<cv::Point> pos_, cv::Mat &image)
{
    int linewidth = 1;
    for (int i = 0; i < 5; i++)
    {
       cv::line(image, pos_[i], pos_[i + 1], cv::Scalar(0, 255, 0), linewidth);
    }
    cv::line(image, pos_[0], pos_[5], cv::Scalar(0, 255, 0), linewidth);
    for (int i = 6; i < 11; i++)
    {
       cv::line(image, pos_[i], pos_[i + 1], cv::Scalar(0, 255, 0), linewidth);
    }
    cv::line(image, pos_[6], pos_[11], cv::Scalar(0, 255, 0), linewidth);
    for (cv::Point point : pos_)
    {
      cv::circle(image, point, linewidth, cv::Scalar(255, 0, 0), -1);
    }
}

5 資源下載

本案例中涉及到的工程文件到此處下載https://download.csdn.net/download/wang_chao118/87700907。文章來源地址http://www.zghlxwxcb.cn/news/detail-412576.html

到了這里,關于Ubunutu18.04+Qt5.14+Dlib19.24+Opencv3.4.16實時人眼監(jiān)測實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Ubuntu18.04 Qt 實現(xiàn)MQTT

    Ubuntu18.04 Qt 實現(xiàn)MQTT

    什么是MQTT? 作用是什么(適用場景)? 與其他通訊協(xié)議相比,優(yōu)缺點在那里? 使用 EMQ X(開源且可視化管理) 下載 EMQX 下載的是??? emqx-5.0.26-ubuntu18.04-amd64.deb? 直接訪問:127.0.0.1:18083 無法訪問的解決辦法: 查看配置文件的默認端口號 (一般在 /etc/emqx/emqx.conf) 查看端口是

    2024年01月21日
    瀏覽(31)
  • UBuntu18.04 Qt之雙HDMI屏切換

    UBuntu18.04 Qt之雙HDMI接2個4K屏并分別設置分辨率、主屏、副屏 在main函數(shù)里面添加: mainwindow.h MainWIndow.cpp 左邊的4k顯示器和右邊的4k顯示器分別顯示程序的主界面

    2024年02月12日
    瀏覽(25)
  • 在Ubuntu18.04中搭建基于QT的opencv環(huán)境

    在Ubuntu18.04中搭建基于QT的opencv環(huán)境

    前言 在看這篇文章之前,需要讀者已經(jīng)安裝了qt環(huán)境如果還沒有安裝可以移步至這篇文章的后半斷 鏈接: qt移植 獲取cmake-gui sudo apt-get install cmake-gui 這一步主要是一會兒編譯opencv的時候會用到 獲取opencv的依賴環(huán)境 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcod

    2024年01月17日
    瀏覽(24)
  • Win10平臺VS2017+OpenCV3.4.0+Qt5.12配置教程

    本文專為圖像處理開發(fā)項目人員準備,涉及多個軟件和庫的安裝、配置教程,親測可行。 1、 VS 是美國微軟公司(Microsoft)開發(fā)的 集成開發(fā)環(huán)境 “Visual Studio” 的簡稱,是Windows平臺最流行的應用程序集成開發(fā)環(huán)境。 注意區(qū)分:MSVC(Microsoft Visual C++ Compiler)是指微軟的VC編譯

    2024年02月05日
    瀏覽(25)
  • Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉編譯環(huán)境

    Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉編譯環(huán)境

    最近公司給了我一塊Jetson Orin Nano的板子,先刷了系統(tǒng)(1.Jetson Orin Nano Developer Kit系統(tǒng)刷機)又讓我搭建交叉編譯環(huán)境,所以有了下面的文章 1.1設備環(huán)境 1.1.1 Server: 1.1.2 Jetson Orin Nano : 1.2 Qt相關下載地址 1.2.1 Qt源碼下載 Qt源碼下載(最好下載tar.xz,tar格式可能在windows下編輯過,后期

    2024年02月12日
    瀏覽(29)
  • pcl+vtk(二)Ubuntu18.04下載安裝基于使用QT的pcl1.13+vtk8.2,以及卸載

    pcl+vtk(二)Ubuntu18.04下載安裝基于使用QT的pcl1.13+vtk8.2,以及卸載

    1.Qt版本 Qt5.4以前版本:QVTKWidget2/QVTKWidget。 Qt5.4以后版本:QVTKOpenGLWidget/QVTKOpenGLWidget。 2.VTK版本(Qt版本為5.4之后) 在VTK8.2以前的版本:QVTKOpenGLWidget; 在VTK8.2及以后的版本里:QVTKOpenGLNativeWidget; QVTKWidget:目前了解到的只可顯示點云,沒有在網(wǎng)上找到顯示模型的例子。 QVTKOpen

    2024年02月04日
    瀏覽(25)
  • Linux系統(tǒng) Ubuntu18.04安裝的詳細教程(提供18.04ubuntu鏡像)

    Linux系統(tǒng) Ubuntu18.04安裝的詳細教程(提供18.04ubuntu鏡像)

    鏡像文件下載: 鏈接:https://pan.baidu.com/s/12bEdRBwO1YbLt23QKnrSrA 提取碼:h7as 關于全名、用戶名區(qū)別可先看第四部分 處理器和內(nèi)核數(shù)量,根據(jù)需要配置就行。我是8核16線程,配置2,2。小白學習的話,配置低一點沒關系。如果你只是為了學一些基礎命令,配置成1,1應該也沒問題

    2024年02月01日
    瀏覽(103)
  • Qt5.14和Qt5.15在線下載

    https://download.qt.io/archive/qt/5.14/5.14.2/ https://download.qt.io/official_releases/online_installers/ qt 安裝太慢的問題如何解決? Qt學習 QT最新版本下載安裝(QT5.15及QT6.X) 清華大學 Qt鏡像下載中心

    2024年02月12日
    瀏覽(45)
  • Ubuntu(18.04)換源

    Ubuntu(18.04)換源

    主要參考Ubuntu(18.04)更換國內(nèi)源方法及注意事項_muxi_712的博客-CSDN博客 為防止其刪除博客,本文簡單重新梳理一遍: 跳轉(zhuǎn): 查看: 備份: 替換: 這里使用清華源:打開https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/,選擇對應的Ubuntu版本。當然也可以選擇其他源比如阿里源,中科大源

    2024年02月04日
    瀏覽(31)
  • ubuntu18.04環(huán)境搭建

    sudo apt install make sudo apt install make-guile 運行Ubuntu的主機 打開終端,輸入【sudo apt update】命令。 輸入密碼,確認授權(quán)。 輸入【sudo apt install git】命令。 輸入【Y】,確認命令執(zhí)行。 輸入【git --version】命令,查看安裝版本。 Git當前版本為【2.30.2】,就此安裝完成。 打開Ubuntu終端

    2023年04月22日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包