Utilisation de CameraServer sur le roboRIO

Programme CameraServer élémentaire

Le programme suivant démarre la capture automatique d’une caméra USB comme la Microsoft LifeCam connectée au roboRIO. Dans ce mode, la caméra capturera des images et les enverra au tableau de bord. Pour visualiser les images, créez un gadget-widget « CameraServer Stream Viewer » à l’aide du menu « View », puis « Add » -ajouter- dans le tableau de bord. Les images ne sont pas traitées et sont simplement transmises de la caméra au tableau de bord.

By going to View then "Add..." then "CameraServer Stream Viewer" SmartDashboard adds a stream viewer widget.
package org.usfirst.frc.team190.robot;

import edu.wpi.first.cameraserver.CameraServer;
import edu.wpi.first.wpilibj.IterativeRobot;

public class Robot extends IterativeRobot {

  public void robotInit() {
    CameraServer.getInstance().startAutomaticCapture();
  }
}

Programme avancé de serveur de caméras

Dans l’exemple suivant, un thread créé dans robotInit() obtient l’instance de Camera Server. Chaque image de la vidéo est traitée individuellement, dans ce cas, la conversion d’une image couleur (BGR), Bleu, Vert, Rouge en échelle de gris à l’aide de la méthode OpenCV cvtColor(). Les images résultantes sont ensuite transmises au flux de sortie et envoyées au tableau de bord. Vous pouvez remplacer l’opération cvtColor par tout code de traitement d’image nécessaire à votre application. Vous pouvez même annoter l’image à l’aide des méthodes OpenCV pour écrire des informations de ciblage sur l’image envoyée au tableau de bord.

package org.usfirst.frc.team190.robot;

import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import edu.wpi.cscore.CvSink;
import edu.wpi.cscore.CvSource;
import edu.wpi.cscore.UsbCamera;
import edu.wpi.first.cameraserver.CameraServer;
import edu.wpi.first.wpilibj.IterativeRobot;

public class Robot extends IterativeRobot {

  public void robotInit() {
    new Thread(() -> {
      UsbCamera camera = CameraServer.getInstance().startAutomaticCapture();
      camera.setResolution(640, 480);

      CvSink cvSink = CameraServer.getInstance().getVideo();
      CvSource outputStream = CameraServer.getInstance().putVideo("Blur", 640, 480);

      Mat source = new Mat();
      Mat output = new Mat();

      while(!Thread.interrupted()) {
        if (cvSink.grabFrame(source) == 0) {
          continue;
        }
        Imgproc.cvtColor(source, output, Imgproc.COLOR_BGR2GRAY);
        outputStream.putFrame(output);
      }
    }).start();
  }
}

Notez que dans ces exemples, la méthode PutVideo() écrit la vidéo dans un flux avec nom. Pour afficher ce flux sur Shuffleboard, le chosir. Dans ce cas, il s’agit de « Blur » pour le programme Java et de « Gray » pour l’exemple C++.