2023年亚太杯APMCM数学建模大赛A题水果采摘机器人的图像识别
2023年亚太杯APMCM数学建模大赛
A题 水果采摘机器人的图像识别
原题再现
中国是世界上最大的苹果生产国,年产量约3500万吨。同时,中国也是世界上最大的苹果出口国,世界上每两个苹果中就有一个是中国出口的,世界上超过六分之一的苹果是中国出口的。中国提出了“一带一路”倡议,这是建设未来共享的国际社会的重要支柱。由于这一举措,越南、孟加拉国、菲律宾、印度尼西亚等沿线国家已成为中国苹果的主要出口目的地。

苹果采摘主要依靠手工采摘。苹果成熟后,几天内就需要大量的采摘工人。但大多数当地农民在自己的果园里种植苹果。此外,农业工人的老龄化和年轻人离开村庄工作的现象导致了苹果采摘季节的劳动力短缺。为了解决这一问题,中国从2011年左右开始研究能够摘苹果的机器人,并取得了重大进展。
然而,由于果园环境与受控实验环境的差异,各种苹果采摘机器人在世界范围内的推广应用还不够理想。在复杂、非结构化的果园环境中,现有的机器人大多无法准确识别障碍物,如“树叶遮挡”、“树枝遮挡”、“水果遮挡”、“混合遮挡”等,如果直接采摘苹果而不根据实际场景做出准确判断,则损坏水果的风险很高,甚至对采摘手和机械臂造成伤害。这对收获效率和果实质量产生不利影响,导致更大的损失。此外,对不同采收果实的识别和分类也非常重要,如分类、加工、包装、运输等程序。然而,许多水果的颜色、形状和大小与苹果非常相似,这给苹果的采后识别带来了很大的困难。
本次竞赛的目的是通过分析和提取标记水果图像的特征,建立一个识别率高、速度快、准确度高的苹果图像识别模型,并对图像进行数据分析,如自动计算图像中苹果的数量、位置、成熟度,估计图像中苹果的质量等。具体任务如下:
问题1:数苹果
基于附件1中提供的已采收苹果图像数据集,提取图像特征,建立数学模型,统计每个图像中的苹果数,绘制附件1中所有苹果分布的直方图。
问题2:估计苹果的位置
根据附件1中提供的已收获苹果的图像数据集,以图像左下角为坐标原点,识别每个图像中苹果的位置,并绘制附件1中所有苹果几何坐标的二维散点图。
问题3:估计苹果的成熟状态
根据附件1提供的已采收苹果图像数据集,建立数学模型,计算每幅图像中苹果的成熟度,并绘制附件1中所有苹果成熟度分布的直方图。
问题4:估计苹果的质量
根据附件1中提供的已收获苹果的图像数据集,以图像左下角为坐标原点,计算每幅图像中苹果的二维面积,估计苹果的质量,并绘制附件1中所有苹果的质量分布直方图。
问题5:苹果的识别
基于附件2提供的采集水果图像数据集,提取图像特征,训练苹果识别模型,识别附件3中的苹果,并绘制附件3中所有苹果图像ID号的分布直方图。
import cv2
import torch
import torchvision
import numpy as np
from torchvision import transforms, utils
from matplotlib import pyplot as pltCLASS_NAMES = ['background', 'apple']
COLORS = np.random.uniform(0, 255, size=(len(CLASS_NAMES), 3))def load_model():model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)model.eval()return modeldef load_and_process_image(image_path):image = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)transformed = transforms.Compose([transforms.ToTensor(),transforms.Resize((800, 800)),])image = transformed(image)return image.unsqueeze(0)model = load_model()import glob
import os
def visualize(image, boxes, labels, title,i):image = image.permute(1, 2, 0).numpy()fig = plt.figure(figsize=(8, 8))plt.imshow(image)ax = plt.gca()for i in range(len(boxes)):xmin, ymin, xmax, ymax = boxes[i]color = 'r'rect = plt.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin, fill=False, edgecolor=color, linewidth=2)ax.add_patch(rect)text = '{:.2f}'.format(scores[i])plt.text(xmin, ymin-5, text, fontsize=8, bbox=dict(facecolor=color, alpha=0.5, pad=1), color='white')plt.axis('off')plt.title(title)plt.savefig('img/Q1_{}.png'.format(i),dpi=100)plt.show()# 循环读取图片
image_paths = sorted(glob.glob(os.path.join('Attachment/Attachment 1', '*.jpg')))
i=0
test = []
count_list = []
for image_path in image_paths:image = load_and_process_image(image_path)det_pred = model(image)boxes = det_pred[0]['boxes'].detach().numpy()scores = det_pred[0]['scores'].detach().numpy()labels = det_pred[0]['labels'].detach().numpy()threshold = 0.5idx = scores > thresholdboxes = boxes[idx]scores = scores[idx]labels = labels[idx]num_apples = len(boxes)count_list.append(num_apples)print('第{}张图片中苹果的数量为{}个'.format(i, num_apples))apple_locs = []for j in range(num_apples):xmin, ymin, xmax, ymax = boxes[j]apple_loc = (xmin, ymin, xmax, ymax)apple_locs.append(apple_loc)if i <= 3:visualize(image[0], boxes, labels, 'Image {}'.format(i),i)i+=1
# 绘制直方图
plt.hist(count_list, bins=range(max(count_list) + 2))
plt.xlabel("Apple count")
plt.ylabel("Image count")
plt.savefig('apple_number.png',dpi=300)
plt.show()
相关文章:
2023年亚太杯APMCM数学建模大赛A题水果采摘机器人的图像识别
2023年亚太杯APMCM数学建模大赛 A题 水果采摘机器人的图像识别 原题再现 中国是世界上最大的苹果生产国,年产量约3500万吨。同时,中国也是世界上最大的苹果出口国,世界上每两个苹果中就有一个是中国出口的,世界上超过六分之一的…...
mysql which is not in SELECT list; this is incompatible with DISTINCT解决方案
mysql报错Expression #1 of ORDER BY clause is not in SELECT list, references column ‘xxx’ which is not in SELECT list; this is incompatible with DISTINCT解决方案: 这是在 mysql5.7 版本,DISTINCT 与 order by 在一起用时则会报3065错误。因…...
linux /proc 文件系统
/proc系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,以文件系统的方式为内核与进程提供通信的接口。 /proc目录下有很多以数字命名的目录,每个数字代表进程号PID它们是进程目录。系统中当前运行的每一个进程在/proc下都…...
java开发之个微群聊自动添加好友
请求URL: http://域名/addRoomMemberFriend 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是String登录实例标识chatRoom…...
Git .gitignore 忽略文件不生效解决方法
.gitignore 匹配规则 *.sample # 忽略所有 .sample 结尾的文件 !lib.sample # 但 lib.sample 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会…...
【Java】16. HashMap
16. HashMap public static String find3(String key) {Map<String, String> map Map.of("bright", "小明","white", "小白","black", "小黑");return map.get(key); }Map.of 用来创建不可变的 Map&#…...
KMP基础架构
前言 Kotlin可以用来开发全栈, 我们所熟悉的各个端几乎都支持(除了鸿蒙) 而我们要开发好KMP项目需要一个好的基础架构,这样不仅代码更清晰,而且能共享更多的代码 正文 我们可以先将KMP分为前端和服务端 它们两端也能共享一些代码,比如接口声明,bean类,基础工具类等 前端和…...
递归实现选择排序.
思路: 1.定位数组中的最大元素或最小元素 2.将其与第一个元素交换位置 3.接着将剩余未排序的元素中的最大值或最小值与第二个元素交换位置 4.以此类推,直到排序完成 示例: [ 8, 5, 1, 9, 3 ] //原始数组 [ 1, 5, 8, 9, 3 ] //3与8交换 [ 1, 3, 8, 9, 5 ] //3与5交换 [ 1,…...
Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)
目录 Node.js 文件系统模块(二) Node.js 文件系统模块(三) Node.js 文件系统模块(四) Node.js 路径模块 Node.js 连接 MySQL Node.js nodemon Node.js 操作 MySQL Node.js 应用 Node.js 文件系统模块…...
公司的销售经理面临哪些压力和挑战?
公司的销售经理面临哪些压力和挑战? 作为公司的销售经理,通常会面临以下挑战和压力: 1. 销售目标难以达成。销售经理需要承担销售目标,这通常是一项艰巨的任务。他们需要制定销售策略,与客户建立联系,并确保…...
【Linux系统编程】如何创建进程(什么是fork函数?进程创建的原理是什么?)
目录 一、前言 二、 进程创建的初次了解(创建进程的原理) 三、什么是fork函数? 💦初识fork函数 💦fork函数的四个为什么? ⭐为什么fork()要给子进程返回0,给父进程返回子进程pidÿ…...
【opencv】计算机视觉基础知识
目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理:读入图像 2.2 图片处理:显示图像 2.3 图片处理:图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…...
Node——Node.js简介
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它能够让JavaScript脚本运行在服务端,这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术,它以简单易…...
小型洗衣机什么牌子好又便宜?性价比迷你洗衣机推荐
由于日常所穿的内衣裤由于各种原因,时间一久就很容易产生细菌,而且和其他大件的衣物一起混洗,很容易造成细菌的交叉感染,积攒起来洗就更不卫生了,留在内衣裤上的分泌物会继续滋生细菌,比如闷热的环境下念珠…...
INFINI Easysearch 与华为鲲鹏完成产品兼容互认证
何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云、私有云、混合云、桌面云)推出的一项合作伙伴计划,旨在为构建持续发展、合作共赢的鲲鹏生态圈,通过整合华为的技术、品牌资源,与合作伙伴共享商机和利…...
将linux服务器 设置成 proxy.SOCKS5 服务器
gpt: 如果你想在 Linux 服务器上设置一个 SOCKS5 代理服务器,你可以使用一些现有的工具,比如 Shadowsocks、Dante、或者其他支持 SOCKS5 协议的软件。下面是一个使用 Dante 的简单示例: 1. **安装 Dante:** bash sudo apt-g…...
无mac电脑生成uniapp云打包私钥证书的攻略
uniapp顾名思义是一个跨平台的开发工具,大部分uniapp的开发者,其实并没有mac电脑来开发,但是生成ios的证书,官网的教程却是需要mac电脑的,那么有没有办法无需mac电脑即可生成uniapp云打包的私钥证书呢? 下…...
py 启动默认浏览器
要在Python中启动默认浏览器,可以使用第三方库如webbrowser或pyperclip,也可以使用操作系统特定的命令行调用。以下是几个不同的方法: 使用webbrowser库: import webbrowser webbrowser.open("http://example.com")这…...
scala可变参数列表使用
在Scala中,可以使用可变参数列表(varargs)来定义一个函数,以接受可变数量的参数。示例如下: def printArgs(args: String*): Unit {args.foreach(println) }// 使用可变参数列表 printArgs("Hello", "…...
经验分享:JMeter控制RPS
一、前言 RPS (Request Per Second)一般用来衡量服务端的吞吐量,相比于并发模式,更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS,我们可以把他理解为我们的TPS,我们就…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
