python调用DJI热成像SDK

首先是在win10下实现:


import ctypes

# 加载动态链接库
lib_dirp = ctypes.CDLL('./dji_thermal_sdk/tsdk-core/lib/windows/release_x64/libdirp.dll')

# 定义函数的参数和返回类型
lib_dirp.dirp_create_from_rjpeg.restype = ctypes.c_int
lib_dirp.dirp_create_from_rjpeg.argtypes = [ctypes.POINTER(ctypes.c_uint8), ctypes.c_int, ctypes.POINTER(ctypes.c_void_p)]

lib_dirp.dirp_destroy.argtypes = [ctypes.c_void_p]

lib_dirp.dirp_measure.restype = ctypes.c_int
lib_dirp.dirp_measure.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int16), ctypes.c_int]

lib_dirp.dirp_measure_ex.restype = ctypes.c_int
lib_dirp.dirp_measure_ex.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_float), ctypes.c_int]

# 读取 R-JPEG 文件内容
with open('.\\dji_thermal_sdk\\dataset\\H20N\\DJI_0001_R.JPG', 'rb') as file:
    rjpeg_data = file.read()
data_size = len(rjpeg_data)

# 创建 DIRP 的句柄
dirp_handle = ctypes.c_void_p()

# 调用 dirp_create_from_rjpeg 函数
result = lib_dirp.dirp_create_from_rjpeg(ctypes.cast(rjpeg_data, ctypes.POINTER(ctypes.c_uint8)), data_size, ctypes.byref(dirp_handle))
if result != 0:
    print("Error creating DIRP from rjpeg data")
else:
    print("DIRP created successfully")

# 分配内存以存储温度图像数据
image_width = 640
image_height = 512
image_size = image_width * image_height

# 为 dirp_measure 分配内存
temp_image_int16 = (ctypes.c_int * image_size)()

# 为 dirp_measure_ex 分配内存
temp_image_float = (ctypes.c_float * image_size)()

# 获取 temp_image_int16 的指针
temp_image_int16_ptr = ctypes.cast(temp_image_int16, ctypes.POINTER(ctypes.c_int16))
# 获取 temp_image_float 的指针
temp_image_float_ptr = ctypes.cast(temp_image_float, ctypes.POINTER(ctypes.c_float))

# 调用 dirp_measure 函数
result_measure = lib_dirp.dirp_measure(dirp_handle, temp_image_int16_ptr, image_size*2)
if result_measure != 0:
    print("Error measuring DIRP with int16")
else:
    print("DIRP measured successfully with int16")

# 调用 dirp_measure_ex 函数
ret = lib_dirp.dirp_measure_ex(dirp_handle, temp_image_float_ptr, image_size*4)
if ret != 0:
    print("Error measuring DIRP with float")
else:
    print("DIRP measured successfully with float")

# # 遍历 temp_image_float 数组以找到最大温度
# max_temperature = max(temp_image_float)

# # 打印最大温度
# print(f"Maximum temperature: {max_temperature}°C")

# 调用 dirp_destroy 函数
lib_dirp.dirp_destroy(dirp_handle)
print("DIRP destroyed successfully")

将以上程序保存为.py文件,并与dji_thermal_sdk文件放在同一文件夹直接运行即可。(dji_thermal_sdk可以在大疆官网下载)

接下来在linux系统下调用SDK:
1.安装VMware 虚拟机
2.在虚拟机中安转linux(https://blog.csdn.net/EsDeath_99/article/details/136361704);
我安装的是centos7。(对应的ISO文件可以在官网下载)
3.安装好后是自带python的,但我额外安装了python3,在终端运行:
sudo yum update
sudo yum install python3
4.上述都完成后,将以下代码和dji_thermal_sdk文件放在同一文件夹“wenjian”,并将文件夹“wenjian”放在/usr/local/ 中。在终端运行 python3 your.py。
如果出现:
File “/usr/lib64/python2.7/ctypes/init.py”, line 360, in init
self._handle = _dlopen(self._name, mode)
OSError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by
可按照以下步骤处理:(https://blog.csdn.net/jaber_chen/article/details/124715913)
cd /usr/local/lib64/

下载最新版本的下载最新版本的libstdc.so_.6.0.26

wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip

解压

unzip libstdc.so_.6.0.26.zip

将下载的最新版本拷贝到 /usr/lib64

cp libstdc++.so.6.0.26 /usr/lib64
cd /usr/lib64

查看 /usr/lib64下libstdc++.so.6链接的版本

ls -l | grep libstdc++

删除原先的软连接(不放心可以备份)

rm libstdc++.so.6

使用最新的库建立软连接

ln -s libstdc++.so.6.0.26 libstdc++.so.6

查看新版本,成功

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

然后再次在终端运行 python3 your.py,发现运行成功。
如果还有问题:(运行下边命名查看具体错误,然后解决)
1.使用strace进行系统调用跟踪:
使用strace工具来跟踪程序运行时的系统调用。这可以帮助您发现潜在的问题,比如文件访问错误、库加载错误等。
strace -e open,read,close,mmap,brk,munmap,ioctl python your_script.py
查看错误日志:
检查系统日志(如/var/log/messages)或使用dmesg命令来查看可能的错误信息。

2.使用调试工具:
使用如gdb这样的调试工具来运行您的Python脚本,以便在运行时检查变量的状态和程序的行为。
gdb --args python your_script.py

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DJI Thermal SDK 是大疆热成像摄像头的软件开发工具包,旨在帮助开发者实现与热成像摄像头相关的功能和应用。以下是关于如何使用 DJI Thermal SDK 的教程: 第一步,下载和安装 DJI Thermal SDK:访问大疆官方网站,进入开发者页面,下载 Thermal SDK 并按照指示进行安装。 第二步,创建一个新的项目:使用开发工具(如 Android Studio)创建一个新的项目,并配置 SDK 的基本设置。确保你已经添加了 Thermal 相机 dependenciy。 第三步,初始化和连接热成像摄像头:在你的项目代码中,实例化一个 DJIThermalSession 对象,并使用 connect() 方法连接到摄像头。确保你已经将设备与手机或平板电脑成功地连接。 第四步,获取热成像图像:通过设置回调函数或定期轮询的方式,从热成像摄像头中获取数据流或图像帧。你可以将这些图像用于进一步的处理或分析,如温度测量或热成像图像显示。 第五步,实现其他功能:根据你的需求,可以使用 SDK 中的其他功能和方法来扩展你的应用程序。例如,你可以使用相机的控制方法调整图像的亮度、对比度或中心温度,或者使用图像处理方法应用滤波或增强算法。 第六步,测试和调试:在真实场景中测试你的应用程序,并根据需要进行调试和优化。确保你的应用程序能够准确地获取并处理热成像图像,并满足项目的要求。 总结:使用 DJI Thermal SDK 可以帮助开发者创建与热成像摄像头相关的应用程序。通过下载和安装 SDK,初始化和连接热成像摄像头,获取热成像图像,实现其他功能以及测试和调试,你可以成功地开发出满足需求的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值