当前位置: 首页 > article >正文

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——8ResNet模型的使用

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——8ResNet模型的使用

​ 上期我们已经完成了Bin模型的转化,本期是如何使用这个Bin模型

1.加载Bin模型

​ 使用dnn模块加载Bin模型

models = dnn.load('../models/resnet18_224x224_nv12.bin')

2.图像预处理

2.1 首先需要先获取图像

获取图像方式很多可以cv2读取,也可以订阅ros消息

这里我以ros消息进行示例

self.subscription = self.create_subscription(
            Image,
            '/image',
            self.image_callback,
            10)
self.subscription  # prevent unused variable warning

def image_callback(self,msg):
        # 将ROS的图像消息的字节数据转换为numpy数组
        np_arr = np.frombuffer(msg.data, dtype=np.uint8)
        # 使用OpenCV解码图像数据
        frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
        #经过上面操作已经可以变成opencv可以使用的类型了,这样就对接其他cv领域的操作

2.2模型输入

def convert_bgr_to_nv12(cv_image):
    yuv_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2YUV)
    y_channel = yuv_image[:, :, 0]
    u_channel = yuv_image[::2, ::2, 1]
    v_channel = yuv_image[::2, ::2, 2]
    uv_channel = np.empty((u_channel.shape[0], u_channel.shape[1] * 2), dtype=u_channel.dtype)
    uv_channel[:, ::2] = u_channel
    uv_channel[:, 1::2] = v_channel
    nv12_image = np.concatenate((y_channel.flatten(), uv_channel.flatten()))
    return nv12_image

def process_frame(self,cv_image, models, original_width, original_height):
        # 将图像缩放到模型期望的尺寸
        cv_image_resized = cv2.resize(cv_image, (224, 224), 			interpolation=cv2.INTER_LINEAR)
        nv12_image = convert_bgr_to_nv12(cv_image_resized)
        
        # 使用模型进行推理
        outputs = models[0].forward(np.frombuffer(nv12_image, dtype=np.uint8))
        outputs = outputs[0].buffer
        
        # 假设模型输出是在224x224图像上的比例坐标
        x_ratio, y_ratio = outputs[0][0][0][0], outputs[0][1][0][0]
        
        # 将比例坐标转换为原始视频帧的像素坐标,注意跟你原始模型训练时候归一化有关
        #如果按照我的前面教程就是244*244的大小
        x_pixel = int(x_ratio * original_width)
        y_pixel = int(y_ratio * original_height)

2.3模型输出使用

经过2.2的使用,x_pixely_pixel 就是黑线的x与y坐标

大家可以自行采用各种方式进行运动控制

3.总结

对于一个新模型的使用,无非就是图像输入大小的匹配、图像格式,对于dnn模型,大家注意要nv12格式。下一期为大家带来二维码方面的操作。


http://www.kler.cn/a/374676.html

相关文章:

  • 虚幻引擎是什么?
  • Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)
  • MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
  • Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
  • 如何查看pad的console输出,以便我们更好的进行调试,查看并了解实际可能的问题。
  • springBoot Maven 剔除无用的jar引用
  • CCNA对学历有要求吗?看看你是否有资格报考
  • Android OpenGL ES详解——模板Stencil
  • 鸿蒙生态给我们带来的机遇和挑战
  • 【CSS/SCSS】@layer的介绍及使用方法
  • 二百七十六、ClickHouse——Hive和ClickHouse非常不同的DWS指标数据SQL语句
  • NPM 包开发与优化全面指南
  • Resnet50进行迁移学习实现图片二分类
  • vue vxeui 上传组件 vxe-upload 全局配置上传方法,显示上传进度,最完美的配置方案
  • 音视频听译:助力多维度沟通与发展的大门
  • 预告帖|在MATLAB/Simulink中调用C语言的几种方法
  • 【neo4j】 neo4j cypher单一语句 optional 可选操作的技巧
  • 【CSS in Depth 2 精译_055】8.3 伪类 :is() 和 :where() 的正确打开方式
  • JS 字符串拼接并去重
  • Java 判断回文数
  • 乐鑫ESP32-S3无线AI语音方案,教育机器人交互应用,启明云端乐鑫代理商
  • Linux补基础之:网络配置
  • 笔试题 求空格分割的英文句子中,最大单词长度。
  • 大语言模型推理代码构建(基于llama3模型)
  • 2001-2023年A股上市公司数字化转型数据(MDA报告词频统计)(三种方法)
  • (51)MATLAB迫零均衡器系统建模与性能仿真