开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 457|回复: 23
收起左侧

[技术专题] 易语言 OPENCV DNN YOOLv11 OBB 带角度的目标检测实现

[复制链接]
结帖率:88% (80/91)
发表于 2025-2-28 18:36:34 | 显示全部楼层 |阅读模式   江苏省徐州市
21455170-a07c-4507-ac63-4f89f64eab22.png
  
窗口程序集名保 留  保 留备 注
程序集1   
变量名类 型数组备 注
置信度阈值小数型检测到的目标置信度分数
分数阈值小数型指类别分数,预测某个目标属于特定类别的概率。
非极大值抑制阈值小数型去除重叠检测框
输入高整数型模型输入高 训练时已决定
输入宽整数型模型输入宽 训练时已决定

子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
' 根据选择的检测模型文件进行配置
分数阈值 = 0.25
置信度阈值 = 0.45
非极大值抑制阈值 = 0.5
输入高 = 1024
输入宽 = 1024
旋转目标检测 (“D:\新建文件夹\train\yolo11n-obb.onnx”, “C:\Users\Administrator\Desktop\plane.png”, )
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
旋转目标检测  
参数名类 型参考可空数组备 注
模型路径文本型
图片路径文本型
是否填充为正方形逻辑型
变量名类 型静态数组备 注
YOLO网络神经网络类 
输出层名称数组数组容器 
图片数据矩阵类 
拷贝图数据矩阵类 
数据块数据矩阵类 
张量数组数组容器推理输出结果集
' 加载模型
YOLO网络 = 视觉_从ONNX读取网络 (模型路径)
输出层名称数组 = YOLO网络.获取未连接输出层名称 ()
' 读取图片
图片 = 视觉_图像读取 (图片路径, #读图_彩色 )
如果真 (图片. ())
视觉_控制台输出 (“无法打开或找到图像 :%T”, 图片路径)
返回 ()
拷贝图 = 图片.克隆 ()
如果真 (是否填充为正方形 输入高 = 输入宽)
拷贝图 = 填充为正方形 (拷贝图)
数据块 = 视觉_从图像创建数据块 (拷贝图, 1 ÷ 255, 尺寸整数 (输入宽, 输入高), 标量 (0, 0, 0), 真, 假, 5)
YOLO网络.设置输入 (数据块, “”, 1, 标量 ())
YOLO网络.前向传播V (张量数组, 输出层名称数组)
后期处理 (图片, 拷贝图.尺寸整型 (), 张量数组, YOLO网络, 15)
视觉_显示图像 (“小白鼠YOLO11 OBB”, 图片)
视觉_等待按键 (0)
子程序名返回值类型公开备 注
后期处理  
参数名类 型参考可空数组备 注
图片数据矩阵类
输入尺寸尺寸整型结构
张量数组数组容器1维 数据矩阵类: 包含检测信息
YOLO网络神经网络类
类数整数型
变量名类 型静态数组备 注
缩放因子X小数型 
缩放因子Y小数型 
置信度数组数组容器1维 小数型:用于存储检测到的目标的置信度
目标类别ID数组数组容器1维 整数型:用于存储检测到的目标的类别 ID
边界框数组数组容器1维 旋转矩形类:存储检测到的目标的旋转边界框
边界框数顶点二维数组数组容器2维 坐标二维小数型结构:存储旋转边界框的四个顶点坐标,用于减少后续绘制时的计算量
边界框数顶点数组数组容器 
检测框数整数型 
属性数整数型 
二维矩阵数据矩阵类 
数据指针小数型指针类 
i整数型 
类别分数小数型指针类 
分数数据矩阵类 
类最大分数位置坐标二维整型结构 
类最小分数位置坐标二维整型结构 
类最大分数双精度小数型 
类最小分数双精度小数型 
横坐标小数型 
纵坐标小数型 
小数型 
小数型 
角度小数型 
余弦值小数型 
正弦值小数型 
高旋转量坐标二维小数型结构 
宽旋转量坐标二维小数型结构 
顶点坐标坐标二维小数型结构 
检测框的索引数组容器用于存储经过非极大值抑制(NMS)后保留的检测框的索引
索引整数型 
' 计算输入图像尺寸与模型输入尺寸的缩放因子
缩放因子X = 输入尺寸.宽 ÷ 输入宽
缩放因子Y = 输入尺寸.高 ÷ 输入高
' 获取输出张量的形状信息
' [1, 84, 8400] -> [8400, 84],其中 8400 是检测框的数量,84 是每个检测框的属性数量
检测框数 = 张量数组.取数据矩阵类 (1).尺寸属性 (2)
属性数 = 张量数组.取数据矩阵类 (1).尺寸属性 (1)
' 对输出张量进行形状调整,将其转换为二维矩阵
二维矩阵 = 张量数组.取数据矩阵类 (1).重塑 (1, 属性数)
' 对矩阵进行转置操作
视觉_转置 (二维矩阵, 二维矩阵)
' 获取矩阵的数据指针
数据指针.指针 = 二维矩阵.数据指针
' 遍历所有检测框
计次循环首 (检测框数, i)
' 跳过前 4 个元素(边界框的中心坐标和宽高),获取类别分数
类别分数.指针 = 数据指针.指针
类别分数.偏移 (4)
' 创建一个 数据矩阵 对象来存储类别分数
分数.初始化指针 (1, 类数, #矩阵_单通道小数型, 类别分数.指针)
' 找出类别分数中的最大值及其对应的类别 ID
视觉_最小最大位置 (分数, 类最小分数, 类最大分数, 类最小分数位置, 类最大分数位置, )
' 如果最大类别分数大于设定的置信度阈值
如果真 (类最大分数 > 置信度阈值)
' 将置信度和类别 ID 分别存入对应的数组容器中
置信度数组.加入小数型 (类最大分数)
目标类别ID数组.加入整数型 (类最大分数位置.横坐标)
' 计算边界框的中心坐标、宽高和旋转角度,并根据缩放因子进行缩放
横坐标 = 数据指针. (0) × 缩放因子X
纵坐标 = 数据指针. (1) × 缩放因子Y
宽 = 数据指针. (2) × 缩放因子X
高 = 数据指针. (3) × 缩放因子Y
角度 = 数据指针. (19)
' 计算旋转角度的余弦和正弦值
余弦值 = 求余弦 (角度)
正弦值 = 求正弦 (角度)
' 计算边界框的四个顶点相对于中心的偏移向量
宽旋转量.初始化 (宽 ÷ 2 × 余弦值, 宽 ÷ 2 × 正弦值)
高旋转量.初始化 (-高 ÷ 2 × 正弦值, 高 ÷ 2 × 余弦值)
' 计算边界框的四个顶点坐标
顶点坐标.初始化 (横坐标, 纵坐标)
边界框数顶点数组.清空 ()
边界框数顶点数组.加入坐标二维小数型结构 (顶点坐标. (宽旋转量). (高旋转量))
边界框数顶点数组.加入坐标二维小数型结构 (顶点坐标. (宽旋转量). (高旋转量))
边界框数顶点数组.加入坐标二维小数型结构 (顶点坐标. (宽旋转量). (高旋转量))
边界框数顶点数组.加入坐标二维小数型结构 (顶点坐标. (宽旋转量). (高旋转量))
' 根据三个顶点创建旋转边界框 加入数组
边界框数组.加入旋转矩形类 (旋转矩形P (边界框数顶点数组.取坐标二维小数型结构 (1), 边界框数顶点数组.取坐标二维小数型结构 (2), 边界框数顶点数组.取坐标二维小数型结构 (3)))
' 将四个顶点坐标存入对应的向量中
边界框数顶点二维数组.加入数组容器 (边界框数顶点数组)

' 移动数据指针到下一个检测框的起始位置
数据指针.偏移 (属性数)
计次循环尾 ()
' 执行非极大值抑制,过滤掉重叠的检测框
视觉_非最大抑制旋转框 (边界框数组, 置信度数组, 置信度阈值, 非极大值抑制阈值, 检测框的索引, 1, 0)
' 遍历经过 NMS 后保留的检测框的索引
计次循环首 (检测框的索引.成员数 (), i)
索引 = 检测框的索引.取整数型 (i) + 1  ' 索引0开始 需要+1 符合易语言
绘制预测 (目标类别ID数组.取整数型 (索引), 置信度数组.取小数型 (索引), 边界框数顶点二维数组.取数组容器 (索引), 图片)
计次循环尾 ()
子程序名返回值类型公开备 注
绘制预测  
参数名类 型参考可空数组备 注
类ID整数型
置信度小数型
边界框数顶点数组数组容器
图片数据矩阵类
变量名类 型静态数组备 注
标签文本型 
i整数型 
基线整数型 
左边整数型 
顶边整数型 
标签尺寸尺寸整型结构 
标签 = 到文本 (类ID)“:”到文本 (四舍五入 (置信度 × 100, 1)) + “%”
' 绘制旋转框
计次循环首 (4, i)
视觉_线小数 (图片, 边界框数顶点数组.取坐标二维小数型结构 (i), 边界框数顶点数组.取坐标二维小数型结构 (i % 4 + 1), 标量 (255, 255, 255), 2, 8, 0)
计次循环尾 ()
视觉_圆小数 (图片, 边界框数顶点数组.取坐标二维小数型结构 (1), 3, 标量 (0, 0, 255), -1, 8, 0)
标签尺寸 = 视觉_获取文本尺寸 (标签, #字体_简易无衬线, 0.5, 1, 基线)
左边 = 边界框数顶点数组.取坐标二维小数型结构 (1).横坐标
顶边 = 视觉_取最大值 (边界框数顶点数组.取坐标二维小数型结构 (1).纵坐标, 标签尺寸.高)
视觉_矩形坐标 (图片, 坐标二维整型 (左边, 顶边 - 标签尺寸.高), 坐标二维整型 (左边 + 标签尺寸.宽, 顶边 + 基线), 标量 (255, 255, 255), -1, 8, 0)
视觉_放置文本 (图片, 标签, 坐标二维整型 (左边, 顶边), #字体_简易无衬线, 0.5, 标量 (), 1, 8, )
子程序名返回值类型公开备 注
填充为正方形数据矩阵类 
参数名类 型参考可空数组备 注
数据矩阵类
变量名类 型静态数组备 注
最大值整数型 
返回图数据矩阵类 
最大值 = 视觉_取最大值 (图.列数, 图.行数)
返回图.初始化 (最大值, 最大值, #矩阵_三通道字节型U, 标量 (114, 114, 114))
图.复制 (返回图.感兴区域 (矩形整型 (0, 0, 图.列数, 图.行数)), )
返回 (返回图)


i支持库列表   支持库注释   
OpenCV(未知支持库)

点评

https://bbs.125.la/thread-14848304-1-1.html 训练工具 含 NCNN onnx wts TensorRT 中文汉化 免费开放   江苏省徐州市  发表于 2025-2-28 21:11
树林大啥鸟,学习都是得要成本的 开放测试,你能力强可以迁移到其他语言里 例子所有语言通用 看看新浪博客 同等例子都299 免费给你玩 还这样不...   江苏省徐州市  发表于 2025-2-28 21:07
这不是opencv支持库的VX群主吗 割了几百个人 自己退群了?   山西省临汾市  发表于 2025-2-28 19:20
面向工业 没显卡的用户 目标定位非常棒   江苏省徐州市  发表于 2025-2-28 18:41

结帖率:0% (0/3)

签到天数: 10 天

发表于 3 小时前 | 显示全部楼层   广东省深圳市
6666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 昨天 11:09 | 显示全部楼层   山东省烟台市
66666666666666
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 6 天前 | 显示全部楼层   广西壮族自治区贵港市
看起来很高级,留下痕迹 不邦定电脑也不可能 吧
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2025-3-4 19:43:07 | 显示全部楼层   山东省菏泽市
6666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:71% (15/21)

签到天数: 11 天

发表于 2025-3-1 21:59:24 | 显示全部楼层   广东省广州市
易语言支持库编译出来还需要依赖什么dll吗?  我没研究过易语言的支持库;所以问问、c++编译静态库再链接易语言支持库?

点评

工业应用 没显卡无所位   江苏省徐州市  发表于 2025-3-2 08:20
不需要 但是32位 懂没显卡   江苏省徐州市  发表于 2025-3-2 08:19
回复 支持 反对

使用道具 举报

结帖率:71% (15/21)

签到天数: 11 天

发表于 2025-3-1 21:58:52 | 显示全部楼层   广东省广州市
易语言支持库编译出来还需要依赖什么dll吗?  我没研究过易语言的支持库;所以问问、c++编译静态库再链接易语言支持库?
回复 支持 反对

使用道具 举报

结帖率:71% (15/21)

签到天数: 11 天

发表于 2025-3-1 14:23:18 | 显示全部楼层   福建省厦门市
wan942182718 发表于 2025-3-1 11:57
官方的例子多简洁,再来看你们的例子,花里胡哨的,看不懂,对新手不友好,分享技术值得点赞,CUDA不支持32 ...

官方例子都是c++代码,最重要点:

yolov11相较于yolov8的层方面有改动,目前可以使用yolov8的加载方式加载yolov11模型,但是要禁用层融合。
net.enableFusion(false);  // 禁用层融合

点评

onnx 格式,.pt 文件转换的,Python 中 yolo 使用的,我也不清楚为什么会奔,把那个禁用掉了 Cuda 就正常了,否则只能 cpu   广东省广州市  发表于 2025-3-1 21:55
c++ opencv trt ncnn 合并不合并层 都试过 没问题 onnx 没用过 个人觉得trt 才是 英伟达儿子 速度最快 其他都是孙子   江苏省苏州市  发表于 2025-3-1 16:00
什么格式 onnx吗   江苏省苏州市  发表于 2025-3-1 15:56
cuda 模式推理,我这边要是没禁用,程序会奔溃   福建省厦门市  发表于 2025-3-1 14:24
回复 支持 反对

使用道具 举报

结帖率:71% (15/21)

签到天数: 11 天

发表于 2025-3-1 11:57:14 | 显示全部楼层   福建省厦门市
官方的例子多简洁,再来看你们的例子,花里胡哨的,看不懂,对新手不友好,分享技术值得点赞,CUDA不支持32位,可惜了

点评

易语言还是 面对 英文不好 小白的 更好入门学习的 不要忘本 毕竟以前辉煌过   江苏省苏州市  发表于 2025-3-1 12:52
ncnn 支持 cpu 工业可以了   江苏省苏州市  发表于 2025-3-1 12:40
你发官方的出来看看   江苏省苏州市  发表于 2025-3-1 12:38
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2025-2-28 21:47:22 | 显示全部楼层   江苏省南京市
看起来很高级
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表