void EngineConfigurationDialog::detectEngineOptions()
{
	if (m_engine != 0)
		return;

	if (QObject::sender() != ui->m_detectBtn
	&&  ui->m_commandEdit->text() == m_oldCommand
	&&  ui->m_workingDirEdit->text() == m_oldPath
	&&  ui->m_protocolCombo->currentText() == m_oldProtocol)
	{
		emit detectionFinished();
		return;
	}

	m_oldCommand = ui->m_commandEdit->text();
	m_oldPath = ui->m_workingDirEdit->text();
	m_oldProtocol = ui->m_protocolCombo->currentText();

	ui->m_detectBtn->setEnabled(false);
	ui->m_restoreBtn->setEnabled(false);
	ui->m_progressBar->show();

	EngineBuilder builder(engineConfiguration());
	m_engine = qobject_cast<ChessEngine*>(builder.create(0, 0, this));

	if (m_engine != 0)
	{
		connect(m_engine, SIGNAL(ready()),
			this, SLOT(onEngineReady()));
		connect(m_engine, SIGNAL(disconnected()),
			this, SLOT(onEngineQuit()));
		connect(m_engine, SIGNAL(destroyed()),
			this, SIGNAL(detectionFinished()));
		connect(m_optionDetectionTimer, SIGNAL(timeout()),
			m_engine, SLOT(kill()));

		m_optionDetectionTimer->start();
	}
	else
	{
		ui->m_detectBtn->setEnabled(true);
		ui->m_restoreBtn->setEnabled(true);
		ui->m_progressBar->hide();
		emit detectionFinished();
	}
}
Пример #2
0
void
FaceDetector::run(){

    CascadeClassifier cascade;
    if (!cascade.load("res/haarcascade_frontalface_alt.xml") ) {
        qDebug() << "Erreur lors du chargement du haar cascade frontalface...";
        exit(0);
    }

    QSize processSize = keepAspectRatio(_image.cols, _image.rows, MAX_PROCESS_WIDTH, MAX_PROCESS_HEIGHT);
    Mat color;
    if ( _image.cols > processSize.width() ){
        cv::resize( _image, color, cv::Size(processSize.width(), processSize.height() ) );
    } else {
        color = _image.clone();
    }

    QSize displaySize = keepAspectRatio(color.cols, color.rows);
    _ratio = (double) color.cols/displaySize.width();

    Mat gray;
    cvtColor(color, gray, CV_BGR2GRAY);


    //PRETRAITEMENT
    equalizeHist(gray, gray);

    vector<Rect> facesRects;
    cascade.detectMultiScale(gray, facesRects, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cvSize(16,16));

    // qDebug() << "detected faces size: " << facesRects.size();
    
    for (unsigned int i = 0; i < facesRects.size(); ++i){

        Rect r = facesRects[i];
        Mat croppedFace;
        getRectSubPix(color, Size(r.width, r.height), Point2f(r.x + r.width/2, r.y + r.height / 2), croppedFace);
        // qImageFaces << Mat2QImage(croppedFace);

        struct DetectorData tmpData;
        tmpData.id = i;
        cv::resize( croppedFace, croppedFace, Size(WORK_SIZE,WORK_SIZE) );
        tmpData.image = Mat2QImage(croppedFace);
        emit sendFace( tmpData.image );
        tmpData.rect = QRect(r.x/_ratio+1, r.y/_ratio+1, r.width/_ratio+1, r.height/_ratio+1);
        tmpData.cvRect = r;
        tmpData.mat = croppedFace;
        cvtColor(croppedFace, tmpData.gray, CV_RGB2GRAY);
        // cv::resize( tmpData.gray, tmpData.gray, Size(WORK_SIZE,WORK_SIZE) );
        
        detectorData << tmpData;
    }
    qRegisterMetaType< QList<struct DetectorData> >( "QList<struct DetectorData>" );
    emit detectionFinished( _index, detectorData );
}
void EngineConfigurationDialog::onAccepted()
{
	connect(this, SIGNAL(detectionFinished()),
		this, SLOT(accept()));
	detectEngineOptions();
}