groupgets / GetThermal

Cross-platform USB thermal camera viewer
MIT License
228 stars 90 forks source link

Lepton 3.1R - functional but no image on GetThermal #62

Open mhparant opened 5 months ago

mhparant commented 5 months ago

Hello

I just received my Lepton 3.1R and I am unable to view the live image on GetThermal for Mac (screenshot attached). I am able to see the streaming image on Zoom and MaxMSP.

I reinstalled GetThermal for Mac but it's the same sad result.

Someone can help me with this?

Screen Shot 2024-01-23 at 12 52 13 PM
mhparant commented 5 months ago

Anybody here reading our questions? Seems like this app needs update for the new Lepton 3.1R.

kekiefer commented 5 months ago

At some point Apple changed the way permissions to get access to USB devices worked. It could be that you will have better luck running the program from the command line, with sudo. Also, this way there will be some logging output, in case there is something special that needs to happen to run the 3.1R.

mhparant commented 5 months ago

Hello Kurt Is "sudo GetThermal" the proper command line? My terminal doesn't find that command sudo: GetThermal: command not found

Screen Shot 2024-01-29 at 10 19 57 AM
metanav commented 5 months ago

How did you install it?

mhparant commented 5 months ago

You mean the software? I downloaded GetThermal-v0.1.3-MacOS.dmg and GetThermal-v0.1.4-MacOS.dmg I tried both versions. Same result blank screen on GetThermal 1.3 and 1.4 for the Lepton 3.1R But with Lepton 3.5, I can see the live image.

griffin175 commented 5 months ago

You need to tell the command line to run the program. Refer to the mac OS terminal user guide

~Try this: sudo open -a GetThermal.pro~ Strike that, the .pro is part of the source code, not the executable. Find where you installed the program and run with sudo open -a from there.

metanav commented 5 months ago

You mean the software? I downloaded GetThermal-v0.1.3-MacOS.dmg and GetThermal-v0.1.4-MacOS.dmg I tried both versions. Same result blank screen on GetThermal 1.3 and 1.4 for the Lepton 3.1R But with Lepton 3.5, I can see the live image.

The binaries should be inside the /Applications/GetThermal.app/Contents/MacOS directory.

griffin175 commented 5 months ago

After sudo running the GetThermal appimage on Ubuntu 23.10 with a Lepton 3.1R I see the failure: UVC_GetAttribute failed: -9.

The error happens in this function call in 'leptonvariation.cpp':

LEP_RESULT LeptonVariation::UVC_GetAttribute(LEP_COMMAND_ID commandID,
                            LEP_ATTRIBUTE_T_PTR attributePtr,
                            LEP_UINT16 attributeWordLength)
{
    int unit_id;
    int control_id;
    int result;

    unit_id = leptonCommandIdToUnitId(commandID);
    if (unit_id < 0)
        return (LEP_RESULT)unit_id;

    control_id = ((commandID & 0x00ff) >> 2) + 1;

    // Size in 16-bit words needs to be in bytes
    attributeWordLength *= 2;

    QMutexLocker lock(&m_mutex);
    result = uvc_get_ctrl(devh, unit_id, control_id, attributePtr, attributeWordLength, UVC_GET_CUR);
    if (result != attributeWordLength)
    {
        printf("UVC_GetAttribute failed: %d", result);
        return LEP_COMM_ERROR_READING_COMM;
    }

    return LEP_OK;
}

The 3.1R CCI Command ID is new 05-070850-. I think that's the main issue here. If FLIR has an update for the Lepton SDK, that should include support for the 3.1R.

Also, line 136 of leptonvariation.cpp needs || getOemFlirPartNumber().contains("500-0758-01") added to bool LeptonVariation::getSupportsRadiometry()

Adding complete terminal output text:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
UVC initialized
Device found
Device opened
DEVICE CONFIGURATION (1e4e:0100/003d0018-500a-564e-3536-203400000000) ---
Status: idle
VideoControl:
    bcdUVC: 0x0100
VideoStreaming(1):
    bEndpointAddress: 129
    Formats:
    UncompressedFormat(1)
          bits per pixel: 16
          GUID: 5559565900001000800000aa00389b71 (UYVY)
          default frame: 1
          aspect ratio: 0x0
          interlace flags: 00
          copy protect: 00
            FrameDescriptor(1)
              capabilities: 02
              size: 80x60
              bit rate: 691200-691200
              max frame size: 9600
              default interval: 1/9
              interval[0]: 1/9
    UncompressedFormat(2)
          bits per pixel: 16
          GUID: 5931362000001000800000aa00389b71 (Y16 )
          default frame: 1
          aspect ratio: 0x0
          interlace flags: 00
          copy protect: 00
            FrameDescriptor(1)
              capabilities: 02
              size: 80x60
              bit rate: 691200-691200
              max frame size: 9600
              default interval: 1/9
              interval[0]: 1/9
            FrameDescriptor(2)
              capabilities: 02
              size: 80x63
              bit rate: 725760-725760
              max frame size: 10080
              default interval: 1/9
              interval[0]: 1/9
    UncompressedFormat(3)
          bits per pixel: 8
          GUID: 5938202000001000800000aa00389b71 (Y8  )
          default frame: 1
          aspect ratio: 0x0
          interlace flags: 00
          copy protect: 00
            FrameDescriptor(1)
              capabilities: 02
              size: 80x60
              bit rate: 345600-345600
              max frame size: 4800
              default interval: 1/9
              interval[0]: 1/9
    UncompressedFormat(4)
          bits per pixel: 16
          GUID: 5247425000001000800000aa00389b71 (RGBP)
          default frame: 1
          aspect ratio: 0x0
          interlace flags: 00
          copy protect: 00
            FrameDescriptor(1)
              capabilities: 02
              size: 80x60
              bit rate: 691200-691200
              max frame size: 9600
              default interval: 1/9
              interval[0]: 1/9
    UncompressedFormat(5)
          bits per pixel: 24
          GUID: 7deb36e44f52ce119f530020af0ba770 (}�6�OR��S)
          default frame: 1
          aspect ratio: 0x0
          interlace flags: 00
          copy protect: 00
            FrameDescriptor(1)
              capabilities: 02
              size: 80x60
              bit rate: 1036800-1036800
              max frame size: 14400
              default interval: 1/9
              interval[0]: 1/9
END DEVICE CONFIGURATION
Initializing lepton SDK with UVC backend...
Using GroupGets PureThermal (fw:v1.3.0) with firmware 003d0018-500a-564e-3536-203400000000
OK
Found extension unit ID 3, controls: 000fffff, GUID: 70 74 31 2d 6c 65 70 2d 61 67 63 2d 30 30 30 30
Found extension unit ID 4, controls: 7fffffbf, GUID: 70 74 31 2d 6c 65 70 2d 6f 65 6d 2d 30 30 30 30
Found extension unit ID 5, controls: 3ffcffc81ffffff, GUID: 70 74 31 2d 6c 65 70 2d 72 61 64 2d 30 30 30 30
Found extension unit ID 6, controls: 007fffff, GUID: 70 74 31 2d 6c 65 70 2d 73 79 73 2d 30 30 30 30
Found extension unit ID 7, controls: 00003fff, GUID: 70 74 31 2d 6c 65 70 2d 76 69 64 2d 30 30 30 30
Found extension unit ID 21, controls: 07ff9ff9, GUID: 70 74 31 2d 6c 65 70 2d 72 61 64 32 30 30 30 30
Found extension unit ID 254, controls: 0000003f, GUID: 70 74 31 2d 6c 65 70 2d 63 75 73 74 30 30 30 30
bmHint: 0000
bFormatIndex: 5
bFrameIndex: 1
dwFrameInterval: 1111111
wKeyFrameRate: 0
wPFrameRate: 0
wCompQuality: 0
wCompWindowSize: 0
wDelay: 0
dwMaxVideoFrameSize: 14400
dwMaxPayloadTransferSize: 962
bInterfaceNumber: 1
UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9Estimated / selected altsetting bandwith : 13 / 642. 
Streaming...
QQmlExpression: Expression qrc:/ViewerForm.ui.qml:68:22 depends on non-NOTIFYable properties:
    LeptonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/ViewerForm.ui.qml:53:30 depends on non-NOTIFYable properties:
    LeptonVariation::supportsRadiometry
UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9Surface set. Supported formats: 18 19 22 23 20 21 3 1 10 8 5
Surface supports format 3 width 80 height 60_xgeWireToEvent: Unknown extension 145, this should never happen.
QQmlExpression: Expression qrc:/lepton/InfoControls.qml:51:23 depends on non-NOTIFYable properties:
    LeptonVariation::ptFirmwareVersion
QQmlExpression: Expression qrc:/lepton/InfoControls.qml:46:23 depends on non-NOTIFYable properties:
    LeptonVariation::oemDspSoftwareVersion
QQmlExpression: Expression qrc:/lepton/InfoControls.qml:41:23 depends on non-NOTIFYable properties:
    LeptonVariation::oemGppSoftwareVersion
QQmlExpression: Expression qrc:/lepton/InfoControls.qml:36:23 depends on non-NOTIFYable properties:
    LeptonVariation::sysFlirSerialNumber
QQmlExpression: Expression qrc:/lepton/InfoControls.qml:31:23 depends on non-NOTIFYable properties:
    LeptonVariation::oemFlirPartNumber
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqNormalizationFactor value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqEmptyCount value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqMidPoint value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqBinExtension value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqClipLimitLow value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqClipLimitHigh value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqMaxGain value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcHeqDampingFactor value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcLinearDampeningFactor value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcLinearMidPoint value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcLinearMaxGain value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcLinearHistogramClipPercent value: 0
qml: model: LeptonVariation(0x24715f0, "LeptonVariation") property: agcLinearHistogramTailSize value: 0
QQmlExpression: Expression qrc:/lepton/AgcControls.qml:11:14 depends on non-NOTIFYable properties:
    LeptonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/lepton/VidControls.qml:69:22 depends on non-NOTIFYable properties:
    LeptonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/lepton/VidControls.qml:62:22 depends on non-NOTIFYable properties:
    LeptonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/lepton/VidControls.qml:47:22 depends on non-NOTIFYable properties:
    LeptonVariation::supportsHwPseudoColor
    LeptonVariation::supportsRadiometry
QQmlExpression: Expression qrc:/lepton/VidControls.qml:26:22 depends on non-NOTIFYable properties:
    LeptonVariation::supportsHwPseudoColor
    LeptonVariation::supportsRadiometry
UVC_GetAttribute failed: -9
mhparant commented 5 months ago

sudo open -a

griffin175 So here's a screenshot of what I tried today with your suggestion

Unfortunately It is still a blank screen for the Lepton 3.1R I had previously plugged the camera before opening the app.

Screen Shot 2024-02-10 at 11 42 16 AM

Note - If I change the parameters in GetThermal, even if I dont see the live image, and "PERFORM FFC", these settings are saved and visible in the live image in another software (like MaxMSP or Zoom). AGC is also available. It is really just the update of the live image that is missing it seems.

mhparant commented 5 months ago

I just tried with Lepton 3.5 and the same procedure shows the live image.

Screen Shot 2024-02-10 at 11 51 35 AM

But the AGC is all grayed out and it can not be modified.

Screen Shot 2024-02-10 at 11 56 32 AM

.

mhparant commented 5 months ago

At some point Apple changed the way permissions to get access to USB devices worked. It could be that you will have better luck running the program from the command line, with sudo. Also, this way there will be some logging output, in case there is something special that needs to happen to run the 3.1R.

For me the USB seems to work since I can read the live image of Lepton 3.5 but not the 3.1R. The USB cable is connected to a powered USB HUB as well.

griffin175 commented 5 months ago

Also, line 136 of leptonvariation.cpp needs || getOemFlirPartNumber().contains("500-0758-01") added to bool LeptonVariation::getSupportsRadiometry()

Turns out that addition was all that was needed. Just submitted a pull request, but you can try building my branch now: https://github.com/griffin175/GetThermal/tree/Lepton3.1R-support

mhparant commented 4 months ago

Also, line 136 of leptonvariation.cpp needs || getOemFlirPartNumber().contains("500-0758-01") added to bool LeptonVariation::getSupportsRadiometry()

Turns out that addition was all that was needed. Just submitted a pull request, but you can try building my branch now: https://github.com/griffin175/GetThermal/tree/Lepton3.1R-support

Hello griffin175, Not sure how to install the addition for GetThermal?!

badgerhoneymoon commented 3 months ago

Lepton 3.1R - trying to run on RPi OS - no cam feed. Adding "500-0758-03" doesn't help. Running via VLC on Mac - it works.

Screenshot 2024-03-30 at 12 23 23 AM

UVC initialized Device found Device opened DEVICE CONFIGURATION (1e4e:0100/004f005b-5008-564e-3536-203400000000) --- Status: idle VideoControl: bcdUVC: 0x0100 VideoStreaming(1): bEndpointAddress: 129 Formats: UncompressedFormat(1) bits per pixel: 16 GUID: 5559565900001000800000aa00389b71 (UYVY) default frame: 1 aspect ratio: 0x0 interlace flags: 00 copy protect: 00 FrameDescriptor(1) capabilities: 02 size: 160x120 bit rate: 2764800-2764800 max frame size: 38400 default interval: 1/9 interval[0]: 1/9 UncompressedFormat(2) bits per pixel: 16 GUID: 5931362000001000800000aa00389b71 (Y16 ) default frame: 1 aspect ratio: 0x0 interlace flags: 00 copy protect: 00 FrameDescriptor(1) capabilities: 02 size: 160x120 bit rate: 2764800-2764800 max frame size: 38400 default interval: 1/9 interval[0]: 1/9 FrameDescriptor(2) capabilities: 02 size: 160x122 bit rate: 2810880-2810880 max frame size: 39040 default interval: 1/9 interval[0]: 1/9 UncompressedFormat(3) bits per pixel: 8 GUID: 5938202000001000800000aa00389b71 (Y8 ) default frame: 1 aspect ratio: 0x0 interlace flags: 00 copy protect: 00 FrameDescriptor(1) capabilities: 02 size: 160x120 bit rate: 1382400-1382400 max frame size: 19200 default interval: 1/9 interval[0]: 1/9 UncompressedFormat(4) bits per pixel: 16 GUID: 5247425000001000800000aa00389b71 (RGBP) default frame: 1 aspect ratio: 0x0 interlace flags: 00 copy protect: 00 FrameDescriptor(1) capabilities: 02 size: 160x120 bit rate: 2764800-2764800 max frame size: 38400 default interval: 1/9 interval[0]: 1/9 UncompressedFormat(5) bits per pixel: 24 GUID: 7deb36e44f52ce119f530020af0ba770 (}�6�OR��S) default frame: 1 aspect ratio: 0x0 interlace flags: 00 copy protect: 00 FrameDescriptor(1) capabilities: 02 size: 160x120 bit rate: 4147200-4147200 max frame size: 57600 default interval: 1/9 interval[0]: 1/9 END DEVICE CONFIGURATION Initializing lepton SDK with UVC backend... Using GroupGets PureThermal (fw:v1.3.0) with firmware 004f005b-5008-564e-3536-203400000000 OK Found extension unit ID 3, controls: 000fffff, GUID: 70 74 31 2d 6c 65 70 2d 61 67 63 2d 30 30 30 30 Found extension unit ID 4, controls: 7fffffbf, GUID: 70 74 31 2d 6c 65 70 2d 6f 65 6d 2d 30 30 30 30 Found extension unit ID 5, controls: 3ffcffc81ffffff, GUID: 70 74 31 2d 6c 65 70 2d 72 61 64 2d 30 30 30 30 Found extension unit ID 6, controls: 007fffff, GUID: 70 74 31 2d 6c 65 70 2d 73 79 73 2d 30 30 30 30 Found extension unit ID 7, controls: 00003fff, GUID: 70 74 31 2d 6c 65 70 2d 76 69 64 2d 30 30 30 30 Found extension unit ID 21, controls: 07ff9ff9, GUID: 70 74 31 2d 6c 65 70 2d 72 61 64 32 30 30 30 30 Found extension unit ID 254, controls: 0000003f, GUID: 70 74 31 2d 6c 65 70 2d 63 75 73 74 30 30 30 30 bmHint: 0000 bFormatIndex: 5 bFrameIndex: 1 dwFrameInterval: 1111111 wKeyFrameRate: 0 wPFrameRate: 0 wCompQuality: 0 wCompWindowSize: 0 wDelay: 0 dwMaxVideoFrameSize: 57600 dwMaxPayloadTransferSize: 962 bInterfaceNumber: 1 Estimated / selected altsetting bandwith : 18 / 642. Streaming... QQmlExpression: Expression qrc:/ViewerForm.ui.qml:68:13 depends on non-NOTIFYable properties: LeptonVariation::supportsRadiometry QQmlExpression: Expression qrc:/ViewerForm.ui.qml:53:21 depends on non-NOTIFYable properties: LeptonVariation::supportsRadiometry Surface set. Supported formats: 18 19 34 22 23 20 21 3 1 10 8 5 Surface supports format 3 width 160 height 120QQmlExpression: Expression qrc:/lepton/InfoControls.qml:51:17 depends on non-NOTIFYable properties: LeptonVariation::ptFirmwareVersion QQmlExpression: Expression qrc:/lepton/InfoControls.qml:46:17 depends on non-NOTIFYable properties: LeptonVariation::oemDspSoftwareVersion QQmlExpression: Expression qrc:/lepton/InfoControls.qml:41:17 depends on non-NOTIFYable properties: LeptonVariation::oemGppSoftwareVersion QQmlExpression: Expression qrc:/lepton/InfoControls.qml:36:17 depends on non-NOTIFYable properties: LeptonVariation::sysFlirSerialNumber QQmlExpression: Expression qrc:/lepton/InfoControls.qml:31:17 depends on non-NOTIFYable properties: LeptonVariation::oemFlirPartNumber qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqNormalizationFactor value: 0 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqEmptyCount value: 0 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqMidPoint value: 128 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqBinExtension value: 0 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqClipLimitLow value: 512 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqClipLimitHigh value: 4800 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqMaxGain value: 1 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcHeqDampingFactor value: 0 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcLinearDampeningFactor value: 100 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcLinearMidPoint value: 128 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcLinearMaxGain value: 1 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcLinearHistogramClipPercent value: 0 qml: model: LeptonVariation(0x55a7642b30, "LeptonVariation") property: agcLinearHistogramTailSize value: 0 QQmlExpression: Expression qrc:/lepton/AgcControls.qml:11:5 depends on non-NOTIFYable properties: LeptonVariation::supportsRadiometry QQmlExpression: Expression qrc:/lepton/VidControls.qml:69:13 depends on non-NOTIFYable properties: LeptonVariation::supportsRadiometry QQmlExpression: Expression qrc:/lepton/VidControls.qml:62:13 depends on non-NOTIFYable properties: LeptonVariation::supportsRadiometry QQmlExpression: Expression qrc:/lepton/VidControls.qml:47:13 depends on non-NOTIFYable properties: LeptonVariation::supportsHwPseudoColor LeptonVariation::supportsRadiometry QQmlExpression: Expression qrc:/lepton/VidControls.qml:26:13 depends on non-NOTIFYable properties: LeptonVariation::supportsHwPseudoColor LeptonVariation::supportsRadiometry qrc:/lepton/VidControls.qml:163:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. Use this syntax instead: function onFoo() { ... } UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_GetAttribute failed: -9UVC_SetAttribute failed: -9UVC_SetAttribute failed: -9UVC_SetAttribute failed: -9Done streaming. Device closed UVC exited