30行代码让你轻松玩转Yolov5

阅读: 评论:0

30行代码让你轻松玩转Yolov5

30行代码让你轻松玩转Yolov5

最近,有小伙伴私信我说在做项目的时候不需要那么多Yolo的文件,问能不能出一个简化的Yolo教程,今天,他来了。

首先要导入库包

import cv2
import torch
import time
import numpy as np

cv2是opencv的安装包,如果报错:

No module named '×××'(其中xxx表示包的名称)

那么解决办法就是

pip install xxx(特别地,cv2叫opencv-python,sklearn叫scikit-learn),即:
缺少cv2:pip install opencv-python
缺少sklearn:pip install scikit-learn

加载模型和设置模型参数

model = torch.hub.load('../yolov5', 'custom', path='../yolov5/weights/yolov5n.pt', source='local',device='cpu')
f = 0.4

要想利用cuda推理,就把上面的device='cpu'改为device='cuda0'即可。

要用到摄像头肯定得用到下面这行代码:

cap = cv2.VideoCapture(0)

0表示本机上可用的第0个摄像头,在没有接外接摄像头的情况下,0就是电脑摄像头。当接到外接摄像头时,可以用该外接摄像头的编号。此外,还可以接远程摄像头,远程摄像头将代码推流到服务器,cv2.VideoCapture还可以传入视频连接参数作为检测对象。详细内容见我之前写的食物分类移动端部署:图像分类之食物分类(NCWU机器学习课程设计)

之后就可以对传来的图像进行处理了,代码如下:

while True:ret,frame = ad()frame = cv2.flip(frame,1)img_cvt = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)results = model(img_cvt)print(str(results.pandas().xyxy[0].to_numpy()[:,-1]))# tensor-to-numpyresults_ = results.pandas().xyxy[0].to_numpy()i = 0

上述代码是读取摄像头里面的内容,返回一个ret代表是否成功读取,frame就是读取到的图像。当ret为False时,frame为None。之后将读取到的图像转为RGB类型,因为opencv读取的时BGR格式的图像。将读到的图像经过模型推理按得到结果results。

接着在图像上画定位框,代码如下

      for box in results_:l,t,r,b = box[:4].astype('int')confidence = str(round(box[4]*100,2))+"%"cls_name = box[angle(frame,(l,t),(r,b),(0,255,0),2)cv2.putText(frame,cls_name + "-" + confidence,(l,t),cv2.FONT_ITALIC,1,(255,0,0),2)cv2.imshow("result",frame)if cv2.waitKey(10) & 0xFF == ord("q"):break

最后的结果如下:

相比​ultralytics大神​的代码,我这个代码算是简单到令人发指。总结一下,全文的代码一共28行,其中还有几行是没用的,各位大佬在用的时候可以根据自己的需求对我的代码进行魔改。完整代码:

import cv2
import torch
import time
import numpy as npmodel = torch.hub.load('../yolov5', 'custom', path='../yolov5/weights/yolov5n.pt', source='local',device='cpu')
f = 0.4
cap = cv2.VideoCapture(0)
while True:ret,frame = ad()frame = cv2.flip(frame,1)img_cvt = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)results = model(img_cvt)print(str(results.pandas().xyxy[0].to_numpy()[:,-1]))# tensor-to-numpyresults_ = results.pandas().xyxy[0].to_numpy()i = 0for box in results_:l,t,r,b = box[:4].astype('int')confidence = str(round(box[4]*100,2))+"%"cls_name = box[angle(frame,(l,t),(r,b),(0,255,0),2)cv2.putText(frame,cls_name + "-" + confidence,(l,t),cv2.FONT_ITALIC,1,(255,0,0),2)cv2.imshow("result",frame)if cv2.waitKey(10) & 0xFF == ord("q"):break
lease()
cv2.destroyAllWindows()

本文发布于:2024-01-27 21:25:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063619252726.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:让你   玩转   轻松   代码
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23