在windows系统用Anaconda搭建运行PyTorch识别安全帽项目的环境

news2025/2/25 18:22:13

一.背景

       我期望基于开源项目实现工业场景中安全帽识别。之前的各种尝试,也不太顺利。发现安全帽识别的开源项目使用的是基于Python的PyTorch实现训练的。上一篇写了Python的安装,发现后续安装其他的并不方便。我为什么选择,下面再详细说原因。

二.为何选择Anaconda来搭建PyTorch运行环境?

     上一篇写了Python的安装,发现Python的版本是3.13.0。但是我看PyTorch官网的版本要求却是3.9-3.12。

     

     因为我是初学者,我看到PyTorch官网写了有使用Anaconda来安装,所以,我决定选择它了。

三.Anaconda的下载和安装

     1.Anaconda的下载

      你可以直接点击这里的官方下载,也可以去Anaconda官网自己找。

     

     2.Anaconda的下载

       就是一路向下,建议默认路径,记住一下默认路径。安装有点慢,耐心等待完成。

     3.Anaconda安装后的确认

        输入命令,看看Anaconda安装好了没有。

conda --version

    另外,还要输入命令,看看Python和pip安装好了没有。

python --version

pip --version

   如果没有安装好,就手动配置一下环境变量。我主要配置了3个,配置环境变量不要让我再截图步骤了吧。。。

C:\ProgramData\anaconda3\condabin
C:\ProgramData\anaconda3\Scripts
C:\ProgramData\anaconda3

     4.使用Anaconda管理Python环境

       主要用到了下面3行命令:     

#创建一个名字为myenv的环境,一次性的,不用每次进bat都去创建
conda create --name myenv 

#激活(使用)环境
conda activate myenv

#安装 python 需要的包  
conda install package_name

      我cmd中输入 conda activate myenv后,就在最开始多了(myenv)。

(myenv) D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main>

四.开源安全帽识别项目Safety-Helmet-Detection的下载

      1.Safety-Helmet-Detection的下载

          项目主页是https://github.com/jomarkow/Safety-Helmet-Detection。里面训练用的图片有5千张,太大了,压缩下载下来都是1个多G,我们只是用结果,我也准备了一个结果的版本(删除了图片的)在这里下载。

五.运行测试Safety-Helmet-Detection

      1.Safety-Helmet-Detection解压

      我是解压到这里的D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main。

     2.安装PyTorch      

#激活(使用)环境
conda activate myenv

#安装 python 需要的包  
conda install PyTorch

   3.安装ultralytics

     我在后面尝试运行模型时又出现了如下错误,说明这个组件没有安装。

ModuleNotFoundError: No module named 'ultralytics'

    我用的pip install ultralytics 安装的,我觉得上面的命令 conda install ultralytics也应该可以。

    4.了解本次模型的python运行代码

     打开Safety-Helmet-Detection-main\model\predict.py文件。我大概阅读了一下代码,是从test目录中遍历文件,然后去执行模型,分为图片和视频两种,图片以.jpg后缀的就会执行,视频是在文件名字包含了dfgdfg的就会执行。结果输出到test_output目录。因为test_output本身有内容,我给清空了。   

import os
from ultralytics import YOLO
import cv2

PROY_FOLDER = os.getcwd().replace("\\","/")

INPUT_FOLDER =  f"{PROY_FOLDER}/test/"
OUTPUT_FOLDER = f"{PROY_FOLDER}/test_output/"
MODEL_PATH =    f"{PROY_FOLDER}/output/best.pt"

if not os.path.exists(OUTPUT_FOLDER):
    os.mkdir(OUTPUT_FOLDER)
    
model = YOLO(MODEL_PATH) 
files = os.listdir(INPUT_FOLDER)


def draw_box(params, frame, threshold = 0.5):
    
    x1, y1, x2, y2, score, class_id = params
    
    if score > threshold:
        cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 4)
        cv2.putText(frame, results.names[int(class_id)].upper(), (int(x1), int(y1 - 10)),
            cv2.FONT_HERSHEY_SIMPLEX, 1.3, (0, 255, 0), 3, cv2.LINE_AA)  
    
    return frame


for file_name in files:

    file_path = INPUT_FOLDER + file_name
    
    if "dfgdfg" in file_name:

        video_path_out = OUTPUT_FOLDER + file_name[:-4] + "_out.mp4"

        cap = cv2.VideoCapture(file_path)
        ret, frame = cap.read()
        H, W, _ = frame.shape
        out = cv2.VideoWriter(video_path_out, cv2.VideoWriter_fourcc(*'MP4V'), int(cap.get(cv2.CAP_PROP_FPS)), (W, H))

        while ret:

            results = model(frame)[0]
            for result in results.boxes.data.tolist():
                frame = draw_box(result, frame)
            out.write(frame) 
            ret, frame = cap.read()
            
        cap.release()
        out.release()
    
    elif ".jpg" in file_name:
        
        image_path_out = OUTPUT_FOLDER + file_name[:-4] + "_out.jpg"
        
        image = cv2.imread(file_path,cv2.IMREAD_COLOR) 
        results = model(image)[0]
        for result in results.boxes.data.tolist():
            image = draw_box(result, image)
            
        cv2.imwrite(image_path_out, image) 
    
    cv2.destroyAllWindows()
            

     5.运行开源项目

     本质很简单,就是用Python去执行它的程序文件predict.py。我没有学习过Python,简单了解了一下,就是输入命令 python xxx.py就可以执行了。于是,我动手了。    

C:\Users\Dell>cd /d D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main
D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main>conda activate  myenv

(myenv) D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main>python ./model/predict.py

0: 384x640 6 helmets, 1 head, 54.3ms
Speed: 3.0ms preprocess, 54.3ms inference, 1.0ms postprocess per image at shape (1, 3, 384, 640)

(myenv) D:\zsp\works\temp\20241119-赵仕平-安全帽\Safety-Helmet-Detection-main>

     我去了test_output目录查看,发现输出图片如下:

     

     视频运行慢,我试过了,就不写了。。。看程序就知道,只要把mp4文件的名字修改一下,包含dfgdfg就会运行的。

    6.我加了张自己的照片看看

     放到test目录,结果如下:

六.总结

     使用Anaconda来搭建PyTorch运行模型比较方便。就是我的机器太差了,估计训练很难,运行问题不大。为后续免费搭建工业场景安全帽检测的方案奠定了基础。本人没有学过AI和Python,过程中使用到了豆包和文心一言帮助我找思路,帮我快速实现了我的初步探索结论。最近在矿山上多,学习更新有点慢,见谅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch入门之HTTP基础操作

RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…

Unix、GNU、BSD 风格中 ps 参数的区别

注:本文为“不同风格中 ps 命令参数的区别”相关文章合辑。 未去重。 BSD 风格和 UNIX 风格中 ps 参数的区别 作者:Daniel Stori 译者:LCTT Name1e5s | 2017-06-17 10:53 One Last Question ps aux 以及 ps -elf 都是查看进程的方式&…

设计模式の单例工厂原型模式

文章目录 前言一、单例模式1.1、饿汉式静态常量单例1.2、饿汉式静态代码块单例1.3、懒汉式单例(线程不安全)1.4、懒汉式单例(线程安全,同步代码块)1.5、懒汉式单例(线程不安全,同步代码块&#…

深入理解Java的 JIT(即时编译器)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

重生之我在21世纪学C++—关系、条件、逻辑操作符

一、关系操作符 1、关系操作符介绍 用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符称为 “关系运算符”(relational operator),主要有下面 6 个: 运算符描述>大于运算符,用于比…

工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法

工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法 SolidWorks从3D文件导出2D的DWG或2D DXF类型文件方法(一)打开3D文件(二)从装配体到工程图(三)拖出想要的角度的图型(四&#…

Spring Cloud Alibaba:一站式微服务解决方案

一、简介 Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。它集成了阿里巴巴开源的各种分布式服务技术,提供了一系列…

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0095 1. 主要功能: 基于51单片机的病床呼叫系统proteus仿…

windows10下,nvidia控制面板升级驱动后osgearth三维程序无法运行

osg系列文章目录 文章目录 osg系列文章目录一.前言二.解决办法 一.前言 windows10下,nvidia控制面板升级驱动后osgearth三维程序无法运行,情景如下: 笔者使用的是天选1笔记本,硬件配置如下 osgearth和osg对应的版本是: Osg3.4.1…

【计算机学习笔记】GB2312、GBK、Unicode等字符编码的理解

之前编写win32程序时没怎么关注过宽字符到底是个啥东西,最近在编写网络框架又遇到字符相关的问题,所以写一篇文章记录一下(有些部分属于个人理解,如果有错误欢迎指出) 目录 几个常见的编码方式Unicode和UTF-8、UTF-16、…

七种msvcp140.dll丢失的解决方法及了解msvcp140.dll丢失的原因

在Windows操作系统中,msvcp140.dll是Microsoft Visual C 2015 Redistributable Package的一部分。这个动态链接库文件对于许多应用程序的正常运行至关重要,因为它包含了C程序所需的标准库函数。当用户遇到“msvcp140.dll丢失”或类似的错误信息时&#x…

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…

LeetCode - #152 乘积最大子数组(Top 100)

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 …

新手前端开发入职公司全流程

作为一名前端开发新手,进入一家公司开启职业生涯是既兴奋又充满挑战的旅程。今天就来和大家分享一下这个过程中的各个环节。 一、入职准备 在收到心仪公司的offer后,可别只顾着高兴啦。首先要准备好入职资料,像身份证、学历证明这些是必不可…

【深入探索 C++ STL 容器 list】 —— 编程世界的万能胶,数据结构中的百变精灵

STL系列学习参考: STL 数据结构与算法__Zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12852141.html 学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面我们就按…

【数电】常见时序逻辑电路设计和分析

本文目的:一是对真题常考题型总结,二是对常见时序电路设计方法进行归纳,给后面看这个文档的人留有一点有价值的东西。 1.不同模计数器设计 2.序列信号产生和检测电路 2.1序列信号产生电路 2.1.1设计思路 主要设计思路有三种 1&#xff09…

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…

数字图像处理考研考点(持续更新)

一、数字图像基本概念 1、人眼视觉特性 (1)眼睛上有两类光感受器:锥状体和杆状体 锥状体(锥细胞):约 700 万个,对颜色高度敏感,每个锥状体都连接到神经末梢,人可以充分地分辨图像细节。锥细胞…

Lumos学习王佩丰Excel第二十讲:图表基础

Excel图表就像是把一堆复杂的数字变成了一幅幅直观的图画,让我们能够更快地理解数据之间的关系和趋势,使工作表更易于读懂和交流。学好这几节课,不仅可以辅助工作,还可以装X哈哈哈~~~ 一、认识图表中的元素(七块积木&…

VTK知识学习(20)- 数据的存储与表达

1、数据的存储 1)、vtkDataArray VTK中的内存分配采用连续内存,可以快速地创建、删除和遍历,称之为数据数组(DataArray),用类 vtkDataArray 实现。数组数据的访问是基于索引的,从零开始计数。 以 vtkFloatArray 类来说明如何在 …