Python Yolo8 物体识别

支持单张图片/图片目录批量预标注 默认使用cuda GPU
.env

HTTP_PROXY=http://192.168.2.109:10808
HTTPS_PROXY=http://192.168.2.109:10808

pyproject.toml

[project]
name = "yolo-test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = ["opencv-python<=4.8.1.78","ultralytics>=8.3.198","torch==2.1.2","torchvision==0.16.2","torchaudio==2.1.2","python-dotenv>=1.1.1","pyinstaller>=6.15.0","pyarmor>=9.1.9","numpy<2",
]

main.py

import argparse
import json
import os
from dotenv import load_dotenv
from ultralytics import YOLO
from PIL import Image, UnidentifiedImageError
import torchclass YoloPreIdentify:""""""def __init__(self, image_path, proxy=False):if not os.path.exists(image_path):raise FileNotFoundError(image_path)if proxy:self.load_proxy()self.include_class = self.read_files()self.class_name_set = set()self.image_path = image_pathif torch.cuda.is_available():self.device = "0"else:self.device = "cpu"print(f"正在加载 YOLOv8 模型 ---- {self.device}...")self.model = YOLO('yolov8n.pt')print("YOLOv8 模型加载完成...")def load_proxy(self):""":return:"""load_dotenv()print("环境变量已加载")def get_file_from_path(self, path):""":param path::return:"""for root, dirs, files in os.walk(path):if files:for filename in files:abs_path = os.path.join(root, filename)yield filename, abs_pathdef check_images(self, file):""":param file::return:"""try:with Image.open(file) as img:img.verify()return Trueexcept (IOError, SyntaxError, UnidentifiedImageError) as e:print(f"文件 '{file}' 不是有效图片,错误: {e}")return Falsedef read_files(self, file="include.txt"):""":param file::return:"""uninclude_set = set()if not os.path.exists(file):return uninclude_setwith open(file, "r", encoding="utf-8") as f:for i in f:line = i.strip()if line:uninclude_set.add(line)return uninclude_setdef save_results(self, data):""":param data::return:"""with open("result.json", "w", encoding="utf-8") as f:json.dump(data, f, ensure_ascii=False, indent=4)f.flush()def process_single(self, img_file):""":param img_file::return:"""tmp = []if not self.check_images(img_file):return tmpprint(f"开始检测:{img_file}")results = self.model(img_file, device=self.device)print("检测完成。")print("\n--- 检测结果 ---")for result in results:boxes = result.boxes# 检查是否检测到了任何物体if len(boxes) == 0:print("图片中未检测到任何目标。")return tmpfor box in boxes:class_id = int(box.cls.item())class_name = self.model.names[class_id]self.class_name_set.add(class_name)if class_name not in self.include_class:continueconfidence = float(box.conf.item())coords = box.xyxy.tolist()[0]  # 转换为 Python 列表x_min = int(coords[0])y_min = int(coords[1])x_max = int(coords[2])y_max = int(coords[3])# 打印格式化的结果print(f"检测到目标: {class_name}")print(f"  - 置信度: {confidence:.2f}")  # 保留两位小数print(f"  - 坐标 (左上角 x,y): ({x_min}, {y_min})")print(f"  - 坐标 (右下角 x,y): ({x_max}, {y_max})")print("-" * 20)  # 分隔符tmp.append({"class": class_name,"confidence": round(confidence, 2),"points": [{"x": x_min, "y": y_min},{"x": x_max, "y": y_max},]})return tmpdef process_batch(self):""":return:"""result_map = {}for filename, img_file in self.get_file_from_path(self.image_path):result_map.update({img_file: self.process_single(img_file)})self.save_results(result_map)print(f"文件夹中识别到标签:{self.class_name_set}")return result_mapif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-i', "--input", dest='input', help='input', required=True)parser.add_argument('-p', "--proxy", dest='proxy', help='proxy', default=False)args = parser.parse_args()ypi = YoloPreIdentify(args.input, args.proxy)ypi.process_batch()

在这里插入图片描述

include.txt (预标注标注类型)

cat
dog
horse
person
bird

环境同步:

 uv sync --index-url https://pypi.tuna.tsinghua.edu.cn/simple

打包命令:

pyarmor gen -r --pack FC main.py && rm -rf .pyarmor* && rm main.spec && mv dist/main ./ 

执行命令:

./main -i "{image_folder}"

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

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

相关文章

LeetCode100-234回文链表

本文基于各个大佬的文章上点关注下点赞&#xff0c;明天一定更灿烂&#xff01;前言Python基础好像会了又好像没会&#xff0c;所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考&#xff0c;写给自己看的&#xff0c;也欢迎大家在评论区指导…

BUG排查流程

引言简述Bug排查的重要性分享个人或团队在Bug排查中的常见挑战引出日记形式记录的价值日记格式设计时间戳&#xff1a;记录问题发现和解决的时间节点问题描述&#xff1a;清晰定义Bug的现象和影响范围环境信息&#xff1a;操作系统、版本号、依赖库等关键配置复现步骤&#xff…

汽车功能安全 Functional Safety ISO 26262 测试之一

汽车电子电气系统的日益复杂使得功能安全成为保障车辆可靠性和驾乘安全的关键。 本文将围绕ISO 26262标准的核心内容展开&#xff0c;帮助大家理解如何通过系统化的方法控制风险&#xff0c;进行测试&#xff0c;确保产品安全。 01 什么是功能安全&#xff1f; 首先&#xff0c…

人形机器人赛道的隐形胜负手:低延迟视频链路如何决定机器人未来

一、引言&#xff1a;爆发前夜的人形机器人赛道 2025 年&#xff0c;被业内称为“人形机器人量产元年”。政策与资本的合力&#xff0c;让这条原本还带着科幻色彩的产业赛道&#xff0c;骤然进入现实加速期。国家层面&#xff0c;《“机器人”行动计划》明确提出要推动人形机器…

从iPhone 17取消SIM卡槽,看企业如何告别“数据孤岛”

9月10日&#xff0c;苹果公司如期召开秋季新品发布会&#xff0c;正式推出iPhone 17系列。除了性能和拍照的常规升级&#xff0c;一个看似不起眼但意义深远的改变引起了广泛关注——iPhone 17 Pro系列全面取消了实体SIM卡槽&#xff0c;只保留了eSIM功能。这一举动不仅仅是技术…

【JavaWeb01】Web介绍

文章目录1.导学2.Web开发介绍2.1 Web网站的工作流程2.2 前后端分离开发1.导学 2.Web开发介绍 2.1 Web网站的工作流程 浏览器根据请求的域名请求对应的前端服务器&#xff0c;前端服务器接收到请求之后&#xff0c;把对应的前端代码返回给服务器。浏览器中有解析前端代码的解析引…

链路预测算法MATLAB实现

链路预测算法MATLAB实现 链路预测是复杂网络分析中的重要任务&#xff0c;旨在预测网络中尚未连接的两个节点之间未来产生连接的可能性。 程序概述 MATLAB程序实现了以下链路预测算法&#xff1a; 基于局部信息的相似性指标&#xff08;Common Neighbors, Jaccard, Adamic-Adar…

淘宝商品详情 API 的安全强化与生态协同创新路径

一、安全强化&#xff1a;从 “被动防御” 到 “主动免疫” 的体系升级动态身份认证与权限颗粒化构建 “生物特征 设备指纹 行为基线” 的三重认证机制&#xff1a;结合用户操作习惯&#xff08;如点击间隔、滑动轨迹&#xff09;生成动态令牌&#xff0c;对高权限接口&#…

快消26届联合利华校招AI测评及第二轮线上认知能力测评SHL笔试真题及评分要求

在求职的道路上&#xff0c;联合利华作为一家全球知名企业&#xff0c;其招聘流程一直备受关注。尤其是其AI面试环节&#xff0c;更是让许多求职者既期待又紧张。本文将详细总结联合利华AI面试的规律与应对策略&#xff0c;希望能为正在准备面试的你提供一些帮助。一、联合利华…

使用Langchain生成本地rag知识库并搭载大模型

准备设备&#xff1a; 手机aidlux2.0个人版 一、下载依赖pip install langchain langchain-community faiss-cpu pypdf二、安装ollama并下载模型 curl -fsSL https://ollama.com/install.sh | sh #需要科学上网 ollama serve & #让ollama服务在后台运行安装完毕可以查看oll…

L2-【英音】地道语音语调--语调

文章目录语调英式语调四步法语调含义降调升调降升调升降语调如何正确表情达意1. 用降调的句型语调 英语里没有任何一句话具有固定节奏模式 英式语调四步法 意群划分重音核心语调&#xff08;重中之重&#xff09;语调的选择 A French burglar broke-into-a flat while the o…

计算机视觉进阶教学之图像投影(透视)变换

目录 简介 一、了解图像投影(透视)变换 一、定义与原理 二、应用场景 三、实现方法 二、案例分析 1. 辅助函数定义 1.1.cv_show 函数 1.2.order_points 函数 1.3.four_point_transform 函数 1.4.resize 函数 2. 主程序执行流程 2.1.图像缩放处理 2.2.轮廓检测 2.…

Java面试问题记录(二)

三、系统设计与问题排查1、假设你要设计一个 “秒杀系统”&#xff0c;需要考虑高并发、高可用、防超卖等问题&#xff0c;你的整体技术方案是什么&#xff1f;从前端、接口层、服务层、存储层分别说说核心设计点。秒杀系统设计设计核心&#xff1a;瞬时高并发&#xff0c;库存…

k8s部署kafka三节点集群

本来认为部署kafka很简单&#xff0c;没想到也折腾了2-3天&#xff0c;这水平没治了&#xff5e; kafka从3.4.0版本之后&#xff0c;可以不依赖zookeeper直接使用KRaft模式部署&#xff0c;也就是说部署kafka可以不安装zookeeper直接部署。 在官网上没有找到如何使用yaml文件…

在公用同一公网IP和端口的K8S环境中,不同域名实现不同访问需求的解决方案

目录 1. 访问需求 2. 解决方案 3. 具体配置 3.1 允许互联网访问的域名&#xff08;a.lmzf.com&#xff09; 3.2 需IP白名单访问的域名&#xff08;b.lmzf.com&#xff09; 3.3 关键参数说明 3.4 测试验证 1. 访问需求 在腾讯云TKE环境中&#xff0c;多个域名解析到同一…

FlinkCDC 达梦数据库实时同步

一、Flink部署 1.1、JAVA环境 vi /etc/profile export JAVA_HOME/data/flinkcdc/jdk1.8.0_181 export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH$JAVA_HOME/bin:$PATHsource /etc/profilevi ~/.bash_profileexport FLINK_HOME/data/flinkcdc/fli…

Eip开源主站EIPScanner在Linux上的调试记录(二 多生产者连接)

目录 一、背景 二、可行性验证 三、开发调试 一、背景 在一般场景下&#xff0c;只需一路IO连接&#xff0c;但稍微复杂的场景&#xff0c;就需要不同通讯周期的连接&#xff0c;这就需要有多组IO连接。 而大于一组的连接调试方法是一样的&#xff0c;因此主要解决2组连接的…

Oracle APEX 利用卡片实现翻转(方法二)

目录 0. 以 Oracle 的标准示例表 EMP 为例&#xff0c;实现卡片翻转 1. 创建卡片区域 (Cards Region) 2. 定义卡片的 HTML 结构 3. 添加 CSS 实现样式和翻转动画 4. 创建动态操作触发翻转 5. 运行效果 0. 以 Oracle 的标准示例表 EMP 为例&#xff0c;实现卡片翻转 目标如…

低代码拖拽实现与bpmn-js详解

低代码平台中的可视化拖拽功能是其核心魅力所在&#xff0c;它让构建应用变得像搭积木一样直观。下面我将为你梳理其实现原理&#xff0c;并详细介绍 vue-draggable 这个常用工具。 &#x1f9f1; 一、核心架构&#xff1a;三大区域与数据驱动 低代码编辑器界面通常分为三个核心…

【科研绘图系列】R语言绘制模型预测与数据可视化

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 加载R包 数据下载 函数 导入数据 数据预处理 画图 总结 系统信息 介绍 本文介绍了一种利用R语言进行海洋微生物群落动态分析的方法,该方法通过构建多个统计模型来预测不同环境…