le-yolo/setup_and_run.py

79 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import subprocess
import shutil
def run_command(command, shell=False):
"""运行命令并返回结果"""
try:
result = subprocess.run(command, shell=shell, check=True,
capture_output=True, text=True)
return result.returncode, result.stdout, result.stderr
except subprocess.CalledProcessError as e:
return e.returncode, e.stdout, e.stderr
def main():
print("开始设置YOLO项目环境...")
# 检查Python3是否安装
if not shutil.which("python3"):
print("错误: Python3 未安装请先安装Python3")
sys.exit(1)
# 创建虚拟环境
print("创建虚拟环境...")
returncode, stdout, stderr = run_command([sys.executable, "-m", "venv", "venv"])
if returncode != 0:
print(f"创建虚拟环境失败: {stderr}")
sys.exit(1)
# 确定虚拟环境中的Python解释器路径
if os.name == 'nt': # Windows
venv_python = os.path.join("venv", "Scripts", "python.exe")
venv_pip = os.path.join("venv", "Scripts", "pip.exe")
else: # macOS/Linux
venv_python = os.path.join("venv", "bin", "python")
venv_pip = os.path.join("venv", "bin", "pip")
# 升级pip
print("升级pip...")
returncode, stdout, stderr = run_command([venv_pip, "install", "--upgrade", "pip"])
if returncode != 0:
print(f"升级pip失败: {stderr}")
# 安装依赖
print("安装项目依赖...")
returncode, stdout, stderr = run_command([venv_pip, "install", "-r", "requirements.txt"])
if returncode != 0:
print(f"安装依赖失败: {stderr}")
sys.exit(1)
# 检查测试视频文件是否存在
if not os.path.exists("res/test.mp4"):
print("❌ 错误: res/test.mp4 文件不存在!")
print()
print("请按以下步骤操作:")
print("1. 在 res/ 目录中放置一个视频文件")
print("2. 将视频文件重命名为 test.mp4")
print("3. 重新运行此脚本")
print()
print("支持的视频格式: .mp4, .avi, .mov, .mkv 等")
print("脚本已停止运行。")
sys.exit(1)
# 运行应用
print("运行应用...")
os.chdir("src")
returncode, stdout, stderr = run_command([os.path.join("..", venv_python), "app.py"])
if returncode == 0:
print("✅ 应用运行完成!检测结果已保存在 runs/detect/ 目录中")
else:
print(f"应用运行失败: {stderr}")
sys.exit(1)
if __name__ == "__main__":
main()