首页 > 其他分享 >数据采集与融合技术实践

数据采集与融合技术实践

时间:2024-12-15 11:31:05浏览次数:8  
标签:img 融合 实践 采集 物种 动植物 device 识别 图片

这个项目属于哪个课程 2024数据采集与融合技术实践
组名 从你的全世界爬过
团队logo
项目简介 项目名称:博物识植
项目logo

项目介绍:在探索自然奥秘的旅途中,我们常与动植物相伴而行,却无法准确识别它们,更难以深入了解他们的特征。为了更好地理解和欣赏自然界的多样性,提升我们对动植物的认识和保护意识,我们需要一个智能系统。该系统能够根据用户拍摄的动植物照片,智能识别并匹配相应的信息,同时为用户提供丰富的学习资源,帮助人们更深入地了解和学习动植物知识。通过这样的方式,我们不仅能够更准确地识别和欣赏周围的生命,还能够在日常生活中,随时随地增长见识,体验探索自然的乐趣。
项目背景:人类的生活离不开动植物的支持,动植物的多样性是一切地球生物的依赖。在生活中随处可见很多动植物,动植物是人类生活必不可少的一部分。 保护大自然保护动植物就是在保护人类自己。在保护动植物的过程中,首先要解决的是动植物识别的问题。
项目意义:提供了一种我们与自然界互动的方式。其应用场景广泛,渗透到了教育、旅游等多个领域。在学校,它可以是生物课程的辅助工具,通过实践学习生物多样性;在旅游行业,它可以帮助游客更好地了解他们所参观的自然景观,提升旅行体验
团队成员学号 042201401陈高菲、102202107王勤琛、102202108王露洁、102202115孙佳会、102202123张铭心、102202130林烨、102202138徐婉瑜、102202140郭心怡
项目目标 本系统旨在实现以下功能:
a.图片识别功能:用户上传动植物图片,系统通过图像识别技术自动识别物种,返回准确的物种名称。
b.物种详细信息:识别后,用户将获取该物种的详细信息,包括外形特点、生长环境、分布区域等相关数据。
c.物种图片展示:系统将提供该物种的高质量图片,帮助用户更直观地了解物种特征。
d.名称搜索功能:用户可以手动输入动植物的名称,系统将返回该物种的相关信息,方便快速查询。
e.网站部署上线:通过华为云的弹性计算服务部署网站,确保系统高可用和稳定运行,实现网站上线。
其他参考文献 1.yanjingang/pigimgclassification: 图像分类
2.基于改进SE-MnasNet骨干网络YOLOv5的动植物树木识别系统_开源 树木识别
gitee链接 2024学年数据采集与融合技术大作业——博物识植 团队:从你的全世界爬过

一、系统总体技术概述

1.1 系统架构概述

系统分为前端、后端、数据库、AI接口、爬虫模块、部署等多个层级。前后端之间通过RESTful API进行通信。具体分为以下几个部分:

  • 前端:使用HTML、CSS和JavaScript进行界面设计,实现用户与系统的交互。用户可以上传文本、图片等文件。
  • 后端:使用Python语言和Flask框架实现,处理图像识别、查询请求、调用AI接口和爬虫数据存储等业务逻辑。
  • 数据库:存储动植物物种的详细信息,包括图像、分布、特点等。存储物种识别的历史记录信息。
  • 图像识别与AI接口:利用图像识别模型或调用第三方AI服务(如百度AI、Google Vision等)识别图片并返回结果。
  • 爬虫:提前爬取动植物相关网站数据,补充物种数据库。使用Selenium框架进行实时图片爬取。
  • 部署平台:使用华为云平台部署系统,保证系统的高可用和稳定性。

1.2 各模块技术实现

1.2.1 图像识别模块

  • 目标:用户上传图片,系统通过图像识别技术返回物种名称。
  • 技术方案:
    使用深度学习模型:基于改进SE-MnasNet骨干网络YOLOv5和卷积神经网络cnn opencv进行图像分类和识别。
    基于识别精确度的考虑调用第三方云服务百度智能云的动植物识别API提供快速而准确的图像识别。
  • 流程:
    用户上传图片,前端将图片通过API发送至后端。
    后端调用模型或AI图像识别API分析图片,获取可能的物种标签。
    后端将物种名称返回给前端,前端展示识别结果。

1.2.2 物种信息查询功能

  • 目标:根据识别后的物种名称或用户输入的名称,返回该物种的详细信息。
  • 技术方案:
    利用selenium技术和scrapy框架爬取信息网站所有物种信息(如外形特点生长环境、分布区域等)存储在csv表导入数据库并定期更新。
    利用查询语句在数据库中进行查找并返回详细信息。
    若数据库中没有相关信息,则调用百度智能云的千帆大模型识别物种名称,查询物种相关信息。
  • 流程:
    后端识别出物种名称时,系统首先查询数据库,若没有该物种的信息,再调用AI接口获取。

1.2.3 相似图片展示

  • 目标:根据用户上传的图片,返回物种的相似图片,帮助用户直观了解物种。
  • 技术方案:
    运用selenium爬虫技术实时爬取百度识图返回的相似图片
  • 流程:
    后端接收前端传入的图片后,将图片作为输入文件传入百度识图网站实时爬取相似图片,在系统返回物种详细信息时,将图片URL一并返回。

1.2.4 保存历史记录

  • 目标:将用户的历史搜索记录保存至数据库,方便用户在“我的图鉴”页面查看并跳转至物种详情页,随时查看过去的搜索记录。
  • 技术方案:
    创建一个数据库表专门用来保存用户的搜索记录,包括用户上传的图片、识别出来的物种名称、物种的详细信息(如描述、分布、图片URL等)
  • 流程:
    当用户获取识别结果时,后端系统会将物种信息保存至数据库中。在点击我的图鉴中的物种名称时,后端调取数据库信息展示在前端界面。

1.2.5 部署与部署架构

  • 目标:将整个系统部署到华为云服务器上,让非本地用户可以访问。
  • 技术方案:
    使用华为云ECS(Elastic Cloud Server)部署后端服务。
    使用华为云OBS 存储图片等静态资源。
    使用RDS(Relational Database Service)存储物种信息数据库。
    前端可以使用 Nginx 进行负载均衡和反向代理
  • 流程:
    前后端文件上传部署完成后即可实现非本地用户的访问。

1.3 源码运行步骤

  • gitee仓库下载源码
  • 启动文件中的ai.py与database.py文件
  • 运行index.html文件

二、个人分工及具体实现(102202107王勤琛)

使用深度学习模型:基于改进SE-MnasNet骨干网络YOLOv5进行图像分类和识别。

以下是我的模型主要代码:
import torch
from PIL import Image
from torchvision import transforms
from models.experimental import attempt_load  # 导入YOLOv5的模型加载函数
from utils.general import check_img_size, non_max_suppression, scale_boxes, clip_boxes  # 注意这里使用的是 scale_boxes
from utils.torch_utils import select_device, time_sync

def load_image(image_path, img_size=640):
    # 使用PIL加载图片
    img = Image.open(image_path).convert('RGB')
    # 定义转换操作
    transform = transforms.Compose([
        transforms.Resize((img_size, img_size)),  # 调整图片大小
        transforms.ToTensor(),  # 转换为Tensor
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # 归一化
    ])
    # 应用转换
    img = transform(img)
    # 添加批次维度
    img = img.unsqueeze(0)
    return img

def detect(weights=r'C:\Users\26843\Downloads\yolov5s.pt', img_size=640, conf_thres=0.15, iou_thres=0.50, device=''):
    device = select_device(device)
    print(f"Using device: {device}")  # 打印设备信息
    half = device.type != 'cpu'  # 半精度仅在CUDA设备上支持
    model = attempt_load(weights, device=device)  # 加载模型
    stride = int(model.stride.max())  # 模型的stride
    imgsz = check_img_size(img_size, s=stride)  # 检查图片大小
    names = model.module.names if hasattr(model, 'module') else model.names  # 获取类别名称

    # 加载图片
    image_path = r"C:\Users\26843\images\501.jpg"
    img0 = Image.open(image_path).convert('RGB')
    img0_shape = img0.size[::-1]  # (height, width)
    img = load_image(image_path, img_size=imgsz).to(device)
    img = img.half() if half else img.float()  # uint8 to fp16/32

    # 打印调试信息
    print(f"Image path: {image_path}")
    print(f"img1_shape: {img.shape[2:]}, img0_shape: {img0_shape}")

    # 推理
    with torch.no_grad():
        pred = model(img, augment=False, visualize=False)[0]

    # 应用NMS
    pred = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False)

    for i, det in enumerate(pred):  # 检测结果遍历
        if len(det):
            # 使用 scale_boxes 函数调整坐标
            det[:, :4] = scale_boxes(img.shape[2:], det[:, :4], img0_shape).round()  # 调整坐标
            for *xyxy, conf, cls in reversed(det):
                label = f'{names[int(cls)]} {conf:.2f}'
                xyxy = [int(x) for x in xyxy]  # xyxy坐标转换为整数
                print(f"Label: {label}, Bounding Box: {xyxy}")
        else:
            print("No detections found. Try adjusting the confidence threshold or IOU threshold.")

if __name__ == '__main__':
    detect()
模型的结构为下图,其他具体代码详见码云链接yolov5

image

模型结果:

image
image
image

心得体会:

学到的东西:

深度学习应用: 我更深入地理解了深度学习在实际问题中的应用,特别是在目标检测领域。
数据处理: 我学会了如何处理和准备数据,这对模型性能至关重要。
模型调优: 我掌握了如何调整模型参数来优化性能。

收获:

实践技能: 通过实际操作,我提高了编程和调试技能。
问题解决: 我学会了如何独立解决技术问题,增强了自我学习和独立思考的能力。

模型的不足:

泛化能力: 在一些复杂或非标准条件下,模型的识别准确率还有待提高。
计算资源: 模型在运行时对计算资源的需求较高,限制了其在资源受限环境中的应用。
数据依赖: 对训练数据的质量和多样性依赖较大,需要持续的数据更新和维护。

标签:img,融合,实践,采集,物种,动植物,device,识别,图片
From: https://www.cnblogs.com/wqccc/p/18607801

相关文章

  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践15
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践14
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践13
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践5
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 综合设计——多源异构数据采集与融合应用综合实践
    综合设计——多源异构数据采集与融合应用综合实践......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践11
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践13
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践11
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 数据采集与融合技术实践
    综合设计——多源异构数据采集与融合应用综合实践这个项目属于哪个课程2024数据采集与融合技术实践组名在大大的数据里面挖呀挖呀挖项目简介项目名称:城市记忆项目Logo:项目介绍:我们希望通过一种直观、生动的方式,让用户感受城市发展变迁的魅力。因此设计了一个以时间轴为......
  • 全域用户建模在美团首页推荐的探索与实践13
     一、背景1.1产品形态及业务特点美团首页推荐展位,如下图1所示,是用户打开美团App后,触达美团各业务的流量入口,每天服务数千万用户。首页推荐的核心能力体现在差异化地承载并快速响应用户个性化需求,需要支持高效分发外卖、餐饮、休闲娱乐、酒店旅游、优选、买菜、电商、超市闪......