任务一 :开发环境安装、部署(20 分)
1 通过 Conda 安装 OpenCV 的完整命令是
conda install -c conda-forge opencv
2 要在 Python 中检查 PyTorch 版本,使用的代码是:
import torch
print(torch.__version__)
3 通过 Conda 安装 PyQt5 的命令中,正确的频道名称是
conda install -c conda-forge pyqt。
4 在 Python 中获取 OpenCV 的安装路径的代码片段是:
import cv2
print(cv2.__file__)
5 使用 PyTorch 创建一个包含元素 [1.0, 2.0, 3.0] 的张量的代码是:
import torch
x = torch.tensor([1.0, 2.0, 3.0])
6 在 PyQt5 中,显示一个基本窗口的方法名是
window.show()。
7 conda install pytorch=1.8.0 -c pytorch
8 使用 Conda 查询已安装的 OpenCV 版本的命令是
conda list opencv
9 若要创建一个新的 Conda 虚拟环境名为 env_name 的命令是
conda create -n env_name python=3.8
10 在 PyQt5 中初始化一个应用程序的正确类名是
app = QtWidgets.QApplication(sys.argv)
任务二:开发环境测试(20 分)
1 在 Conda 中,安装特定版本的 PyQt5(比如 5.9.2)的命令是
conda install pyqt=5.9.2 -c anaconda
2 要在 Python 中输出当前使用的 OpenCV 版本,代码是
import cv2; print(cv2.__version__)
3 使用 PyTorch 加载一个预训练的 ResNet 模型的方法是
model = torchvision.models.resnet18(pretrained=True)
4 更改 PyQt5 窗口标题为 "Welcome" 的方法是
window.setWindowTitle("Welcome")。
5 创建一个新的 Python 文件在 PyCharm 中,该操作通常通过右键单击项目目录,选择 New -> Python File
6 查看所有 Conda 环境的命令是
conda env list --all
7 设置 PyTorch 张量的数据类型为浮点数的代码是
x = torch.tensor([1, 2, 3], dtype=torch.float32)
8 在 PyQt5 中,连接一个按钮点击事件到一个函数 do_something 的代码是 button.clicked.connect(do_something)
9 在 Conda 中升级已安装的 PyTorch 包的命令是
conda update pytorch
10 在 PyTorch 中,将张量 x 转换为 NumPy 数组的方法是
numpy_array = x.numpy()
任务三: 程序入口模块实现(main.py )(20 分)
1 导入需要的库,例如 PyQt5,在 main.py 文件的开始位置写入
from PyQt5 import QtCore, QtWidgets。
2 定义主窗口类 MainWindow 继承自 QtWidgets.QWidget,完成类定义的代码是
class MainWindow(QtWidgets.QWidget):
3 在 MainWindow 类中,初始化一个标签 label 的代码是
self.label = QtWidgets.QLabel("Welcome to Garbage Classification System!")
4 设置 MainWindow 类的窗口大小为 800x600 的代码是
self.resize(800, 600)
5 创建一个应用实例并启动事件循环,在 main.py 文件的末尾写入
app = QtWidgets.QApplication(sys.argv) 和 sys.exit(app.exec_())
6 在 MainWindow 类的构造函数中,为 label 添加到布局中,代码是
self.layout().addWidget(self.label)
7 在 main.py 文件中,创建 MainWindow 类的实例并显示它的代码是
window = MainWindow(); window.show()
8 若要设置窗口的标题为 "Garbage Classification",使用的代码是
self.setWindowTitle("Garbage Classification")
任务四:数据处理模块实现(preprocess.py)(20 分)
1 若要在 preprocess.py 中导入 OpenCV 库并为其设置一个常用的别名 cv,正确的导入语句是
import cv2 as cv
2 定义一个函数 load_image,该函数用于加载图片并返回图片对象,函数头部写为
def load_image(filepath): return cv2.imread(filepath)
3 在处理图像数据时,经常需要将图像转换为灰度图,写出完成此转换的代码 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
4 定义一个函数 resize_image,用于调整图像尺寸到指定的宽度和高度,函数头部写为
def resize_image(image, width, height): return cv2.resize(image, (width, height))
5 写一个函数 normalize_image,用于归一化图像数据,使像素值范围在 0 到 1 之间,函数实现的代码是
normalized = image / 255.0
6 创建一个图像数据增强的函数 augment_image,该函数使用旋转来增强图像,写出创建一个指定角度旋转矩阵的代码
M = cv2.getRotationMatrix2D(center, angle, 1)
7 在 preprocess.py 中,编写一个保存处理后图像到文件的函数 save_image,该函数接受图像对象和文件路径作为参数,函数实现的代码是
cv2.imwrite(path, image)
8 定义一个函数 crop_image,用于裁剪图像,使其只包含中心的指定区域,裁剪代码为 cropped = image[y:y+h, x:x+w],其中 x, y, w, h 分别为起始点和宽高,补全函数头
def crop_image(image, x, y, w, h): return cropped
9 编写代码以将图像转换为二值图像(binary image),使用阈值操作的代码是
binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
10 编写一个函数 extract_contours,该函数用于从二值图像中提取轮廓,代码实现是
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
任务五 模型推理模块实现(inference.py )(20 分)
1 在 inference.py 文件的开始位置,添加以下代码以导入 PyTorch 模块和预训练模型:
import torch
import torchvision.models as models
2 要加载预训练的 ResNet 模型,使用的代码是
model = models.resnet50(pretrained=True)
3 要将 PyTorch 模型设置为评估模式,使用的代码是
model.eval()
4 加载一张图像并进行预处理,使用的代码是
from PIL import Image;
img = Image.open('path_to_image.jpg');
img_t = preprocess(img)
5 将图像数据转换为模型的输入批量,使用的代码是
batch_t = torch.unsqueeze(img_t, 0)
6 进行模型推理,获取预测结果的代码是
model.eval();
with torch.no_grad():
output = model(batch_t)
7 解析模型输出,获取最可能的类别的索引,使用的代码是
_, predicted = torch.max(output, 1)
8 在 inference.py 文件的开始位置,可以使用以下代码来导入 torchvision.transforms 模块:
import torchvision.transforms as transforms
9 设置设备为 CUDA 如果可用,使用的代码是
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
10 要保存模型的推断结果到一个文件中,例如保存到 "results.txt",使用的代码是
with open("results.txt", 'w') as f: f.write(str(predicted.item()))
11 如果需要将模型转移到 GPU 上进行计算,使用的代码是
model.to(device)