关于武汉高芯coin417G2红外机芯的二次开发

embedded/2024/9/23 10:13:35/

文章目录

  • 前言
  • 一、外观和机芯参数
  • 二、SDK的使用
    • 1、打开相机
    • 2、回调函数中获取全局温度和图像
    • 3、关闭相机


前言

最近工作中接触了一款基于武汉高芯科技有限公司开发的红外模组,即coin417g2(测温型)+9.1mm镜头.使用此模组,开发了一套红外热成像检测桌面应用程序.下面简单记录下该模组的使用.

一、外观和机芯参数

如下是该机芯的外观和机芯参数:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、SDK的使用

这里使用的是linux_sdk_usb2.0_v.1.1.5_aarch64-linux-gnu-gcc-8.4.0版本.

1、打开相机

int ret = guide_usb_initial();
if(ret < 0){g_pLog->log_E(QString::fromLocal8Bit("初始化相机失败,ret=%1").arg(ret));return -1;
}
else{g_pLog->log_I(QString::fromLocal8Bit("初始化相机成功,ret=%1").arg(ret));ret = guide_usb_opencommandcontrol((OnSerialDataReceivedCB)serailCallBack);if(ret < 0){g_pLog->log_E(QString::fromLocal8Bit("开启机芯控制命令通信失败,ret=%1").arg(ret));return -1;}else{g_pLog->log_I(QString::fromLocal8Bit("开启机芯控制命令通信成功"));}
}
m_deviceInfo = (guide_usb_device_info_t*)malloc(sizeof (guide_usb_device_info_t));
m_deviceInfo->width = IMAGEWIDTH;
m_deviceInfo->height = IMAGEHEIGHT;
m_deviceInfo->video_mode = Y16_PARAM_YUV;  //观瞄mode:YUV_PARAM  //测温mode:Y16_PARAM_YUV
ret = guide_usb_openstream(m_deviceInfo,(OnFrameDataReceivedCB)frameCallBack,(OnDeviceConnectStatusCB)connectStatusCallBack);
if(ret < 0)
{g_pLog->log_E(QString::fromLocal8Bit("打开视频流失败,ret=%1").arg(ret));return -1;
}
else{g_pLog->log_I(QString::fromLocal8Bit("打开视频流成功"));
}

2、回调函数中获取全局温度和图像

int serailCallBack(guide_usb_serial_data_t *pSerialData)
{int i = 0;for (i = 0;i< pSerialData->serial_recv_data_length;i++){if(i== (pSerialData->serial_recv_data_length-1)){printf("%x\n",pSerialData->serial_recv_data[i]);fflush(stdout);}else{printf("%x ",pSerialData->serial_recv_data[i]);fflush(stdout);}}return 1;
}int connectStatusCallBack(guide_usb_device_status_e deviceStatus)
{if(deviceStatus == DEVICE_CONNECT_OK){printf("VideoStream Capture start...\n");fflush(stdout);g_pLog->log_I(QString::fromLocal8Bit("连接正常"));}else{printf("VideoStream Capture end...\n");fflush(stdout);g_pLog->log_I(QString::fromLocal8Bit("断开连接"));}return 1;
}int frameCallBack(guide_usb_frame_data_t *pVideoData)
{//回调函数中建议只对数据入队,其他操作建议另起线程处理//YUV数据  [pVideoData->frame_yuv_data:机芯送出来的YUV数据] yuv422 uyvy//Y16数据  [pVideoData->frame_src_data:机芯送出来的Y16数据] for measure//参数行数据[pVideoData->paramLine:机芯送出来的参数行数据]if(m_mutex.try_lock()){if(m_dataQueue.size() <1){guide_usb_measure_external_param_t param;param.distance = 50;param.emiss = 98;param.relHum = 60;param.reflectedTemper = 230;param.atmosphericTemper = 230;param.modifyK = 100;param.modifyB = 0;//int ret = guide_usb_measure_convertgray2temper(1,1,pVideoData->frame_src_data,(uchar*)pVideoData->paramLine,IMAGEWIDTH*IMAGEHEIGHT,&param,pTemper);if(ret >= 0){cv::Mat yuvimg = cv::Mat(IMAGEHEIGHT,IMAGEWIDTH,CV_8UC2,pVideoData->frame_yuv_data);cv::Mat bgrImg;cv::cvtColor(yuvimg, bgrImg,  cv::COLOR_YUV2BGR_Y422);m_dataQueue.enqueue(bgrImg);}}m_mutex.unlock();}else{QThread::usleep(10);}return 1;
}

3、关闭相机

int ret = guide_usb_closestream();
if(ret < 0){g_pLog->log_E(QString::fromLocal8Bit("关闭视频流失败,ret=%1").arg(ret));
}
else{g_pLog->log_I(QString::fromLocal8Bit("关闭视频流成功"));
}ret = guide_usb_closecommandcontrol();
if(ret < 0){g_pLog->log_E(QString::fromLocal8Bit("关闭机芯控制命令通信失败,ret=%1").arg(ret));
}
else{g_pLog->log_I(QString::fromLocal8Bit("关闭机芯控制命令通信成功"));
}ret = guide_usb_exit();
if(ret < 0){g_pLog->log_E(QString::fromLocal8Bit("清除数据释放内存失败,ret=%1").arg(ret));
}
else{g_pLog->log_I(QString::fromLocal8Bit("清除数据释放内存成功"));
}
if(m_deviceInfo != NULL)
{free(m_deviceInfo);m_deviceInfo = NULL;
}
if(paraData != NULL)
{free(paraData);paraData = NULL;
}

http://www.ppmy.cn/embedded/108012.html

相关文章

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…

【深入解析】AI工作流中的HTTP组件:客户端与服务端执行的区别

在当今快速发展的技术环境中&#xff0c;AI工作流的设计和实现变得愈发重要。尤其是在处理HTTP组件时&#xff0c;前端执行与后端执行之间的区别&#xff0c;往往会对系统的安全性和数据的准确性产生深远的影响。今天&#xff0c;我们就来深入探讨这一话题&#xff0c;揭示前端…

学习Linux

1. 操作系统是计算机软件的一种&#xff0c;它主要负责&#xff1a; 作为用户和计算机硬件之间的桥梁&#xff0c;调度和管理计算机硬件进行工作&#xff08;作用&#xff09; 2.计算机有了操作系统&#xff0c;就相当于拥有了灵魂 3.操作系统可以&#xff1a;调度CPU进行工作…

VUE3父子组件传参

defineProps和defineEmits的使用场景‌ ‌父组件向子组件传递数据‌&#xff1a;子组件可以通过defineProps接收来自父组件的数据&#xff0c;并在子组件的模板中使用这些数据。‌2‌子组件向父组件发送事件‌&#xff1a;子组件可以通过defineEmits触发事件&#xff0c;并将数…

fastadmin 清除插件缓存报错

Argument 1 passed to Symfony\Component\VarExporter\VarExporter::export() must be an instance of Symfony\Component\VarExporter\mixed, array given, called in F:\work\awebsite\oeob\vendor\karsonzhang\fastadmin-addons\src\addons\Service.php on line 404 我用的…

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

&#xff08;学习笔记&#xff09; 1、分布式链路追踪概述 问题&#xff1a;在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&#xf…

基于Openjdk容器打包运行jar程序

文章目录 应用场景基于Openjdk容器打包运行jar程序1.编译项目成jar包2.构建Dockerfile文件精简版-含jar包精简版-不含jar包带注释版-含jar包 3.编译Dockerfile成镜像。4.运行镜像&#xff1a; 应用场景 部署多版本jdk的应用程序。 基于Openjdk容器打包运行jar程序 1.编译项目…

C++学习笔记----6、内存管理(四)---- 通常的内存陷阱(1)

使用new/delete/new[]/delete[]处理动态内存以及底层内存操作是非常容易出错的。对于引起内存有关的问题还特别难以定位。每一个内存泄露与错误指针都有其细微差别。没有能够解决内存问题的银弹。我们就来谈一谈一些通常问题以及能够检测和解决的一些工具。 1、少分配了数据空…