任务一 :开发环境安装、部署(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)