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

news2024/11/25 21:46:53

文章目录

  • 前言
  • 一、外观和机芯参数
  • 二、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.coloradmin.cn/o/2100645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

踩坑记录(序列化与反序列化)

问题描述 实体类中设定字段名称为 sValue和yValue 返回给前段后,变成了svalue,yvalue 字段设置 测试结果:与字段不符,匹配失败 解决方法 在字段上添加JsonProperty("字段名")注解

乌班图部署若依(nginx)

Nginx 什么是Nginx Nginx&#xff08;发音为"engine x"&#xff09;是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年&#xff0c;如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名&#xff0c;适用…

[240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!

目录 Qwen2-VL: 更清晰地看世界Elasticsearch 再次拥抱开源&#xff01; Qwen2-VL: 更清晰地看世界 历经一年研发&#xff0c;阿里云推出新一代视觉语言模型 Qwen2-VL&#xff0c;支持多语言、长视频理解、视觉推理及智能体交互&#xff0c;性能超越 GPT-4o 等模型&#xff0c…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

9.2C++

思维导图

咸鱼代写代码的都是什么人?真的能有收入么?

大家好&#xff0c;我是程序员鱼皮。看到一个帖子&#xff0c;是一位博主分享自己读研期间在咸鱼上靠帮别人代写代码接单的经历。由于内容过于真实&#xff0c;看完之后竟让我有些红温了。 我估计也有很多学编程的同学想自己接单帮别人代写代码&#xff0c;那代写代码真的能有收…

聚水潭ERP集成用友U8(用友U8主供应链)

源系统成集云目标系统 用友U8介绍 用友U8是一套企业级的解决方案&#xff0c;可满足不同的制造、商务模式下&#xff0c;不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用&#xff0c;并延伸客户管理至客户关系管理&#xff08;CRM&#xff09;&…

支付宝开放平台-开发者社区——AI 日报「9 月 3 日」

1 逛完世界机器人大会&#xff0c;投资人说再也不想投人形机器人了 腾讯科技丨阅读原文 在2024 年世界机器人大会上&#xff0c;尽管人形机器人成为焦点&#xff0c;但一位长期关注该领域的投资人表示不再考虑投资。原因是目前人形机器人在工业和家用场景中表现不够突出&…

Error when attempting to add data source to Azure OpenAI api

题意&#xff1a;尝试向 Azure OpenAI API 添加数据源时出现错误 问题背景&#xff1a; My code is working for a call to Azure OpenAI when I dont have a datasource added. However, when I do add my datasource with the following parameters I get an error: 当我没…

AIGC时代从新手到高手:B端竞品分析实战案例与技巧分享

文章目录 1&#xff09;B端产品的信息获取困难2&#xff09;B端产品标准化程度低3&#xff09;需要具备业务知识1&#xff09;竞品画布就像一个菜谱&#xff0c;帮助新手快速上手2&#xff09;竞品画布相当于竞品分析报告的MVP&#xff08;最小可用产品&#xff09;&#xff0c…

新手如何下载微信视频号里面的短视频?推荐7种方法!

根据大数据分析我们发现还有不少用户不知道如何使用微信视频号下载视频&#xff1f;对此也发现不少小伙伴对内容阅读有所差异&#xff0c;对此专门为大家整理了图文以及视频相关教程&#xff0c;希望对大家有所帮助。 短视频下载 短视频下载一般包括市面上大部分的短视频内容为…

【BES2500x系列 -- RTX5操作系统】Battery模块 -- 创建电池检测定时器 --(十五)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

【Linux】进程状态(RSDT 阻塞 僵尸 孤儿)

目录 进程状态 进程状态的查看 R和S 运行状态 T/t 暂停状态 kill命令 D &#xff08;disk sleep&#xff09;状态、 Z 状态&#xff08;僵尸状态&#xff09; 孤儿状态 运行状态 阻塞状态 进程状态 一个进程通常有三种状态 ◉ 就绪状态&#xff08;Ready&#xff0…

Qt 去掉QDialog对话框的问号

QT 对话框的问号是什么&#xff1f; QDialog默认的window flag中包含了Qt::WindowContextHelpButtonHint,这个flag意思是在窗口上提供“上下文帮助”按钮 使用方式/调用方式 void QWidget::setWhatsThis(const QString &)比如&#xff1a; ui->lineEdit_1->setWh…

用亚马逊AI代码开发助手Amazon Q Developer开发应用(上篇)

快用人工智能帮程序员写代码&#xff01;今天小李哥就来介绍亚马逊推出的国际前沿人工智能AI代码开发助手Amazon Q Developer。目前该代码助手在Hugging Face代码生成权威测试集SWE-bench中排名第一&#xff0c;可以根据我们的需求生成整个代码项目&#xff0c;并可以帮助我们解…

C++入门基础,看这篇就足够了!

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 0.前言1. C的关键字2.命名空间2.1 命名空间的定…

vue 中计算属性可以接收参数

代码中的value就是接收的参数 计算属性要接收参数要写在返回的时候 computed: {isButtonDisabled() {return (value) > {const num parseInt(value);return isNaN(num) || num < 0}},},//计算属性aaa(){return (value) >{写逻辑return 返回值}} 使用 <el-butto…

【数学建模】国赛论文写作技巧教学——模型假设与变量说明

一、模型假设 1、内容要求 模型假设是建立数学模型中非常关键的一步&#xff0c;这会关系到模型的成败和优劣。所以&#xff0c;应该细致地分析实际问题&#xff0c;从大量的变量中筛选出最能表现问题本质的变量&#xff0c;并简化它们的关系。由于假设一般不是实际问题直接提…

2024Hvv漏洞汇总(128个POC)

2024Hvv漏洞整理&#xff08;128个POC&#xff09; ​&#xff08;网上漏洞零零散散&#xff09;下面是收集到的且有POC的漏洞整理合集&#xff0c;鄙人分了三种格式供各位提取&#xff0c;下面贴上目录与图片&#xff0c;由于字数有点大&#xff0c;各位请移步网盘自行提取。…

MySQL 基础命令

目录 一、MySQL简介 1.MySQL 的主要特点包括 2.MySQL 的主要用途包括&#xff1a; 二、MySQL 基础命令 1. 基本操作 1.1 进入 1.2 选择数据库 1.3 修改密码 1.4 所有命令后面都要加 “;” 2. 创建 2.1 创建数据库 2.2 创建数据表 2.3 常见字段 3. 修改/更新 3.1…