Hi guys,
I am using for the first time a thermal camera and I am struggeling with the distance compensation.
It is a "FT20 Uncooled Temperature Measuring Thermal Imaging Module" from Rakinda.
https://www.rakinda.com/en/productdetail/83/132/236.htmlIt is shown in the Windows device manager as S0H-40 (VID_1514 / PID_0001).
I guess the FT10 and FT30 has probably the same camera module included (same data).
https://www.rakinda.com/en/productdetail/83/136/181.htmlhttps://www.rakinda.com/en/productdetail/83/136/166.htmlThe resolution is 256×192, but it sends 4 lines with additional data (256x196).
They provide a SDK which is not very well documented.
The SDK also contains a Xtherm.dll (like the HT-301 mentioned below).
I have to switch the camera to RAW data mode and pass the 256x196x2 byte to the DLL as buffer to read out the temperature. Before that I have to apply some parameters (humitidy, ambient temperature, distance...) to the DLL that the DLL can do their calculations.
BOOL DataInit(int Width,int Height);
void UpdateFixParam(float Emiss,float refltmp,float airtmp,float Humi,unsigned short Distance,float Fix)
void GetFixParam(float *Emiss,float *refltmp,float *airtmp,float *Humi,unsigned short *Distance,float *Fix);
void GetTmpData(int type,BYTE * pbuff,float *maxtmp,int *maxx,int *maxy,float *mintmp,int *minx,int *miny,float *centertmp,float *tmparr,float *alltmp);
void GetDevData(float *fpatmp,float *coretmp,int *fpaavg,int *orgavg);
Even their example program do not provide reasonable readings if I trie to compensate the distance to the object.
I tried to take a max. temperature reading from an object (person) 1m away and then to put the object 3m away and adjusting the 3m in the demo-program, but there was a temperature deviation of 2 °C.
Person about 1m away, room temperature measured by 3 temperature sensors next to the camera.
Person about 3m away, without adapting the distance.
Person about 3m away, distance adapted, but there is not really an effect to see on the temperature output.
Another strange thing is, that the Linux SDK shows commands which sends the distance (as well as other compensation data) to the camera via the Zoom command interface, but this command is not used in the Windows SDK. To be more exact: It is somehow programmed (looks not done peroperly) in the C++ Visual Studio example, but the function never got called, the C# example misses this command completely.
Not sure when it is required to send data for compensation purposes to the camera and when the DLL does this job.
There are just a few of these commands explained in their description, but far not all of them.
Does this mean that the temperature compensation in the DLL does not work properly?
There is no description in the SDK which unit the distance has, but they did write me via e-mail that it is in "m". I get better results if I use m * 10, not sure if I can trust this statement from the e-mail.
Is this a normal behavior of a thermal imaging camera, or is there something wrong with the calulcation in the DLL?
The HT-301 system looks similar to me as it also has these 4 additional lines with meta data at the end.
https://www.eevblog.com/forum/thermal-imaging/software-for-xtherm-t3s-and-ht-301/I also tried to run the
ht301_hacklib from Paweł Stawicki with slight modifications (adapted resolution, removed device string check, do not read compensation parameters from camera) but it does not provide any reasonable temperature reading, so I guess something works different there on this camera/DLL.
hacklib code modifications:
Test with all compensation parameter at 0.
They actually offer this camera to do a people fever screening with an accuracy of +/- 0.5 °C, but in the meanwhile and after a lot of reading I doubt somehow that it is usabable for such an application with that accuracy, especially without a blackbody compensation.
Is this in general problematic to measure objects with a different distance and to compensate that distance by its given value in "m"?
Is there any other way to get a compensated temperature reading out of such a camera to detect an elevated body temperature of a person who is 0.5 to 1m away?