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

基于图像掩膜和深度学习的花生豆分拣(附源码)

目录

项目介绍

图像分类网络构建

处理花生豆图片完成预测


项目介绍

这是一个使用图像掩膜技术和深度学习技术实现的一个花生豆分拣系统

我们有大量的花生豆图片,并以及打好了标签,可以看一下目录结构和几张具体的图片

 

同时我们也有几张大的图片,里面有若干花生豆,我们要做的任务就是将花生豆框住并且实现分类,可以看一下这些图片 

图像分类网络构建

这部分的内容和我上一篇博客几乎大同小异,就是把最后的分类个数和类别映射换了换,掌握了上一个项目,这部分相信也会理解的很快,这里附上网址并做简单的回顾

kaggle实战图像分类-Intel Image Classification(附源码)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_62428212/article/details/136059443?spm=1001.2014.3001.5501

1,数据集加载

2,构建网络

3,定义超参数训练网络

这里小编使用的是resnet18这个网络,因为花生豆数据集的训练,一不小心就会过拟合,用一些更深更强的网络很容易导致过拟合,resnet18好像也有点过拟合,这里附上训练结果图片

处理花生豆图片完成预测

我们训练好网络后,并不能直接将网络用于预测整个花生豆的大图,因为里面有很多的花生豆,所以我们可以取出并预测,那么怎么单独取出来呢,这里用到了掩膜用以分割花生豆(一些注释写在了代码里)

首先导入相应的库和定义一下参数

# -*- coding: GB2312 -*-
import os
import cv2
import numpy as np
import torch
from PIL import Image
from utils.model import ResNet18
from torchvision import transformspath = 'data/pic'
image_path = os.listdir(path)classify = {0: 'baiban', 1: 'bandian', 2: 'famei', 3: 'faya', 4: 'hongpi', 5: 'qipao', 6: 'youwu', 7: 'zhengchang'}transform = transforms.Compose([transforms.Resize((64, 64)),transforms.ToTensor()])net = ResNet18(8)
net.load_state_dict(torch.load('model_weights/ResNet18.pth'))min_size = 30
max_size = 400

然后我们加载整个大图的文件夹并遍历处理每张图片

for i in image_path:img = cv2.imread(os.path.join(path,i))hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)  # 转HSV色彩空间# 定义背景颜色区间(蓝色区间)lower_blue = np.array([100, 100, 8])upper_blue = np.array([255, 255, 255])mask = cv2.inRange(hsv, lower_blue, upper_blue)  # 创建掩膜(在上述颜色范围内(背景)为白色,不在(花生豆)则为黑色)result = cv2.bitwise_and(img, img, mask=mask)  # 根据掩膜提取图像,会将花生豆的部分变为黑色,然后提取出背景部分result = result.astype(np.uint8)_, binary_image = cv2.threshold(result, 1, 255, cv2.THRESH_BINARY)  # 三通道二值化。背景会全为白色,花生豆部分为黑色# 到这里我们就得到了经过掩膜过滤的图片,其中白色的为背景,黑色的为花生豆,我们可以看一下cv2.namedWindow('HSV_Result', cv2.WINDOW_NORMAL)cv2.resizeWindow('HSV_Result', 2840, 1000)cv2.imshow('HSV_Result', binary_image)cv2.waitKey(0)cv2.destroyAllWindows()

我们发现这些花生豆的背景是蓝色的,所以我们创建了一个用以区分背景和花生豆的掩膜用来分割二者,其分割完后的图片为

通过掩膜处理完后,我们可以清晰的观察到图片里的花生豆,后面我们就可以在这幅图片上画出轮廓并分割出花生豆部分依次放入网络预测

# 过滤边框
def delet_contours(contours, delete_list):delta = 0for i in range(len(delete_list)):del contours[delete_list[i] - delta]delta = delta + 1return contoursinverted_image = cv2.cvtColor(binary_image, cv2.COLOR_BGR2GRAY)  # 转灰度图_, binary_image = cv2.threshold(inverted_image, 1, 255, cv2.THRESH_BINARY)  # 单通道二值化contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)contours = list(contours)delete_list = []for i in range(len(contours)):# 通过框的周长去过滤边框if (cv2.arcLength(contours[i], True) < min_size) or (cv2.arcLength(contours[i], True) > max_size):delete_list.append(i)contours = delet_contours(contours, delete_list)# 遍历每一个框(取出每一个单独的花生豆进行预测)for i in range(len(contours)):x, y, w, h = cv2.boundingRect(contours[i])img_pred = img[y:y+h, x:x+w, :]img_pred = Image.fromarray(img_pred)  # 将numpy数组转为PIL图像对象img_pred = transform(img_pred)  # 调整图像尺寸和转tensor格式img_pred = torch.unsqueeze(img_pred, dim=0)  # 升一个维度pred = torch.argmax(net(img_pred), dim=1)  # 拿到概率最大的分类preds = classify[int(pred)]  # 数字映射为字符串cv2.putText(img, preds, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1, cv2.LINE_AA)  # 写类别标签cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 画矩形框cv2.namedWindow('Result', cv2.WINDOW_NORMAL)cv2.resizeWindow('Result',2840,1000)cv2.imshow('Result', img)cv2.waitKey(0)cv2.destroyAllWindows()

展示一下预测结果

小编这里发现这个方法可以预测成功中间大多数的花生豆,但是边缘处的花生豆因不会被画出轮廓故不会被放入网络预测,大体预测的效果还算可以。

源码及数据集请查看:https://github.com/jvyou/Peanut-and-bean-sorting

视频讲解请查看:https://www.bilibili.com/video/BV13F4m1g7Wp/?spm_id_from=333.999.0.0

相关文章:

基于图像掩膜和深度学习的花生豆分拣(附源码)

目录 项目介绍 图像分类网络构建 处理花生豆图片完成预测 项目介绍 这是一个使用图像掩膜技术和深度学习技术实现的一个花生豆分拣系统 我们有大量的花生豆图片&#xff0c;并以及打好了标签&#xff0c;可以看一下目录结构和几张具体的图片 同时我们也有几张大的图片&…...

【网络】:序列化和反序列化

序列化和反序列化 一.json库 二.简单使用json库 前面已经讲过TCP和UDP&#xff0c;也写过代码能够进行双方的通信了&#xff0c;那么有没有可能这种通信是不安全的呢&#xff1f;如果直接通信&#xff0c;可能会被底层捕捉&#xff1b;可能由于网络问题&#xff0c;一方只接收到…...

AJ-Report 【开源的一个BI平台】

AJ-Report是全开源的一个BI平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。     多数据源支持&#xff0c;内置mysql、elasticsearch、kudu驱动&#xff0c;支持自定义数据集省去数据接口开发&#xff0c;目前已支持30…...

Matplotlib核心:掌握Figure与Axes

详细介绍Figure和Axes&#xff08;基于Matplotlib&#xff09; &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333; 一、Figure&#xff08;图形&#xff09;&#x1f333;&#x1f341;1. 创建Figure&#x1f341;&#x1f341;2. 添加Axes&am…...

问题:A注册会计师必须在期中实施实质性程序的情形是()。 #学习方法#其他

问题&#xff1a;A注册会计师必须在期中实施实质性程序的情形是&#xff08;&#xff09;。 A&#xff0e;甲公司整体控制环境不佳 B&#xff0e;将期中实质性程序所获证据与期末数据进行比较 C&#xff0e;评估的认定层次重大错报风险很高 D&#xff0e;没有把握通过在期中…...

C#系列-C#EF框架返回单行记录(24)

在C#中&#xff0c;使用Entity Framework (EF)框架时&#xff0c;如果你想要执行一个查询并返回单行记录&#xff0c;你可以使用SingleOrDefault、FirstOrDefault、Single或First方法。这些方法适用于DbSet<T>对象&#xff0c;它们可以执行查询并返回单个实体或默认值&am…...

【PyTorch】张量(Tensor)的生成

PyTorch深度学习总结 第一章 Pytorch中张量(Tensor)的生成 文章目录 PyTorch深度学习总结一、什么是PyTorch&#xff1f;二、张量(Tensor)1、张量的数据类型2、张量生成和信息获取 总结 一、什么是PyTorch&#xff1f; PyTorch是一个开源的深度学习框架&#xff0c;基于Python…...

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Viterbi译码原理

目录 一、引言 二、Viterbi译码的基本原理 2.1 卷积码与网格图 2.2 Viterbi算法的核心思想 2.3 路径度量与状态转移 三、Viterbi译码算法工作原理详解 3.1 算法流程 3.2 关键步骤 3.3 译码算法举例 3.4 性能特点 四、Viterbi译码的应用场景 4.1 移动通信系统 4.2 卫…...

矩阵在计算机图像处理中的应用

矩阵在计算机图像处理中是非常核心的概念&#xff0c;因为它们为表示和操作图像数据提供了一种非常方便和强大的方式。以下是矩阵在计算机图像处理中的一些关键作用&#xff1a; 图像表示&#xff1a;在计算机中&#xff0c;图像通常被表示为像素矩阵&#xff0c;也就是二维数组…...

Java实现教学资源共享平台 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…...

Spring Boot(六十五):使用 ant.jar 执行 SQL 脚本文件

ant用处,主要用在编译java文件,打包,部署。打包:jar,war,ear包等。ant在项目中有很重要的作用。今天我们讲解它的另一个作用:执行 SQL 脚本文件。 1 引入依赖 <dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId&g…...

161基于matlab的快速谱峭度方法

基于matlab的快速谱峭度方法&#xff0c;选择信号峭度最大的频段进行滤波&#xff0c;对滤波好信号进行包络谱分析。输出快速谱峭度及包络谱结果。程序已调通&#xff0c;可直接运行。 161 信号处理 快速谱峭度 包络谱分析 (xiaohongshu.com)...

CTFshow-WEB入门-信息搜集

web1&#xff08;查看注释1&#xff09; wp 右键查看源代码即可找到flag web2&#xff08;查看注释2&#xff09; wp 【CtrlU】快捷键查看源代码即可找到flag web3&#xff08;抓包与重发包&#xff09; wp 抓包后重新发包&#xff0c;在响应包中找到flag web4&#xff08;robo…...

django密码管理器(创建项目)

目录 创建项目 安装django 创建项目(django-admin) 创建管理员用户 创建数据库 创建项目 新建一个项目文件夹&#xff0c;如"密码管理器" 安装django 要先安装pip,pip安装地址:pypi.org、pypi.python.org、cheeseshop.python.org pip install django 创建项…...

Centos7之Oracle12c安装与远程连接配置

Centos7之Oracle12c安装与远程连接配置 文章目录 Centos7之Oracle12c安装与远程连接配置1.Oracle官网2. Centos7中安装Oracle12c(12.2.0.1.0)2.1 Introduction (介绍)2.2 Prerequisites(先决条件)2.3 Installation Steps(安装步骤)2.4 Oracle Installer Screens(Oracle安装程序…...

CVE-2022-25578 漏洞复现

CVE-2022-25578 路由/admin/admin.php是后台&#xff0c;登录账号和密码默认是admin、tao&#xff0c;选择文件管理。 是否还记得文件上传中的.htaccess配置文件绕过发&#xff0c;在这个文件中加入一句AddType application/x-httpd-php .jpg&#xff0c;将所有jpg文件当作php…...

Ubuntu22.04安装黑屏(进入U盘安装引导时 和 安装完成后)

一&#xff1a;进入U盘安转引导时黑屏 问题描述&#xff1a;选择’try or install ubuntu’&#xff0c;开始安装&#xff0c;出现黑屏。 解决方法&#xff1a;&#xff08;可行&#xff09; 安装时&#xff0c;先选择" try or install ubuntu", 此时不要按enter&a…...

一、DataX简介

DataX简介 一、什么是DataX二、DataX设计三、支持的数据源四、框架设计五、运行原理六、DataX和Sqoop对比 一、什么是DataX DataX是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库&#xff08;MySQL、Oracle等&#xff09;、HDFS、Hive、OD…...

直播app开发,技术驱动的实时互动新纪元

随着互联网技术的快速发展&#xff0c;直播已成为我们日常生活的重要组成部分。从娱乐、教育到商业活动&#xff0c;直播的广泛应用正在改变着我们的生活和工作方式。在这一变革中&#xff0c;直播开发扮演着至关重要的角色。本文将探讨直播开发的核心理念、技术挑战以及未来的…...

Apache POI的介绍以及使用示例

Apache POI 是一套开源的 Java 库&#xff0c;用于读取和写入 Microsoft Office 文档格式&#xff0c;如 Excel、Word 和 PowerPoint。Spring Boot 是一个流行的 Java 应用程序框架&#xff0c;用于简化 Spring 应用的开发和部署。将 Apache POI 与 Spring Boot 结合使用&#…...

COMSOL激光与电火花高斯热源作用下5.6版本两相流水平集仿真模型:流体传热-层流耦合研究

comsol激光、电火花&#xff08;高斯热源&#xff09;加工的水平集两相流仿真模型&#xff0c;5.6版本的&#xff0c;是流体传热—层流—两相流水平集耦合。在COMSOL Multiphysics 5.6中&#xff0c;模拟激光或电火花加工过程中的热源分布和流体行为&#xff0c;是一个相当有趣…...

CREST:如何用5分钟开启分子构象探索之旅?

CREST&#xff1a;如何用5分钟开启分子构象探索之旅&#xff1f; 【免费下载链接】crest Conformer-Rotamer Ensemble Sampling Tool based on the xtb Semiempirical Extended Tight-Binding Program Package 项目地址: https://gitcode.com/gh_mirrors/crest/crest 在…...

四自由度车辆与简支梁桥车桥耦合振动的Matlab实现

车桥耦合振动程序 matlab编程 四自由度车辆与简支梁桥车桥耦合 可提取车体垂直及转动加速度响应以及车轮响应 在交通工程领域&#xff0c;车桥耦合振动的研究对于保障桥梁结构安全以及行车舒适性至关重要。今天咱们就来讲讲如何用Matlab实现四自由度车辆与简支梁桥的车桥耦合振…...

HunyuanVideo-Foley音效生成:支持中文prompt理解的城市环境音效精准生成

HunyuanVideo-Foley音效生成&#xff1a;支持中文prompt理解的城市环境音效精准生成 1. 产品概述 HunyuanVideo-Foley是一款专为视频内容创作设计的AI音效生成工具&#xff0c;能够根据中文文本描述精准生成各类环境音效。本镜像为RTX 4090D 24GB显存显卡深度优化的私有部署版…...

7大核心优势!Windows环境PM2服务化终极解决方案:从痛点到实战的完整指南

7大核心优势&#xff01;Windows环境PM2服务化终极解决方案&#xff1a;从痛点到实战的完整指南 【免费下载链接】pm2-installer Install PM2 offline as a service on Windows or Linux. Mostly designed for Windows. 项目地址: https://gitcode.com/gh_mirrors/pm/pm2-ins…...

目标检测实战:从VOC XML到YOLO格式的自动化数据流水线

1. 为什么需要VOC转YOLO格式 在目标检测任务中&#xff0c;数据格式的统一性直接影响着模型训练的效率。VOC&#xff08;PASCAL VOC&#xff09;和YOLO是两种最常见的标注格式&#xff0c;但它们的存储方式截然不同。VOC采用XML文件记录目标的类别和边界框坐标&#xff0c;而YO…...

Phi-3-Mini-128K企业级应用:基于MCP协议构建安全可控的AI工具链

Phi-3-Mini-128K企业级应用&#xff1a;基于MCP协议构建安全可控的AI工具链 最近和几个在企业里做技术管理的朋友聊天&#xff0c;大家不约而同地提到了同一个烦恼&#xff1a;看着外面各种AI模型能力越来越强&#xff0c;心里痒痒的&#xff0c;真想引入到自己的业务流程里&a…...

开源工具Cowabunga Lite:iOS设备零门槛个性化方案全解析

开源工具Cowabunga Lite&#xff1a;iOS设备零门槛个性化方案全解析 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 在iOS生态系统中&#xff0c;用户对设备个性化的需求与系统封闭性之间始终…...

Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节

Nunchaku FLUX.1-dev 结合Transformer架构&#xff1a;提升图像生成一致性与细节 最近在尝试各种文生图模型时&#xff0c;我发现了一个挺有意思的现象&#xff1a;很多模型在处理简单描述时表现不错&#xff0c;但一旦遇到包含多个对象、复杂关系或者长段描述的提示词&#x…...

QLVideo终极指南:让macOS Finder完美预览所有视频格式

QLVideo终极指南&#xff1a;让macOS Finder完美预览所有视频格式 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcod…...