背景与意义
随着计算机视觉技术的深入,图像分割在餐饮行业、食品安全监测及营养分析等领域的应用价值日益凸显。YOLO(You Only Look Once)系列模型凭借其高效的实时检测能力,成为该领域的热门选择。特别是 YOLOv8 的推出,进一步提升了复杂场景下的表现。
本研究旨在构建一个基于改进 YOLOv8 的美食图像分割系统。通过精确分割美食图像,不仅能实现自动识别,还能为后续的营养分析、热量计算和个性化推荐提供数据支持。此外,该技术还能提升美食内容的可读性,助力餐饮企业的品牌推广。
数据集说明
本项目使用的数据集名为'food',包含 3800 张图像,涵盖 136 种不同类别的美食,如主菜、配菜、调料等。丰富的类别设置(包括青柠、加拿大龙虾、各类披萨、汉堡包等)为模型提供了充足的训练样本,帮助其学习在不同光照、角度和背景下准确识别目标。
为了确保模型的泛化能力,图像来源涵盖了不同的烹饪风格和文化背景。每一张图像都经过精心挑选和标注,保证了训练数据的高质量,为改进 YOLOv8-seg 模型奠定了坚实基础。
[图:美食分割效果展示]
核心实现
运行脚本封装
为了简化 Streamlit 应用的启动过程,我们编写了一个 Python 脚本作为入口。它利用 subprocess 模块调用当前环境中的 Python 解释器来运行主程序,并处理路径问题。
import sys
import subprocess
from QtFusion.path import abs_path
def run_script(script_path):
"""
使用当前 Python 环境运行指定的脚本。
Args:
script_path (str): 要运行的脚本路径
"""
# 获取当前 Python 解释器的路径
python_path = sys.executable
# 构建运行命令,使用 streamlit 运行指定的脚本
command = f'"{python_path}" -m streamlit run "{script_path}"'
# 执行命令并等待其完成
result = subprocess.run(command, shell=True)
# 检查命令执行的返回码,非零表示出错
if result.returncode != 0:
print("脚本运行出错。")
if __name__ == "__main__":
# 获取脚本的绝对路径
script_path = abs_path("web.py")
# 运行指定的脚本
run_script(script_path)
这段代码的核心在于动态获取 Python 解释器路径并构建命令,确保在不同环境下都能正确启动 Web 服务。同时增加了错误码检查,方便排查启动失败的原因。
实时视频流处理
在实时检测场景中,我们需要处理摄像头输入的视频流,并在每一帧上绘制检测结果。这里有一个细节值得注意:为了让同一类别始终显示相同的颜色,我们使用了 MD5 哈希算法生成稳定的颜色值。


