yolov5 目标检测算法
生活随笔
收集整理的這篇文章主要介紹了
yolov5 目标检测算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介:
目標檢測在生活中應用領域非常廣泛,列如:道路違規抓拍、未戴口罩識別、工地未佩戴安全帽抓拍、廚房出現老鼠檢測。
還可以用在游戲輔助外掛。以槍戰為例,在游戲過程中時刻檢測有沒有人頭出現。當檢測到目標人頭,再調用鼠標把槍口焦點移動到人頭的位置,實現爆頭效果。
本案例對yolov5官方代碼進行了縮減,留下精華的部分,并封裝成類。
yolov5默認模型支持80種目標檢測,具體類型在文章最后。如果需要檢測其他的目標,就需要自己收集數據進行數據標注,再重新訓練新的模型。
1.參數初始化
def __init__(self):# classes,模型訓練的時候每種目標都有自己的一個標識,類型數字從0開始。這里不指定,默認全部檢測。self.classes = None# 加載pt模型self.weights = 'yolov5s.pt'self.imgsz = [640, 640]# 置信度,檢測目標小于這個值的將不會被識別出來self.conf_thres = 0.5self.iou_thres = 0.45# Load modelself.device = select_device('')self.model = DetectMultiBackend(self.weights, device=self.device, dnn=False, fp16=False)self.stride, self.names, self.pt = self.model.stride, self.model.names, self.model.ptself.imgsz = check_img_size(self.imgsz, s=self.stride)self.model.warmup(imgsz=(1, 3, *self.imgsz))2.算法推理
def detect(self, im0s):# 將圖片縮放到640的大小進行識別img = letterbox(im0s, new_shape=(640, 640), stride=self.stride, auto=self.pt)[0]# Convertimg = img.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGBimg = np.ascontiguousarray(img)im = torch.from_numpy(img).to(self.device)im = im.half() if self.model.fp16 else im.float() # uint8 to fp16/32im /= 255if len(im.shape) == 3:im = im[None]pred = self.model(im, augment=False, visualize=False)pred = non_max_suppression(pred, self.conf_thres, self.iou_thres, self.classes, False, max_det=300)dets = []for i, det in enumerate(pred):# im0 為原圖im0 = im0s.copy()if len(det):# 檢測是以640進行的,所以需要把比例放到原圖一樣;det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round()for *xyxy, conf, cls in reversed(det):c = int(cls) # 檢測目標對應的名稱# xyxy 包含了目標的坐標dets.append([int(xyxy[0]), int(xyxy[1]), int(xyxy[2]), int(xyxy[3]), self.names[c], f'{conf:.2f}'])3.調用算法:
from detect import SmokeUtil import cv2 su = SmokeUtil()if __name__ == "__main__":#1.視頻cap = cv2.VideoCapture('target.mp4')while True:success, frame = cap.read()if not success:breakdets = su.detect(frame)if len(dets) > 0:for j in dets:cv2.rectangle(frame, (j[0], j[1]), (j[2], j[3]), (11, 44, 55), 3)cv2.imshow('show', frame)if cv2.waitKey(1) == ord('q'):breakcap.release()cv2.destroyAllWindows()# 2.圖片frame = cv2.imread('1.jpg')dets = su.detect(frame) #所有識別處理的坐標、名稱、置信度if len(dets) > 0:for j in dets:cv2.rectangle(frame, (j[0], j[1]), (j[2], j[3]), (0,255,0), 3)cv2.imwrite('2.jpg', frame)4.檢測效果——以大象為檢測目標:
(原圖) (檢測效果)5.視頻流檢測——車輛檢測
6.支持檢測類型
['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra','giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli','carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']總結
以上是生活随笔為你收集整理的yolov5 目标检测算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毕业参加工作了,记住一句话,攒钱绝对靠谱
- 下一篇: 重启计算机网络连接巨慢,开机后宽带连接很