日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 目标检测 >内容正文

目标检测

yolov5 目标检测算法

發(fā)布時間:2023/12/20 目标检测 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yolov5 目标检测算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介:

目標檢測在生活中應用領域非常廣泛,列如:道路違規(guī)抓拍、未戴口罩識別、工地未佩戴安全帽抓拍、廚房出現(xiàn)老鼠檢測。
還可以用在游戲輔助外掛。以槍戰(zhàn)為例,在游戲過程中時刻檢測有沒有人頭出現(xiàn)。當檢測到目標人頭,再調(diào)用鼠標把槍口焦點移動到人頭的位置,實現(xiàn)爆頭效果。
本案例對yolov5官方代碼進行了縮減,留下精華的部分,并封裝成類。
yolov5默認模型支持80種目標檢測,具體類型在文章最后。如果需要檢測其他的目標,就需要自己收集數(shù)據(jù)進行數(shù)據(jù)標注,再重新訓練新的模型。


1.參數(shù)初始化

def __init__(self):# classes,模型訓練的時候每種目標都有自己的一個標識,類型數(shù)字從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.調(diào)用算法:

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 目标检测算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。