久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1768|回復: 0
收起左側

去年做的基于Qt的人臉識別系統,這是在Qt客戶端上運行的完整代碼

[復制鏈接]
ID:718394 發表于 2020-3-29 21:15 | 顯示全部樓層 |閱讀模式
  1. #include "facedetectwnd.h"
  2. #include "ui_facedetectwnd.h"

  3. #include <QByteArray>
  4. #include <QHostAddress>

  5. #include "FaceDetect.h"

  6. FaceDetectThr::FaceDetectThr(QObject *parent):
  7.     QThread (parent)
  8. {
  9. }

  10. FaceDetectThr::~FaceDetectThr()
  11. {
  12. }

  13. void FaceDetectThr::run()
  14. {
  15. #define MAXLEN int(800*600)
  16.    int size;

  17.    //分配緩存:用于保存接收圖片數據
  18.    char *buffer  = new char[MAXLEN];

  19.         //分配套接字
  20.    QTcpSocket *s = new QTcpSocket;
  21.    // 連接服務器
  22.    s->connectToHost(QHostAddress("192.168.21.131"), 59999);
  23.    //等連接成功
  24.    if(!s->waitForConnected(~0)){
  25.        goto ERR_STEP;
  26.    }
  27.    //給界面發生連接成功信號
  28.    emit sigConnected();

  29.         //死循環
  30.    while(1){
  31.        char req[]= "clientack";

  32.                 //給服務器發送請求
  33.        s->write(req, sizeof(req));

  34.                 //等待套接字緩存可讀(給服務器發送請求后,服務器收到則采樣一張圖片,回發客戶端)
  35.        if(s->waitForReadyRead(~0)){
  36.                    //讀出4字節協議頭:圖片正文的長度
  37.            s->read((char *)&size, 4);
  38.            int len = size;
  39.            char *p1 = (char *)&len;
  40.            char *p2 = (char *)&size;
  41.            p1[0] = p2[3];
  42.            p1[1] = p2[2];
  43.            p1[2] = p2[1];
  44.            p1[3] = p2[0];

  45.            if(MAXLEN < len){
  46.                goto ERR_STEP;
  47.            }

  48.                         //循環接收len字節數據(不多收也不少收)
  49.            p1 = buffer;
  50.            int pos = len;
  51.            while(pos){
  52.                if(!s->waitForReadyRead(~0)){
  53.                    goto ERR_STEP;
  54.                }
  55.                size = int(s->read(p1, pos));
  56.                pos -= size;
  57.                p1 += size;
  58.            }
  59.            qDebug("len = %d, pos=%d\n", len, pos);

  60.                         //把接收來的圖片數據裝到字節數組
  61.            QByteArray arr;
  62.            arr.append(buffer, len);
  63.                    //定義管理圖片的QImage對象
  64.            QImage img;
  65.                    //把字節數組中圖片用img對象管理起來
  66.            img.loadFromData(arr);

  67.            //把QImage轉換成Mat格式
  68.            cv::Mat frame = ::QImage_to_Mat(img);
  69.            //人臉檢測
  70.            ::detectFaceOpenCV(frame);
  71.            //把Mat轉換成QImage
  72.            img = ::Mat_to_QImage(frame);

  73.            //把QImage轉換QPixmap
  74.            QPixmap pix = QPixmap::fromImage(img);

  75.                         //給界面發送信號
  76.            emit sigPixmap(pix);
  77.        }
  78.    }

  79. ERR_STEP:
  80.    qDebug("線程出錯退出");
  81.    delete [] buffer;
  82.    delete s;
  83.    emit sigDisconnected();
  84.    return;
  85. }

  86. FaceDetectWnd::FaceDetectWnd(QWidget *parent) :
  87.     QWidget(parent),
  88.     ui(new Ui::FaceDetectWnd)
  89. {
  90.     ui->setupUi(this);

  91.     //分配一個接收線程對象
  92.     detectThr = new FaceDetectThr;
  93.     connect(detectThr, SIGNAL(sigPixmap(QPixmap)),
  94.             this, SLOT(slotRecv(QPixmap)));
  95.     connect(detectThr, SIGNAL(sigConnected()),
  96.             this, SLOT(slotConnected()));
  97.     connect(detectThr, SIGNAL(sigDisconnected()),
  98.             this, SLOT(slotDisconnected()));

  99.     setWindowTitle("智能門崗");
  100. }

  101. FaceDetectWnd::~FaceDetectWnd()
  102. {
  103.     delete ui;
  104. }

  105. void FaceDetectWnd::slotConnected()
  106. {
  107.     setWindowTitle("連接成功");
  108.     ui->pushButton->setEnabled(true);
  109. }

  110. void FaceDetectWnd::slotDisconnected()
  111. {
  112.     setWindowTitle("連接斷開");
  113.     ui->pushButton->setText("連接");
  114.     ui->pushButton->setEnabled(true);
  115. }

  116. void FaceDetectWnd::slotRecv(QPixmap pix)
  117. {
  118.     ui->label->setPixmap(pix);
  119. }

  120. void FaceDetectWnd::on_pushButton_clicked()
  121. {
  122.     if("連接" == ui->pushButton->text()){
  123.         ui->pushButton->setText("斷開");
  124.         detectThr->start();
  125.         setWindowTitle("連接中...");
  126.         ui->pushButton->setEnabled(false);
  127.     }else{
  128.         ui->pushButton->setText("連接");
  129.         detectThr->terminate();
  130.     }
  131. }

復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲日本中文字幕在线 | 亚洲一区中文字幕在线观看 | 成人在线免费网站 | 久久9精品 | 有码一区 | 欧美区日韩区 | 久久精品中文字幕 | 成人午夜在线视频 | 国产一区二区三区四区在线观看 | 久久久精品 | 国产剧情久久 | av网站在线免费观看 | 在线视频中文字幕 | 亚洲精品一区二区三区在线观看 | 日韩欧美中文 | 日韩在线一区二区三区 | 国产精品资源在线观看 | 黄色福利 | 欧美黄在线观看 | 久久国产高清 | 中文字幕一区二区三区四区五区 | 色婷婷久久 | 九九精品网 | 国产精品一级 | 精品久久一区 | 天天插天天操 | 国产视频一区二区三区四区五区 | 男女羞羞视频在线 | 国产欧美一区二区三区另类精品 | 亚洲精品一区二 | 成人精品毛片 | 天天碰日日操 | 麻豆久久久9性大片 | 久草网在线视频 | 久久av影院| 久久成人18免费网站 | 日韩高清中文字幕 | 精品伊人| 国产麻豆乱码精品一区二区三区 | 午夜国产羞羞视频免费网站 | 国产黄色大片 |