void MainWindow::updateFrameIfNecessary()
{
    // use two ifs to speed up calls
    if (cameraType == CAMERA_DSLR) {
        if (this->dslr.isStillCaptured()) {
            processFrameAndUpdateGUI();
        }
    }
}
MainWindow::MainWindow(QWidget *parent, int cameratype) : QMainWindow(parent), ui(new Ui::MainWindow)
{

    ui->setupUi(this);

    // set the desired camera type (current webcam and DSLR
    this->cameraType = cameratype;
    switch (cameratype)
    {
        case CAMERA_WEBCAM: {
            this->webcam = WebCam(ui->frame);
            setupUIWebcam();
            bool ret = this->webcam.openCamera();
            if (ret == false) {
                QMessageBox msgBox;
                msgBox.setIcon(QMessageBox::Critical);
                msgBox.setText("The camera cannot be opened, check device number or connection.");
                msgBox.exec();
                ui->frame->setText("error opening camera, check device number or if any other program is accessing the camera.");
                return;
            }
        }
        break;

        case CAMERA_DSLR: {
            this->dslr = DSLR(ui);
            setupUIDSLR();
            bool ret = this->dslr.openCamera(&this->dslr);
            if (ret == false) {
                QMessageBox msgBox;
                msgBox.setIcon(QMessageBox::Critical);
                msgBox.setText("The camera cannot be opened! Please check if camera is in PTP mode and unmount memory card");
                msgBox.exec();
                ui->frame->setText("error opening camera, please check if camera is setup to PTP mode and unmount memory card from the system. Quit any application that browses the memory card. In doubt remove flash card and try again.");
                return;
            }
        }
        break;

        default:
            exit(1);
    }
    resizeFrame = false;
    resizeFrame100Percent = false;

    tmrTimer = new QTimer(this);

    // Start the main "loop" that processes the frame update
    connect(tmrTimer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));

    startCapture();

}
Beispiel #3
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);    

    timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));

    connect(ui->actionStart, SIGNAL(triggered()),this, SLOT(menuStart_click()));
    connect(ui->actionStop, SIGNAL(triggered()), this, SLOT(menuStop_click()));
    connect(ui->btnRebuild, SIGNAL(clicked()),this, SLOT(btnRebuild_click()));
}
Beispiel #4
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    webCam.open(0);

    if(webCam.isOpened()==false){
        ui->Radius->appendPlainText("Error: WebCam is not accessible.");
        return;
    }
    Timer= new QTimer(this);
    connect(Timer, SIGNAL(timeout()),this, SLOT(processFrameAndUpdateGUI()));
    Timer->start(20); //Thread would be preferrable here.


}
void MainWindow::slotEnableVR(bool isEnabled){
    if((isEnabled)&&(capWebcam.isOpened() == false)){
        capWebcam.open(0);

        if(capWebcam.isOpened() == false)
        {
            return;
        }

        tmrTimer = new QTimer(this);
        connect(tmrTimer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));
        tmrTimer->start(20);
        ui->vrEnabler->setEnabled(false);
        ui->VRTab->setEnabled(true);
        ui->vrMorphControl->setEnabled(true);
    }else{
        //capWebcam.release();
    }
}
Beispiel #6
0
ishara::ishara(QWidget *parent) : QMainWindow(parent), ui(new Ui::ishara) {

  if (QSystemTrayIcon::isSystemTrayAvailable()) {
      /*
       * init system tray
       */
      maximizeAction = new QAction(tr("&Show"), this);
      connect(maximizeAction, SIGNAL(triggered()), this, SLOT(show()));
      quitAction = new QAction(tr("&Quit"), this);
      connect(quitAction, SIGNAL(triggered()), this, SLOT(on_actionQuit_triggered()));

      startStopAction = new QAction(tr("S&tart"), this);
      connect(startStopAction, SIGNAL(triggered()), this, SLOT(startStop()));

      trayIconMenu = new QMenu(this);
      trayIconMenu->addAction(maximizeAction);
      trayIconMenu->addSeparator();
      trayIconMenu->addAction(startStopAction);
      trayIconMenu->addSeparator();
      trayIconMenu->addAction(quitAction);
      trayIcon = new QSystemTrayIcon(this);
      trayIcon->setContextMenu(trayIconMenu);

      connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
      const QIcon *icon = new QIcon(":/prefix1/res/ishara.ico");
      trayIcon->setIcon(*icon);
      trayIcon->hide();
    }

  /*
   * initializing some variables from the configuration file
   */
  settings.sync();

  hMin1 = settings.value("hMin1", 0).toInt();
  hMax1 = settings.value("hMax1", 179).toInt();
  sMin1 = settings.value("sMin1", 0).toInt();
  sMax1 = settings.value("sMax1", 255).toInt();
  vMin1 = settings.value("vMin1", 0).toInt();
  vMax1 = settings.value("vMax1", 255).toInt();

  hMin2 = settings.value("hMin2", 0).toInt();
  hMax2 = settings.value("hMax2", 179).toInt();
  sMin2 = settings.value("sMin2", 0).toInt();
  sMax2 = settings.value("sMax2", 255).toInt();
  vMin2 = settings.value("vMin2", 0).toInt();
  vMax2 = settings.value("vMax2", 255).toInt();

  pinchR = settings.value("pinchR", 66).toInt();
  rightClickDealy = settings.value("rightClickDealy", 20).toInt();
  smoothFac = settings.value("smoothFac", 8).toInt();

  cfgScroll = settings.value("cfgScroll", 2).toInt();
  cfgLClick = settings.value("cfgLClick", 2).toInt();
  cfgRClick = settings.value("cfgRClick", 2).toInt();

  /*
   * initializing some more variables
   */
  CAM_INDEX = -1;
  mcorInit_X = 0;
  mcorInit_Y = 0;
  msPoint_X = 0;
  msPoint_Y = 0;
  xScreenHeight = 0;
  xScreenWidth = 0;
  startEmulation = 0;
  motionEnable = 0;
  tmpX = 0;
  tmpY = 0;
  waitCountRC = 0;
  pinch = 0;
  ifScrollUp = 0;
  ifScrollDwn = 0;
  btnPress = 1;
  btnRel = 1;
  devSelActive = 0;
  iteration = 0;

  /*
   * setting up the user interface
   */
  ui->setupUi(this);

  /*
   * setting up smoothness factor slider; smoothness factor is the maximum allowable
   * distance the index finger can move without effecting any change in the mouse
   * cursor position; a reasonable value for this would be 6 to 8 depending on the user
   */
  ui->sliderSmoothFac->setRange(2, 12);
  ui->sliderSmoothFac->setValue(smoothFac);

  /*
   * setting up color selection sliders; the HSV range for the two color markers to be
   * detected are set using these sliders
   */
  ui->sliderHMin1->setRange(0, 179);
  ui->sliderHMax1->setRange(0, 179);
  ui->sliderSMin1->setRange(0, 255);
  ui->sliderSMax1->setRange(0, 255);
  ui->sliderVMin1->setRange(0, 255);
  ui->sliderVMax1->setRange(0, 255);

  ui->sliderHMin2->setRange(0, 179);
  ui->sliderHMax2->setRange(0, 179);
  ui->sliderSMin2->setRange(0, 255);
  ui->sliderSMax2->setRange(0, 255);
  ui->sliderVMin2->setRange(0, 255);
  ui->sliderVMax2->setRange(0, 255);

  ui->sliderHMin1->setValue(hMin1);
  ui->sliderHMax1->setValue(hMax1);
  ui->sliderSMin1->setValue(sMin1);
  ui->sliderSMax1->setValue(sMax1);
  ui->sliderVMin1->setValue(vMin1);
  ui->sliderVMax1->setValue(vMax1);

  ui->sliderHMin2->setValue(hMin2);
  ui->sliderHMax2->setValue(hMax2);
  ui->sliderSMin2->setValue(sMin2);
  ui->sliderSMax2->setValue(sMax2);
  ui->sliderVMin2->setValue(vMin2);
  ui->sliderVMax2->setValue(vMax2);

  /*
   * setting up color selection spinboxes; the values determining the HSV range can
   * also be altered using the spin boxes
   */
  ui->spnHMin1->setRange(0, 179);
  ui->spnHMax1->setRange(0, 179);
  ui->spnSMin1->setRange(0, 255);
  ui->spnSMax1->setRange(0, 255);
  ui->spnVMin1->setRange(0, 255);
  ui->spnVMax1->setRange(0, 255);

  ui->spnHMin2->setRange(0, 179);
  ui->spnHMax2->setRange(0, 179);
  ui->spnSMin2->setRange(0, 255);
  ui->spnSMax2->setRange(0, 255);
  ui->spnVMin2->setRange(0, 255);
  ui->spnVMax2->setRange(0, 255);

  ui->spnHMin1->setValue(hMin1);
  ui->spnHMax1->setValue(hMax1);
  ui->spnSMin1->setValue(sMin1);
  ui->spnSMax1->setValue(sMax1);
  ui->spnVMin1->setValue(vMin1);
  ui->spnVMax1->setValue(vMax1);

  ui->spnHMin2->setValue(hMin2);
  ui->spnHMax2->setValue(hMax2);
  ui->spnSMin2->setValue(sMin2);
  ui->spnSMax2->setValue(sMax2);
  ui->spnVMin2->setValue(vMin2);
  ui->spnVMax2->setValue(vMax2);

  /*
   * setting up pinchR slider; the pinchR variable determines the maximum distance
   * between the center co-ordinates of the two color markers when detecting a Pinch
   */
  ui->sliderPinchR->setRange(10, 120);
  ui->sliderPinchR->setValue(pinchR);

  /*
   * setting up pinchR spinbox; the value of pinchR can also be altered using a spinbox
   */
  ui->spnPinchR->setRange(10, 120);
  ui->spnPinchR->setValue(pinchR);

  /*
   * setting up rightClickDealy slider; the variables rightClickDealy
   * determines the loop count while determining a right click
   */
  ui->sliderRCRC->setRange(10, 30);
  ui->sliderRCRC->setValue(rightClickDealy);

  /*
   * setting up rightClickDealy spinbox, the usage is obvious
   */
  ui->spnRCRC->setRange(10, 30);
  ui->spnRCRC->setValue(rightClickDealy);

  /*
   * setting up check boxes to enable/disable functionalities
   */
  if(cfgScroll > 0) {
      ui->chkEnableScroll->setChecked(true);
    }
  else {
      ui->chkEnableScroll->setChecked(false);
    }

  if(cfgLClick > 0) {
      ui->chkEnableLeftClick->setChecked(true);
    }
  else {
      ui->chkEnableLeftClick->setChecked(false);
    }

  if(cfgRClick > 0) {
      ui->chkEnableRightClick->setChecked(true);
    }
  else {
      ui->chkEnableRightClick->setChecked(false);
    }

  /*
   * camera selection in Linux
   */
  for(deviceIndex = 0 ; deviceIndex < 64 ; ++deviceIndex) {
      QString device = "/dev/video" + QString::number(deviceIndex);
      QByteArray array = device.toLocal8Bit();
      char *buffer = array.data();
      if((fd = open(buffer, O_RDONLY)) != -1) {
          if(ioctl(fd, VIDIOC_QUERYCAP, &vidiocap) == -1) {
              ui->comboSelectCam->addItem(device);
            }
          else {
              ui->comboSelectCam->addItem(QString::fromLocal8Bit(reinterpret_cast<const char*>(vidiocap.card)));
            }
          if(CAM_INDEX == -1) {
              CAM_INDEX = deviceIndex;
            }
        }
    }

  /*
   * camera operations
   */
  camOpen();

  capture.read(src);
  if(src.empty() == true) {
      ui->statusBar->showMessage("Read error!");
      return;
    }

  /*
   * get the screen size
   */
  getxScreenSize();

  /*
   * time warp - make it so
   */
  timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));
  timer->start(20);

  /*
   * clean up the crap
   */
  src.release();
  frame.release();
  imgHSV.release();
}
Beispiel #7
0
ishara::ishara(QWidget *parent) : QMainWindow(parent), ui(new Ui::ishara) {
    /**
     * Initializing some variables from the configuration file.
     */
    QString f = QDir::homePath() + QDir::separator() + ".ishara";

    QFile conf(f);
    if(conf.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&conf);
        for(linecount = 0 ; linecount < 18 ; ++linecount) {
            QString line = in.readLine();
            storedval[linecount] = line.toInt();
        }

        hMin1 = storedval[0];
        hMax1 = storedval[1];
        sMin1 = storedval[2];
        sMax1 = storedval[3];
        vMin1 = storedval[4];
        vMax1 = storedval[5];

        hMin2 = storedval[6];
        hMax2 = storedval[7];
        sMin2 = storedval[8];
        sMax2 = storedval[9];
        vMin2 = storedval[10];
        vMax2 = storedval[11];

        pinchR = storedval[12];
        rightClkCount = storedval[13];
        smoothFac = storedval[14];

        cfgScroll = storedval[15];
        cfgLClick = storedval[16];
        cfgRClick = storedval[17];
    }
    else {
        hMin1 = 0;
        hMax1 = 179;
        sMin1 = 0;
        sMax1 = 255;
        vMin1 = 0;
        vMax1 = 255;

        hMin2 = 0;
        hMax2 = 179;
        sMin2 = 0;
        sMax2 = 255;
        vMin2 = 0;
        vMax2 = 255;

        pinchR = 66;
        rightClkCount = 20;
        smoothFac = 8;

        cfgScroll = 2;
        cfgLClick = 2;
        cfgRClick = 2;
    }

    /**
     * Initializing some more variables.
     */
    CAM_INDEX = -1;
    mcorInit_X = 0;
    mcorInit_Y = 0;
    msPoint_X = 0;
    msPoint_Y = 0;
    xScreenHeight = 0;
    xScreenWidth = 0;
    startEmulation = 0;
    tmpX = 0;
    tmpY = 0;
    waitCount = 0;
    pinch = 0;
    ifScrollUp = 0;
    ifScrollDwn = 0;
    btnPress = 1;
    btnRel = 1;
    devSelActive = 0;

    /**
     * Setting up the user interface.
     */
    ui->setupUi(this);

    /**
     * Setting up smoothness factor slider. Smoothness factor is the maximum allowable
     * distance the index finger can move without effecting any change in the mouse
     * cursor position. A reasonable value for this would be 6 to 8 depending on the user.
     */
    ui->sliderSmoothFac->setRange(4, 12);
    ui->sliderSmoothFac->setValue(smoothFac);

    /**
     * Setting up color selection sliders. The HSV range for the two color markers to be
     * detected are set using these sliders.
     */
    ui->sliderHMin1->setRange(0, 179);
    ui->sliderHMax1->setRange(0, 179);
    ui->sliderSMin1->setRange(0, 255);
    ui->sliderSMax1->setRange(0, 255);
    ui->sliderVMin1->setRange(0, 255);
    ui->sliderVMax1->setRange(0, 255);

    ui->sliderHMin2->setRange(0, 179);
    ui->sliderHMax2->setRange(0, 179);
    ui->sliderSMin2->setRange(0, 255);
    ui->sliderSMax2->setRange(0, 255);
    ui->sliderVMin2->setRange(0, 255);
    ui->sliderVMax2->setRange(0, 255);

    ui->sliderHMin1->setValue(hMin1);
    ui->sliderHMax1->setValue(hMax1);
    ui->sliderSMin1->setValue(sMin1);
    ui->sliderSMax1->setValue(sMax1);
    ui->sliderVMin1->setValue(vMin1);
    ui->sliderVMax1->setValue(vMax1);

    ui->sliderHMin2->setValue(hMin2);
    ui->sliderHMax2->setValue(hMax2);
    ui->sliderSMin2->setValue(sMin2);
    ui->sliderSMax2->setValue(sMax2);
    ui->sliderVMin2->setValue(vMin2);
    ui->sliderVMax2->setValue(vMax2);
    /**
     * Setting up color selection spinboxes. The values determining the HSV range can
     * also be altered using the spin boxes.
     */
    ui->spnHMin1->setRange(0, 179);
    ui->spnHMax1->setRange(0, 179);
    ui->spnSMin1->setRange(0, 255);
    ui->spnSMax1->setRange(0, 255);
    ui->spnVMin1->setRange(0, 255);
    ui->spnVMax1->setRange(0, 255);

    ui->spnHMin2->setRange(0, 179);
    ui->spnHMax2->setRange(0, 179);
    ui->spnSMin2->setRange(0, 255);
    ui->spnSMax2->setRange(0, 255);
    ui->spnVMin2->setRange(0, 255);
    ui->spnVMax2->setRange(0, 255);

    ui->spnHMin1->setValue(hMin1);
    ui->spnHMax1->setValue(hMax1);
    ui->spnSMin1->setValue(sMin1);
    ui->spnSMax1->setValue(sMax1);
    ui->spnVMin1->setValue(vMin1);
    ui->spnVMax1->setValue(vMax1);

    ui->spnHMin2->setValue(hMin2);
    ui->spnHMax2->setValue(hMax2);
    ui->spnSMin2->setValue(sMin2);
    ui->spnSMax2->setValue(sMax2);
    ui->spnVMin2->setValue(vMin2);
    ui->spnVMax2->setValue(vMax2);

    /**
     * Setting up pinchR slider. The pinchR variable determines the maximum distance
     * between the center co-ordinates of the two color markers when detecting a Pinch.
     */
    ui->sliderPinchR->setRange(10, 120);
    ui->sliderPinchR->setValue(pinchR);
    /**
     * Setting up pinchR spinbox. The value of pinchR can also be altered using a spinbox.
     */
    ui->spnPinchR->setRange(10, 120);
    ui->spnPinchR->setValue(pinchR);

    /**
     * Setting up rightClkCount slider. The variable rightClkCount
     * determines the loop count while determining a right click.
     */
    ui->sliderRCRC->setRange(10, 30);
    ui->sliderRCRC->setValue(rightClkCount);
    /**
     * Setting up rightClkCount spinbox, the usage is obvious.
     */
    ui->spnRCRC->setRange(10, 30);
    ui->spnRCRC->setValue(rightClkCount);

    /**
     * Setting up check boxes to enable/disable functionalities.
     */
    if(cfgScroll > 0) {
        ui->chkEnableScroll->setChecked(true);
    }
    else {
        ui->chkEnableScroll->setChecked(false);
    }

    if(cfgLClick > 0) {
        ui->chkEnableLeftClick->setChecked(true);
    }
    else {
        ui->chkEnableLeftClick->setChecked(false);
    }

    if(cfgRClick > 0) {
        ui->chkEnableRightClick->setChecked(true);
    }
    else {
        ui->chkEnableRightClick->setChecked(false);
    }

    /**
     * Camera selection in Linux.
     */
    for(deviceIndex = 0 ; deviceIndex < 64 ; ++deviceIndex) {
        QString device = "/dev/video" + QString::number(deviceIndex);
        QByteArray array = device.toLocal8Bit();
        char *buffer = array.data();
        if((fd = open(buffer, O_RDONLY)) != -1) {
            if(ioctl(fd, VIDIOC_QUERYCAP, &vidiocap) == -1) {
                ui->comboSelectCam->addItem(device);
            }
            else {
                ui->comboSelectCam->addItem(QString::fromLocal8Bit(reinterpret_cast<const char*>(vidiocap.card)));
            }
            if(CAM_INDEX == -1) {
                CAM_INDEX = deviceIndex;
            }
        }
    }

    /**
     * Camera operations.
     */
    camOpen();

    capture.read(src);
    if(src.empty() == true) {
        ui->statusBar->showMessage("Read error!");
        return;
    }

    /**
     * Time warp.
     */
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(processFrameAndUpdateGUI()));
    timer->start(20);

    /**
     * Clean up the crap.
     */
    src.release();
    frame.release();
    imgHSV.release();
}