本阶段核心目标
大幅度提升对python的使用,搭建 YOLOv8 本地开发环境,解决依赖安装与模型加载问题,实现图片目标检测,并且开始启动模型训练。
进度总结
1. 已完成任务
课程结尾: 卷积神经网络
图像分割实践:语义分割.UNet.DeepLab.MaskR-CNN
YOLO目标检测:掌握YOLO系列(v10/v9/v8/v7)

python使用练习:在哔哩哔哩中python小部落中跟随视频"python入门编程100例“完成许多python入门编程必刷训练。
环境搭建:使用 Conda 创建虚拟环境 yolo_env,安装 Python 3.8、PyTorch、OpenCV、NumPy 等依赖库。
依赖安装:通过配置清华源(-i https://pypi.tuna.tsinghua.edu.cn/simple)解决 pip安装超时问题,成功安装 ultralytics库。
模型调试:解决 PytorchStreamReader failed reading zip archive错误(模型文件下载不完整),通过手动下载 yolov8n.pt并放入项目目录解决。
基础推理:编写 Python 脚本,成功加载 YOLOv8n 模型,对示例图片(bus.jpg)进行目标检测并可视化结果。
本地测试:将推理代码适配至本地图片,成功检测出个人图片中的物体,并保存结果图。
2. 遇到的问题与解决方案
(1)问题:模型文件 yolov8n.pt下载不完整,报错 zip archive解析失败
解决方法:删除损坏文件,从 GitHub Releases 手动下载完整模型文件
(2)问题:PyCharm 中运行时环境路径配置错误
解决方法:在 PyCharm 中手动设置 Python 解释器为 yolo_env环境
3.在网上寻找并已经尝试复现的代码示例
1. 图片检测
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt")
# 检测本地图片
results = model("1111.jpg")
# 保存结果
results[0].save("11111.jpg")
print("检测完成!结果保存为 11111.jpg")
2. Python实现学生成绩的排序
功能:创建一个学生成绩列表,按总分从高到低排序。
def sort_student_scores():
# 示例数据:学生姓名和成绩(语文、数学、英语)
students = [
{"name": "张三", "scores": [85, 90, 78]},
{"name": "李四", "scores": [92, 88, 95]},
{"name": "王五", "scores": [76, 85, 80]}
]
# 计算每个学生的总分
for student in students:
student["total"] = sum(student["scores"])
# 按总分从高到低排序
students_sorted = sorted(students, key=lambda x: x["total"], reverse=True)
print("学生成绩按总分从高到低排序:")
for student in students_sorted:
print(f"{student['name']}: 总分{student['total']}, 各科{student['scores']}")
# 调用函数
sort_student_scores()
3.Python读取成绩文件实现排序
功能:从一个文本文件中读取学生成绩,按总分排序后输出。
# 12. Python读取成绩文件实现排序
def read_and_sort_scores_from_file(filename="scores.txt"):
try:
with open(filename, "r", encoding="utf-8") as f:
lines = f.readlines()
students = []
for line in lines:
parts = line.strip().split(",")
if len(parts) >= 4: # 姓名,语文,数学,英语
name = parts[0]
scores = list(map(int, parts[1:]))
students.append({"name": name, "scores": scores, "total": sum(scores)})
# 按总分排序
students_sorted = sorted(students, key=lambda x: x["total"], reverse=True)
print(f"\n从文件 {filename} 读取并排序后的成绩:")
for student in students_sorted:
print(f"{student['name']}: 总分{student['total']}, 各科{student['scores']}")
except FileNotFoundError:
print(f"文件 {filename} 不存在,请先创建该文件。")
# 调用函数(需要先创建 scores.txt 文件)
# read_and_sort_scores_from_file()
4.统计英语文章出现最多的单词数目
功能:读取一篇英文文章,统计每个单词出现的次数,找出出现次数最多的单词。
Python统计英语文章出现最多的单词数目
import re
from collections import Counter
def count_most_frequent_word(filename="article.txt"):
try:
with open(filename, "r", encoding="utf-8") as f:
content = f.read().lower() # 转为小写
# 使用正则提取单词(忽略标点和数字)
words = re.findall(r'\b[a-zA-Z]+\b', content)
# 统计词频
word_count = Counter(words)
# 找出出现次数最多的单词
most_common = word_count.most_common(1) # 返回前1个
print(f"\n从文件 {filename} 统计出的出现最多的单词:")
if most_common:
word, count = most_common[0]
print(f"单词 '{word}' 出现了 {count} 次")
else:
print("未找到有效单词")
except FileNotFoundError:
print(f"文件 {filename} 不存在,请先创建该文件。")
调用函数
count_most_frequent_word()
5.框选图片中人物
加载预训练的 YOLOv8 模型
model = YOLO('yolov8n.pt')
加载图片
image_path = 'E:\PythonProject1\.venv'
image = cv2.imread(image_path)
# 3. 执行目标检测
# conf=0.5 表示只保留置信度大于 50% 的检测结果
results = model(image, conf=0.5)
# 4. 遍历检测结果并绘制边界框
for result in results:
boxes = result.boxes
for box in boxes:
# 获取边界框坐标 (x1, y1, x2, y2)
x1, y1, x2, y2 = map(int, box.xyxy[0])
# 获取置信度
conf = box.conf[0]
# 绘制矩形框 (绿色,线宽 2)
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 在框上方添加置信度标签
label = f"Person {conf:.2f}"
cv2.putText(image, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
# 5. 保存或显示结果
output_path = '11people.jpg'
cv2.imwrite(output_path, image)
print(f"检测结果已保存至: { }")

4.收获与反思
-
收获:
-
完成了卷积神经网络.图像分割实践与YOLO目标检测的剩余课程
-
掌握了 YOLOv8 的基础 API 使用方式。
- 理解了 PyTorch 模型文件的加载机制与常见错误原因。
- 学会了使用 OpenCV 进行图像与视频流的实时处理。
-
反思:
-
初期对模型文件路径和依赖管理不够熟悉,导致多次报错。
-
下次应先查阅官方文档或社区常见问题,避免重复踩坑。
-
4. 下周计划
-
学习 YOLOv8 的训练流程,尝试用自己的数据集微调模型。
-
优化检测结果的保存与展示方式,支持批量图片处理。
-
探索 YOLOv8 的其他任务(如实例分割、姿态估计)。

2035

被折叠的 条评论
为什么被折叠?



