<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前幾天學習了Yolov5,當我想實際將Yolov5實際運用的時候卻不知道怎麼辦了
然後我決定對Yolov5的detect.py修改為可以直接呼叫的函數
因為我只需要識別圖片,所以我將detect.py修改為只要傳入一張圖片他就可以返回座標
ps:我這裡用的是Yolov5(6.0版本)
# Copyright (c) 2022 guluC #匯入需要的庫 import os import sys from pathlib import Path import numpy as np import cv2 import torch import torch.backends.cudnn as cudnn #初始化目錄 FILE = Path(__file__).resolve() ROOT = FILE.parents[0] # 定義YOLOv5的根目錄 if str(ROOT) not in sys.path: sys.path.append(str(ROOT)) # 將YOLOv5的根目錄新增到環境變數中(程式結束後刪除) ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative from models.common import DetectMultiBackend from utils.datasets import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams from utils.general import (LOGGER, check_file, check_img_size, check_imshow, check_requirements, colorstr, increment_path, non_max_suppression, print_args, scale_coords, strip_optimizer, xyxy2xywh) from utils.plots import Annotator, colors, save_one_box from utils.torch_utils import select_device, time_sync #匯入letterbox from utils.augmentations import Albumentations, augment_hsv, copy_paste, letterbox, mixup, random_perspective weights=ROOT / 'yolov5s.pt' # 權重檔案地址 .pt檔案 source=ROOT / 'data/images' # 測試資料檔案(圖片或視訊)的儲存路徑 data=ROOT / 'data/coco128.yaml' # 標籤檔案地址 .yaml檔案 imgsz=(640, 640) # 輸入圖片的大小 預設640(pixels) conf_thres=0.25 # object置信度閾值 預設0.25 用在nms中 iou_thres=0.45 # 做nms的iou閾值 預設0.45 用在nms中 max_det=1000 # 每張圖片最多的目標數量 用在nms中 device='0' # 設定程式碼執行的裝置 cuda device, i.e. 0 or 0,1,2,3 or cpu classes=None # 在nms中是否是隻保留某些特定的類 預設是None 就是所有類只要滿足條件都可以保留 --class 0, or --class 0 2 3 agnostic_nms=False # 進行nms是否也除去不同類別之間的框 預設False augment=False # 預測是否也要採用資料增強 TTA 預設False visualize=False # 特徵圖視覺化 預設FALSE half=False # 是否使用半精度 Float16 推理 可以縮短推理時間 但是預設是False dnn=False # 使用OpenCV DNN進行ONNX推理 # 獲取裝置 device = select_device(device) # 載入模型 model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data) stride, names, pt, jit, onnx, engine = model.stride, model.names, model.pt, model.jit, model.onnx, model.engine imgsz = check_img_size(imgsz, s=stride) # 檢查圖片尺寸 # Half # 使用半精度 Float16 推理 half &= (pt or jit or onnx or engine) and device.type != 'cpu' # FP16 supported on limited backends with CUDA if pt or jit: model.model.half() if half else model.model.float() def detect(img): # Dataloader # 載入資料 dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt) # Run inference # 開始預測 model.warmup(imgsz=(1, 3, *imgsz), half=half) # warmup dt, seen = [0.0, 0.0, 0.0], 0 #對圖片進行處理 im0 = img # Padded resize im = letterbox(im0, imgsz, stride, auto=pt)[0] # Convert im = im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB im = np.ascontiguousarray(im) t1 = time_sync() im = torch.from_numpy(im).to(device) im = im.half() if half else im.float() # uint8 to fp16/32 im /= 255 # 0 - 255 to 0.0 - 1.0 if len(im.shape) == 3: im = im[None] # expand for batch dim t2 = time_sync() dt[0] += t2 - t1 # Inference # 預測 pred = model(im, augment=augment, visualize=visualize) t3 = time_sync() dt[1] += t3 - t2 # NMS pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det) dt[2] += time_sync() - t3 #用於存放結果 detections=[] # Process predictions for i, det in enumerate(pred): # per image 每張圖片 seen += 1 # im0 = im0s.copy() if len(det): # Rescale boxes from img_size to im0 size det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round() # Write results # 寫入結果 for *xyxy, conf, cls in reversed(det): xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4))).view(-1).tolist() xywh = [round(x) for x in xywh] xywh = [xywh[0] - xywh[2] // 2, xywh[1] - xywh[3] // 2, xywh[2], xywh[3]] # 檢測到目標位置,格式:(left,top,w,h) cls = names[int(cls)] conf = float(conf) detections.append({'class': cls, 'conf': conf, 'position': xywh}) #輸出結果 for i in detections: print(i) #推測的時間 LOGGER.info(f'({t3 - t2:.3f}s)') return detections path = 'C://Users//25096//Desktop//yoloV5//yolov5//yolov5-master//data//images//zidane.jpg' img = cv2.imread(path) #傳入一張圖片 detect(img)
我這裡用的是Yolov5自帶的zidane.jpg
這是輸出結果
class:標籤的名稱
conf:置信度
position:xywh ( 左上角x,左上角y,寬,高 )
總結
到此這篇關於如何將Yolov5的detect.py修改為可以直接呼叫的函數的文章就介紹到這了,更多相關Yolov5的detect.py直接呼叫函數內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45