week3 1、学习使用Intel RealSense D435的基本连接和识别,如实现物体种类识别和距离定位 2、飞桨PaddlePaddle基础学习 3、实现视觉坐标系和大地坐标系的变换

一、Intel RealSense D435(使用了yolov8)

Intel RealSense D435是一款具备距离感知功能的摄像头,它采用了yolov8算法来实现物体种类识别和距离定位。

环境配置

分析图片(需要将图片放在与代码同一个文件夹)

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(['zidane.jpg'], stream=True)  # return a generator of Results objects

# Process results generator
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    result.show()  # display to screen
    result.save(filename='result.jpg')  # save to disk

 

分析视频(同一文件夹)

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
video_path = "12.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

分析实时摄像头

import cv2
from ultralytics import YOLO

# 加载YOLOv8模型
model = YOLO('runs/yolov8n.pt')

# 打开摄像头
cap = cv2.VideoCapture(0)  # 0表示默认摄像头,如果有多个摄像头,可以尝试不同的索引

# 循环读取摄像头帧
while True:
    # 从摄像头读取一帧
    success, frame = cap.read()

    if success:
        # 在帧上运行YOLOv8推理
        results = model(frame)

        # 在帧上可视化结果
        annotated_frame = results[0].plot()

        # 显示带注释的帧
        cv2.imshow("YOLOv8目标检测", annotated_frame)

        # 检测按键输入
        key = cv2.waitKey(1) & 0xFF

        # 如果按下'q'键则退出循环
        if key == ord("q"):
            break

    else:
        break

# 释放摄像头捕获对象
cap.release()

# 关闭显示窗口
cv2.destroyAllWindows()

 调用了本机摄像头

还可调用外接摄像头,如Intel RealSense D435,只需更改id

cap = cv2.VideoCapture(700)  # 0表示默认摄像头,如果有多个摄像头,可以尝试不同的索引

二、飞桨PaddlePaddle基础学习

前往官网配置环境

快速了解深度学习模型开发的大致流程,并初步掌握飞桨框架 API 的使用方法。

深度学习任务一般分为以下几个核心步骤:

  1. 数据集定义与加载

  2. 模型组网

  3. 模型训练与评估

  4. 模型推理

可以实现读取训练集中的代码进行识别图片数字与输出训练集的图片

import paddle
import numpy as np
from paddle.vision.transforms import Normalize

transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 下载数据集并初始化 DataSet
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

# 模型组网并初始化网络
lenet = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(lenet)

# 模型训练的配置准备,准备损失函数,优化器和评价指标
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())

# 模型训练
model.fit(train_dataset, epochs=5, batch_size=64, verbose=1)
# 模型评估
model.evaluate(test_dataset, batch_size=64, verbose=1)

# 保存模型
model.save('./output/mnist')
# 加载模型
model.load('output/mnist')

# 从测试集中取出一张图片
img, label = test_dataset[0]
# 将图片shape从1*28*28变为1*1*28*28,增加一个batch维度,以匹配模型输入格式要求
img_batch = np.expand_dims(img.astype('float32'), axis=0)

# 执行推理并打印结果,此处predict_batch返回的是一个list,取出其中数据获得预测结果
out = model.predict_batch(img_batch)[0]
pred_label = out.argmax()
print('true label: {}, pred label: {}'.format(label[0], pred_label))
# 可视化图片
from matplotlib import pyplot as plt
plt.imshow(img[0])
plt.show()

尝试是否可以实现识别其他。jpg图片

import paddle
import numpy as np
from paddle.vision.transforms import Normalize
import matplotlib.pyplot as plt


transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 下载数据集并初始化 DataSet
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

# 模型组网并初始化网络
lenet = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(lenet)

# 模型训练的配置准备,准备损失函数,优化器和评价指标
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())

# 模型训练
model.fit(train_dataset, epochs=5, batch_size=64, verbose=1)
# 模型评估
model.evaluate(test_dataset, batch_size=64, verbose=1)

# 保存模型
model.save('./output/mnist')



model.load('output/mnist')

from PIL import Image

# 加载新的jpg图片,并进行必要的预处理
new_img_path = '1.jpg'  # 替换为您想要使用的jpg图片路径
new_img = Image.open(new_img_path).convert('L')  # 转为灰度图像
new_img = new_img.resize((28, 28))  # 缩放为MNIST数据集的大小
new_img = np.array(new_img)  # 转为numpy数组
new_img = (new_img - 127.5) / 127.5  # 归一化处理

new_img_batch = np.expand_dims(new_img, axis=0)  # 添加一个批处理维度
new_img_batch = np.expand_dims(new_img_batch.astype('float32'), axis=0)  # 将图片shape从1*28*28转换为1*1*28*28
# 执行推理并打印结果
# 执行推理并打印结果
out = model.predict_batch(new_img_batch)[0]
pred_label = np.argmax(out)
print('Predicted label: {}'.format(pred_label))
if len(out) > pred_label:
    print('Confidence: {}'.format(out[pred_label]))
else:
    print('Invalid confidence index')
# 可视化新的jpg图片
plt.imshow(new_img, cmap='gray')
plt.show()

结果是不太准确比较模糊

Predicted label: 1

三、了解物体在空间中三维坐标的表示,并实现视觉坐标系和大地坐标系的变换。

在三维空间中,物体的三维坐标表示通常采用笛卡尔坐标系,即通过三个坐标轴(X、Y、Z)来确定一个点的位置。这种表示方法在计算机图形学、机器人学和许多其他领域中非常常见为了实现视觉坐标系和大地坐标系之间的变换,首先需要理解这两种坐标系的基本概念和特点。

视觉坐标系通常指的是与相机或观察者相关的坐标系,它描述的是从相机中心到物体表面点的向量。在双目立体视觉中,世界坐标系可以被用来描述相机的位置,而相机坐标系则直接关联到相机本身图像坐标系则是基于像素的二维坐标系,用于描述图像中的点

大地坐标系则是一种基于地球表面或其参考椭球体的坐标系统,常用于地理信息系统(GIS)中。它包括经度、纬度和高程三个维度,能够精确地表示地球表面上某一点的位置。大地直角坐标系是根据参考椭球面建立的笛卡尔直角坐标系,原点为参考椭球面的中心点

要实现从视觉坐标系到大地坐标系的变换,首先需要将视觉坐标系中的点转换到世界坐标系中,这通常涉及到旋转和平移的操作。然后,如果需要,可以从世界坐标系转换到大地坐标系,这可能涉及到复杂的地理信息和数学模型。在这个过程中,旋转矩阵和平移向量是常用的工具,它们可以通过矩阵乘法来实现对坐标系中点的旋转和平移。此外,齐次坐标技术也是处理三维空间变换的重要方法,它允许在进行平移、旋转、缩放等操作时使用统一的矩阵表示法。在实际应用中,如SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)技术,就需要频繁地进行坐标系之间的转换,以实现对环境的准确理解和映射

总之,了解物体在空间中的三维坐标表示,并实现视觉坐标系和大地坐标系之间的变换,需要掌握三维坐标变换的基本原理和方法,包括但不限于旋转矩阵、齐次坐标以及地理信息的应用。这些知识和技术在计算机视觉、机器人学、GIS等多个领域都有广泛的应用。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于心脏病预测的问题,使用循环神经网络(RNN)是一种常见的方法。RNN适用于处理序列数据,而心电图信号就是一种序列数据。在使用RNN进行心脏病预测时,你可以将心电图信号作为输入序列,然后通过训练RNN模型来预测患者是否患有心脏病。 首先,你需要准备一个合适的数据集,其中包含心电图信号和相应的心脏病标签。可以使用公开的心电图数据集,如PTB数据库或MIT-BIH数据库。然后,你可以对数据进行预处理和特征工程,如数据清洗、滤波、降采样等。 接下来,你可以构建一个RNN模型。RNN模型由一系列循环层组成,每个循环层都会处理一个时间步的输入数据。你可以选择不同类型的RNN单元,如简单循环单元(SimpleRNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)。通过添加适当的全连接层和激活函数,你可以将RNN模型输出映射到二分类问题(有或无心脏病)的结果。 然后,你可以使用训练集对RNN模型进行训练,并使用验证集进行模型调优。在训练过程中,你可以使用适当的损失函数(如交叉熵)和优化算法(如随机梯度下降)来最小化模型的预测误差。 最后,你可以使用测试集对训练好的模型进行评估,并计算模型的性能指标,如准确率、精确率、召回率等。这些指标可以帮助你评估模型的预测能力和泛化能力。 需要注意的是,心脏病预测是一个复杂的医学问题,仅仅使用心电图信号可能不能得到准确的预测结果。通常情况下,还需要结合其他患者的临床信息和医学知识来进行综合评估。因此,在进行心脏病预测时,建议与专业医生合作,并遵循相关的医学准则和规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值