0

0

摔倒检测-完全用ChatGPT开发,分享如何正确地向ChatGPT提问

PHPz

PHPz

发布时间:2023-04-07 15:06:04

|

2204人浏览过

|

来源于51CTO.COM

转载

哈喽,大家好。

之前给大家分享过摔倒识别、打架识别,今天以摔倒识别为例,我们看看能不能完全交给ChatGPT来做。

让ChatGPT来做这件事,最核心的是如何向ChatGPT提问,把问题一股脑的直接丢给ChatGPT,如:用 Python 写个摔倒检测代码 是不可取的, 而是要像挤牙膏一样,一点一点引导ChatGPT得到准确的答案,从而才能真正让ChatGPT提高我们解决问题的效率。

今天分享的摔倒识别案例,与ChatGPT对话的思路清晰,代码可用度高,按照GPT返回的结果完全可以开发一个摔倒识别的项目了,并且还有一些延伸的话题,如:毕设的改进点。

下面开始正式的分享。

1. 角色设定

向ChatGPT提问首先要给他一个角色设定,在算法领域这叫prompt,有了进入了角色,才能更好地回答问题。所以,我提问的第一句是:

假如你是一名AI工程师,我想识别视频中是否有摔倒行为,有哪些办法

没必要刚上来就让他直接写代码,先问问他有哪些办法或者思路。

我们看看ChatGPT的回答

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

图片

给出了3个方案,有传统的图像方法,也有深度学习方法。

2. 思路引导

我们当然是对深度学习感兴趣了,所以继续询问关于深度学习的方法

使用深度学习的方法有哪些

ChatGPT回答

图片

从卷积神经网络到卷积循环神经网络说了个遍。

看起来循环神经网络 RNN更简单、靠谱,接下来我的提问是

我需要 循环神经网络 (RNN) 的方法

ChatGPT回答

图片

给出了非常详细的、实操性非常强的步骤,我简单归类一下,大致是两步:

第一步,对视频预处理,用卷积神经网络(如:ResNet)提取视频动作特征(类似 wordembedding) 第二步,用动作特征作为 lstm 模型的输入,训练 lstm 循环神经网络,对动作特征分类,从而识别出摔倒行为

3. 写代码

到目前,ChatGPT 提供给我们的,解决问题的思路非常清晰,并且可执行性非常强。

所以,这时候我们可以让ChatGPT写代码了。

VALL-E
VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

下载

按照我上面划分的步骤,我让他一次性把第一步代码写出来,所以,我的提问是:

写一下视频预处理的代码,并用 pytorch resnet提取视频特征

ChatGPT的回答

好的,下面是通过 Pytorch 的 ResNet 提取视频特征的代码,以及视频预处理的示例代码:

视频预处理:

import cv2
import numpy as np

def preprocess_video(video_path, n_frames=16, resize=(224, 224)):
# 读取视频
cap = cv2.VideoCapture(video_path)
frames = []
while True:
ret, frame = cap.read()
if not ret:
break
# 强制转换为 RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 图像缩放
frame = cv2.resize(frame, resize)
# 图像增强等操作
# ...
frames.append(frame)
cap.release()
# 取固定帧数 n_frames,超过后从中间开始截取
n_frames = min(len(frames), n_frames)
start = (len(frames) - n_frames) // 2
end = start + n_frames
# 截取帧数后堆叠成四维数组
frames = np.stack(frames[start:end], axis=0)
# 转换为支持 Pytorch 模型的格式 (B, C, T, H, W)
frames = np.transpose(frames, (0, 3, 1, 2))
return frames
提取视频特征:

import torch
import torchvision.models as models

def extract_features(frames):
# 加载 ResNet 模型
resnet = models.resnet50(pretrained=True)
# 去掉最后的全连接层
resnet = torch.nn.Sequential(*list(resnet.children())[:-1])
# 将 ResNet 设置为评估模式
resnet.eval()
# 将预处理后的视频序列转化为 Tensor,并调整为指定的数据类型和范围
frames = torch.from_numpy(frames).float() / 255.0
# 减去 ImageNet 数据集的均值和标准差
normalize = torch.nn.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
)
frames = normalize(frames)
# 前向预测,输出 2048 维特征向量
with torch.no_grad():
features = resnet(frames)
return features.reshape(-1, 2048)
在上面这两块代码中,preprocess_video() 函数将读取视频,并将其转换为指定大小的图像帧,返回处理后的数据;extract_features() 函数将接受上一步处理后的数据,并将其转化为 Pytorch 的 Tensor,使用训练好的 ResNet 模型对每一帧图像进行特征提取,并返回一个形状为 (B, 2048) 的 Tensor,其中 B 为帧数。

图片太长了,为了大家能更好的感受ChatGPT的回答,我直接把代码文本贴出来了。

定义了两个独立函数,分别完成了第一步中的两小步内容。

代码没有问题,先调用preprocess_video函数对视频预处理,再调用 extract_features卷积操作,就可以将一个向量embedding成一个2048维的向量。

第二步,我拆分成了两小步,先搭建lstm模型,再训练

基于上面产出的结果,用 pytorch lstm搭建视频分类模型

ChatGPT的回答

图片

写一下模型训练的代码

ChatGPT的回答

好的,下面是使用 Pytorch 训练视频分类模型的代码:

import torch
import torch.nn as nn
import torch.optim as optim

# 训练函数
def train(model, criterion, optimizer, dataloader, num_epochs=10):
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)# 将模型移动到 GPU 或 CPU 上
for epoch in range(num_epochs):
running_loss = 0.0
correct_predictions = 0
total_predictions = 0
for inputs, labels in dataloader:
inputs = inputs.to(device)
labels = labels.to(device)

optimizer.zero_grad()

with torch.set_grad_enabled(True):
outputs = model(inputs)
_, preds = torch.max(outputs, 1)
loss = criterion(outputs, labels)

loss.backward()
optimizer.step()

running_loss += loss.item() * inputs.size(0)
correct_predictions += torch.sum(preds == labels.data)
total_predictions += labels.size(0)

epoch_loss = running_loss / len(dataloader.dataset)
epoch_acc = correct_predictions.double() / total_predictions

print("Epoch {}: Loss {:.4f} Acc: {:.4f}".format(epoch + 1, epoch_loss, epoch_acc))

# 定义超参数
BATCH_SIZE = 4
NUM_EPOCHS = 20

# 定义数据集,假设已经准备好了训练数据集和测试数据集
train_dataset = ...
test_dataset = ...

# 定义数据加载器
train_dataloader = torch.utils.data.DataLoader(
train_dataset, batch_size=BATCH_SIZE, shuffle=True
)
test_dataloader = torch.utils.data.DataLoader(
test_dataset, batch_size=BATCH_SIZE, shuffle=False
)

# 定义模型
input_size = 2048
hidden_size = 512
num_layers = 1
num_classes = 2
model = VideoLSTM(input_size, hidden_size, num_layers, num_classes)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters())

# 训练模型
train(model, criterion, optimizer, train_dataloader, num_epochs=NUM_EPOCHS)
在代码中,首先定义了模型的超参数,如 BATCH_SIZE 和 NUM_EPOCHS。接着定义了训练数据集和测试数据集,并使用 Pytorch 的 DataLoader 将数据加载为 batch。然后定义了模型、损失函数和优化器。最后调用 train() 函数进行模型训练。

在训练过程中,每个 epoch 循环训练所有的视频帧,计算损失函数,计算准确率,并输出当前 epoch 的平均损失和准确率。训练完成后,可以将模型的参数保存到磁盘上,以便以后使用。

代码的可用性非常高。除了代码串联有一些成本,各个独立模块基本不需要动,开发效率非常高效。

还可以让ChatGPT找一些数据集

图片

还可以让他写一下模型推理的代码

图片

他可以自动帮我们把视频预处理、特征提取和推理三部分都串起来,形成一个完整的项目。

4. 扩展

到这里,我们就完全用ChatGPT把项目做完了。

我们还可以聊一些扩展性的话题,如:

图片

还可以让ChatGPT帮我们想一些能突出学术价值的点

图片

看到这里,说明我的文章对你多少有一丢丢的帮助。不管是否加入星球,我都感谢对大家对我的认可和信任。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

chatgpt官网入口地址合集
chatgpt官网入口地址合集

本专题整合了chatgpt官网入口地址、使用教程等内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

minimax入口地址汇总
minimax入口地址汇总

本专题整合了minimax相关入口合集,阅读专题下面的文章了解更多详细地址。

4

2026.03.16

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

7

2026.03.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

114

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

141

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

396

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

65

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

111

2026.03.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 13.5万人学习

Rust 教程
Rust 教程

共28课时 | 7万人学习

Vue 教程
Vue 教程

共42课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号