当前位置: 首页 > news >正文

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://9upBKiOR.mydgr.cn
http://2fF3HbA2.mydgr.cn
http://UAskEdyz.mydgr.cn
http://v2xiTYLi.mydgr.cn
http://byOAMoRZ.mydgr.cn
http://1XNQSLM5.mydgr.cn
http://5KkSwhmG.mydgr.cn
http://Bq28B1JP.mydgr.cn
http://vEInZdWU.mydgr.cn
http://ZHP5LfQE.mydgr.cn
http://kPR79GUi.mydgr.cn
http://aenpu1bQ.mydgr.cn
http://xEUE15rT.mydgr.cn
http://YND06n0t.mydgr.cn
http://iCHH31lf.mydgr.cn
http://K1qjzJOK.mydgr.cn
http://5JFOOv2g.mydgr.cn
http://CpvljMlY.mydgr.cn
http://dVIGsuPZ.mydgr.cn
http://IPxGAO8s.mydgr.cn
http://zBIZoXSS.mydgr.cn
http://hcJU8mBP.mydgr.cn
http://NIcFd9wv.mydgr.cn
http://YNuabl0M.mydgr.cn
http://zOMF1Msh.mydgr.cn
http://5UmFMG7m.mydgr.cn
http://fMyXWYWM.mydgr.cn
http://QQTeo2Qs.mydgr.cn
http://br8ujQag.mydgr.cn
http://AcTqOcBm.mydgr.cn
http://www.dtcms.com/a/380157.html

相关文章:

  • 一款VS Code连接和管理PostgreSQL的扩展插件,支持AI智能辅助和代理模式
  • 数据结构 Part 2
  • 华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航
  • springcloud二-Sentinel2
  • VSCode中的下载VSIX是指什么?
  • VSCode 远程开发连接(glibc<2.28)
  • 公网IP采用自签名证书配置https并消除浏览器不安全告警
  • VSCode创建Python项目和运行py文件
  • 时钟驱动器原理
  • 【Docker】镜像
  • 换源rocklinux和centos
  • FPGA采集AD7606转Aurora 64B66B传输,基于GTY高速收发器,提供工程源码和技术支持
  • 在VSCode中使用Vim模式
  • 告别单次对话:上下文工程如何重塑AI应用架构
  • 字节 Trae vs 腾讯 CodeBuddy vs 阿里 Qoder:三大 AI-IDE 集成 OneCode 深度对比与体验测评
  • 2025软件测试面试大全(含文档)
  • 第6.1节 精准测试Agent简介
  • I.MX6ULL按键实现(轮询及中断)及工程优化
  • 《用 Scikit-learn 构建 SVM 分类模型:从原理到实战的全流程解析》
  • PostgreSQL 的核心优势数据库优化与面试问题解析
  • 基于支持向量机的空间数据挖掘方法及其在旅游地理经济分析中的应用
  • Python 轻松实现替换或修改 PDF 文字
  • Docker命令大全:从基础到高级实战指南
  • 关于数据采集与处理心得(一)
  • 如何高效应对网站反爬虫策略?
  • 华新嘉华发布《GEO生成式引擎优化专业白皮书》,构建生成式AI时代流量运营新范式
  • RabbitMQ在Mac OS上的安装和启动
  • CST毫米波雷达仿真(二)
  • 京东返利app的多数据源整合策略:分布式数据同步与一致性保障
  • 提升复购为什么对品牌很重要?