Issues streaming US data from PlusServer to Slicer via OpenIGTLink

Hi All,

OS: Win10
Slicer: 5.2.2 + Associated extensions SlicerIGT, OpenIGTLink

We are currently trying to stream data from an ultrasound scanner to slicer via PlusServer. Sofar, we have integrated the scanner into pluslib as a device and are able to render 2D and 3D images in fCal. This step confirms that the integration within pluslib is successful. (See image below)

However, when connecting to Slicer via PlusServer and OpenIGTLink, we never see an image being streamed in as a node (see image below). If you notice the pannel to the left, we only ever see the the status ‘node’ but no image node.

Also, attached is the simple config file that, based on the documentation, should allow us to stream images into slicer. Any help would be appraciated. No obvious errors in the logs.

<PlusConfiguration version="2.0">
  <DataCollection StartupDelaySec="6.0">
   <DeviceSet Name="PlusServer: UltrasoundStreaming" Description="Broadcasting 2D/3D US scans through OpenIGTLink" />
    <Device Id="VideoDevice" Type="USStreamerDevice" IPAddress="10.228.91.93" Port="">
      <DataSources>
        <DataSource Type="Video" Id="Video" PortUsImageOrientation="MF" BufferSize="100"/>
      </DataSources>
      <OutputChannels>
        <OutputChannel Id="VideoStream" VideoDataSourceId="Video" />
      </OutputChannels>
    </Device>
  </DataCollection>

  <CoordinateDefinitions>

    <Transform From="Image" To="Reference"
      Matrix="
        1	0	0	0
        0	1	0	0
        0	0	1	0
        0	0	0	1"
       Date="2011.12.06 17:57:00"/>

  </CoordinateDefinitions>

  <PlusOpenIGTLinkServer
    MaxNumberOfIgtlMessagesToSend="1"
    MaxTimeSpentWithProcessingMs="50"
    ListeningPort="18945"
    SendValidTransformsOnly="true"
    OutputChannelId="VideoStream" >
    <DefaultClientInfo>
      <MessageTypes>
        <Message Type="IMAGE"/>
      </MessageTypes>
      <ImageNames>
        <Image Name="Image" EmbeddedTransformToFrame="Reference"/>
      </ImageNames>
    </DefaultClientInfo>
  </PlusOpenIGTLinkServer>
</PlusConfiguration>

It would be helpful if you could include the PlusServer log.

Hi Kyle, you can find the log in the following gist. I have redacted parts of it since its mostly just printing out framecount.

I assume that the redaction removed the “Received new client connection” message from the log. Otherwise I don’t see anything suspicious in the log.

Can you also share your Slicer log?

Yes, the “Received new client connection (client 1 at 127.0.0.1:18944). Number of connected clients: 1|” is present.

Slicer log created just now

[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Session start time .......: 2023-03-07 16:37:10
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Slicer version ...........: 5.2.2 (revision 31382 / fb46bd1) win-amd64 - installed release
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Operating system .........: Windows /  Professional / (Build 19044, Code Page 65001) - 64-bit
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Memory ...................: 32571 MB physical, 40763 MB virtual
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - CPU ......................: GenuineIntel , 12 cores, 12 logical processors
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - VTK configuration ........: OpenGL2 rendering, TBB threading
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Qt configuration .........: version 5.15.2, with SSL, requested OpenGL 3.2 (compatibility profile)
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Internationalization .....: disabled, language=
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Developer mode ...........: disabled
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Application path .........: C:/Users/320022720/AppData/Local/NA-MIC/Slicer 5.2.2/bin
[DEBUG][Qt] 07.03.2023 16:37:10 [] (unknown:0) - Additional module paths ..: NA-MIC/Extensions-31382/SlicerIGSIO/lib/Slicer-5.2/qt-loadable-modules, NA-MIC/Extensions-31382/SlicerIGT/lib/Slicer-5.2/qt-loadable-modules, NA-MIC/Extensions-31382/SlicerIGT/lib/Slicer-5.2/qt-scripted-modules, NA-MIC/Extensions-31382/SlicerOpenIGTLink/lib/Slicer-5.2/qt-loadable-modules, NA-MIC/Extensions-31382/SlicerOpenIGTLink/lib/Slicer-5.2/qt-scripted-modules
[DEBUG][Python] 07.03.2023 16:37:21 [Python] (C:\Users\v\AppData\Local\NA-MIC\Slicer 5.2.2\lib\Slicer-5.2\qt-scripted-modules\SubjectHierarchyPlugins\AbstractScriptedSubjectHierarchyPlugin.py:38) - Scripted subject hierarchy plugin registered: Annotations
[DEBUG][Python] 07.03.2023 16:37:24 [Python] (C:\Users\v\AppData\Local\NA-MIC\Slicer 5.2.2\lib\Slicer-5.2\qt-scripted-modules\SubjectHierarchyPlugins\AbstractScriptedSubjectHierarchyPlugin.py:38) - Scripted subject hierarchy plugin registered: SegmentEditor
[DEBUG][Python] 07.03.2023 16:37:24 [Python] (C:\Users\v\AppData\Local\NA-MIC\Slicer 5.2.2\lib\Slicer-5.2\qt-scripted-modules\SubjectHierarchyPlugins\AbstractScriptedSubjectHierarchyPlugin.py:38) - Scripted subject hierarchy plugin registered: SegmentStatistics
[DEBUG][Qt] 07.03.2023 16:37:25 [] (unknown:0) - Switch to module:  "Welcome"
[DEBUG][Qt] 07.03.2023 16:37:34 [] (unknown:0) - Switch to module:  "OpenIGTLinkIF"
[INFO][VTK] 07.03.2023 16:37:39 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:38:05 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:38:39 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:38:46 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:38:56 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:39:12 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1389) - Disconnected: localhost:18944
[INFO][VTK] 07.03.2023 16:40:31 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:40:46 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1389) - Disconnected: localhost:18944
[INFO][VTK] 07.03.2023 16:40:47 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:40:53 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1389) - Disconnected: localhost:18944
[INFO][VTK] 07.03.2023 16:46:50 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1365) - Connected: localhost:18944
[INFO][VTK] 07.03.2023 16:47:00 [vtkMRMLIGTLConnectorNode (000001D3A609E100)] (D:\D\S\S-0-E-b\SlicerOpenIGTLink\OpenIGTLinkIF\MRML\vtkMRMLIGTLConnectorNode.cxx:1389) - Disconnected: localhost:18944

I don’t see anything out of place in either log. Try disabling SendValidTransformsOnly.

You may need to set your tool status in the device code.

Hi @Sunderlandkyl ,

So it turns out, the framecounter was not updating correctly (error on my part). This is my hypothesis. Since it was always sending frame ‘0’, no new images were timestamped and hence it was failing to send ‘new’ frames so to speak. When I tried temporal calibration, it would not generate any results. Looking at the errors I noticed messages that said that the acquisition was too fast. Tried saving recodrings, which also had same issue (recording can’t keep up). So debugging/stepping throught the temporal caibration code showed a stack of recoded frames as null with similar time stamps. This helped me trace it back to a bug on my part.

Thanks again for taking the time!

Best,
Vipul

1 Like