UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-02-01)
tutorial-ustk-virtual-server-RF2D.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if (defined(USTK_HAVE_QT5) || defined(USTK_HAVE_VTK_QT)) && \
7  (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
8 
9 #include <QApplication>
10 #include <QStringList>
11 #include <QtCore/QThread>
12 
13 #include <visp3/ustk_core/usImageIo.h>
14 #include <visp3/ustk_core/usRFToPreScan2DConverter.h>
15 #include <visp3/ustk_grabber/usNetworkGrabberRF2D.h>
16 
17 #include <visp3/gui/vpDisplayGDI.h>
18 #include <visp3/gui/vpDisplayOpenCV.h>
19 #include <visp3/gui/vpDisplayX.h>
20 
21 int main(int argc, char **argv)
22 {
23  // QT application
24  QApplication app(argc, argv);
25 
26  usNetworkGrabberRF2D *qtGrabber = new usNetworkGrabberRF2D();
27  qtGrabber->setIPAddress("127.0.0.1"); // local loop, server must be running on same computer
28  qtGrabber->connectToServer();
29 
30  // record option
31  if (qApp->arguments().contains(QString("--output"))) {
32  qtGrabber->activateRecording(
33  qApp->arguments().at(qApp->arguments().indexOf(QString("--output")) + 1).toStdString());
34  }
35 
36  // setting acquisition parameters
38  header.probeId = 0; // 4DC7 id = 15
39  header.slotId = 0; // top slot id = 0
40  header.imagingMode = 12; // B-mode = 0, RF = 12
41 
43 
44  // prepare converter
46  usRFToPreScan2DConverter converter;
47 
48 // Prepare display
49 #if defined(VISP_HAVE_X11)
50  vpDisplayX *display = new vpDisplayX();
51 #elif defined(VISP_HAVE_GDI)
52  vpDisplayGDI *display = new vpDisplayGDI();
53 #elif defined(VISP_HAVE_OPENCV)
54  vpDisplayOpenCV *display = new vpDisplayOpenCV();
55 #endif
56 
57  bool captureRunning = true;
58  bool displayInit = false;
59  // qtGrabber->setVerbose(true);
60  // sending acquisition parameters
61  qtGrabber->initAcquisition(header);
62  std::cout << "init success" << std::endl;
63  qtGrabber->runAcquisition();
64 
65  std::cout << "waiting ultrasound initialisation..." << std::endl;
66 
67  // our local grabbing loop
68  do {
69  if (qtGrabber->isFirstFrameAvailable()) {
70  grabbedFrame = qtGrabber->acquire();
71 
72  std::cout << "MAIN THREAD received frame No : " << grabbedFrame->getFrameCount() << std::endl;
73 
74  converter.convert(*grabbedFrame, preScanImage);
75 
76  if (!displayInit) {
77  display->init(preScanImage);
78  displayInit = true;
79  }
80  vpDisplay::display(preScanImage);
81  vpDisplay::flush(preScanImage);
82  } else {
83  vpTime::wait(10);
84  }
85  } while (captureRunning);
86 
87  delete display;
88 
89  return app.exec();
90 }
91 
92 #else
93 int main()
94 {
95  std::cout << "You should intall Qt5 (with wigdets and network modules), and display X to run this tutorial"
96  << std::endl;
97  return 0;
98 }
99 
100 #endif
Class to store additionnal informations arriving on the network with ultrasound images grabbed,...
quint32 getFrameCount() const
Specific class to grab RF frames from the ultrasound station on the network.
void activateRecording(std::string path)
usFrameGrabbedInfo< usImageRF2D< short int > > * acquire()
bool initAcquisition(const usNetworkGrabber::usInitHeaderSent &header)
void setIPAddress(const std::string &s_ip)
2D conversion from RF signal to pre-scan image
void convert(const usImageRF2D< short int > &rfImage, usImagePreScan2D< unsigned char > &preScanImage)
VISP_EXPORT void display(const usOrientedPlane3D &plane, const vpImage< ImageDataType > &I, const vpHomogeneousMatrix &imageMworld, double Xscale=3000, double Yscale=3000, const vpColor &color=vpColor::green)
Display usOrientedPlane3D.