Python+Yolov8目标识别特征检测
创始人
2024-05-31 09:28:21
0

Yolov8目标识别特征检测

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。

文章目录

一、所需工具软件

二、使用步骤

1. 引入库

2. 识别图像特征

3. 参数设置

4. 运行结果

三、在线协助

一、所需工具软件

1. Pycharm, Python

2. Yolov8, OpenCV

二、使用步骤

1.引入库

代码如下(示例):

import torchfrom ultralytics.yolo.engine.predictor import BasePredictor
from ultralytics.yolo.engine.results import Results
from ultralytics.yolo.utils import DEFAULT_CFG, ROOT, ops
from ultralytics.yolo.utils.plotting import Annotator, colors, save_one_box

2.识别图像特征

代码如下(示例):

class DetectionPredictor(BasePredictor):def get_annotator(self, img):return Annotator(img, line_width=self.args.line_thickness, example=str(self.model.names))def preprocess(self, img):img = torch.from_numpy(img).to(self.model.device)img = img.half() if self.model.fp16 else img.float()  # uint8 to fp16/32img /= 255  # 0 - 255 to 0.0 - 1.0return imgdef postprocess(self, preds, img, orig_img):preds = ops.non_max_suppression(preds,self.args.conf,self.args.iou,agnostic=self.args.agnostic_nms,max_det=self.args.max_det,classes=self.args.classes)results = []for i, pred in enumerate(preds):orig_img = orig_img[i] if isinstance(orig_img, list) else orig_imgshape = orig_img.shapepred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], shape).round()results.append(Results(boxes=pred, orig_img=orig_img, names=self.model.names))return resultsdef write_results(self, idx, results, batch):p, im, im0 = batchlog_string = ''if len(im.shape) == 3:im = im[None]  # expand for batch dimself.seen += 1imc = im0.copy() if self.args.save_crop else im0if self.source_type.webcam or self.source_type.from_img:  # batch_size >= 1log_string += f'{idx}: 'frame = self.dataset.countelse:frame = getattr(self.dataset, 'frame', 0)self.data_path = pself.txt_path = str(self.save_dir / 'labels' / p.stem) + ('' if self.dataset.mode == 'image' else f'_{frame}')log_string += '%gx%g ' % im.shape[2:]  # print stringself.annotator = self.get_annotator(im0)det = results[idx].boxes  # TODO: make boxes inherit from tensorsif len(det) == 0:return log_stringfor c in det.cls.unique():n = (det.cls == c).sum()  # detections per classlog_string += f"{n} {self.model.names[int(c)]}{'s' * (n > 1)}, "# writefor d in reversed(det):cls, conf = d.cls.squeeze(), d.conf.squeeze()if self.args.save_txt:  # Write to fileline = (cls, *(d.xywhn.view(-1).tolist()), conf) \if self.args.save_conf else (cls, *(d.xywhn.view(-1).tolist()))  # label formatwith open(f'{self.txt_path}.txt', 'a') as f:f.write(('%g ' * len(line)).rstrip() % line + '\n')if self.args.save or self.args.save_crop or self.args.show:  # Add bbox to imagec = int(cls)  # integer classname = f'id:{int(d.id.item())} {self.model.names[c]}' if d.id is not None else self.model.names[c]label = None if self.args.hide_labels else (name if self.args.hide_conf else f'{name} {conf:.2f}')self.annotator.box_label(d.xyxy.squeeze(), label, color=colors(c, True))if self.args.save_crop:save_one_box(d.xyxy,imc,file=self.save_dir / 'crops' / self.model.model.names[c] / f'{self.data_path.stem}.jpg',BGR=True)return log_string

3.参数定义

代码如下(示例):

if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--weights', nargs='+', type=str, default='yolov5_best_road_crack_recog.pt', help='model.pt path(s)')parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')parser.add_argument('--view-img', action='store_true', help='display results')parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')parser.add_argument('--classes', nargs='+', type=int, default='0', help='filter by class: --class 0, or --class 0 2 3')parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')parser.add_argument('--augment', action='store_true', help='augmented inference')parser.add_argument('--update', action='store_true', help='update all models')parser.add_argument('--project', default='runs/detect', help='save results to project/name')parser.add_argument('--name', default='exp', help='save results to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')opt = parser.parse_args()

4.运行结果如下

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

博主推荐文章:https://blog.csdn.net/alicema1111/article/details/123851014

个人博客主页:https://blog.csdn.net/alicema1111?type=blog

博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

相关内容

热门资讯

《观潮》说课稿 《观潮》说课稿15篇  作为一位杰出的教职工,总不可避免地需要编写说课稿,说课稿有助于提高教师的语言...
八年级下册《马说》说课稿 八年级下册《马说》说课稿八年级下册《马说》说课稿1  一.说教材  1. 教材所处的地位和作用:  ...
小学数学说课例稿   实际上数学就在学生身边,教师要善于引导学生运用数学的眼光去观察和认识现实生活中的客观事物,在有关...
《放小鸟》说课稿 《放小鸟》说课稿  作为一名为他人授业解惑的教育工作者,时常需要用到说课稿,借助说课稿可以更好地提高...
《平行四边形的认识》数学说课... 《平行四边形的认识》数学说课稿  作为一位兢兢业业的人民教师,时常要开展说课稿准备工作,借助说课稿可...
职工拾金不昧新闻稿 职工拾金不昧新闻稿  拾金不昧拾到东西并不隐瞒下来据为己有,指良好的人的道德和社会风尚。以下是小编为...
《鸬鹚》优秀说课稿 《鸬鹚》优秀说课稿  《鸬鹚》是义务教育六年制小学语文第七册第21课,作者是我国现代著名的文学家郑振...
校园红领巾广播稿 校园红领巾广播稿100字(通用27篇)  有在广播站锻炼的同学们,广播前一般都会提前做好广播稿,优秀...
《最后一课》说课稿 《最后一课》说课稿《最后一课》说课稿1  它是初中一年级的教学内容,具体编排在第一册第二单元的第二篇...
国庆节朗诵稿 国庆节朗诵稿  在我们上学期间,大家对朗诵稿都再熟悉不过了吧,朗诵是口语交际的一种重要形式。你知道什...
运动会广播稿100字:致短跑...   1.间的成败 ——致百米运动员  红色的跑道,承载着多少汗水,一条红线,记载着多少成败。  一次...
万能开会发言稿 万能开会发言稿公司开会,肯定是需要提前做好准备的,也要准备好要说的话,或是发言稿,万能开会发言稿。万...
《要下雨了》说课稿 小学语文一年级下册《要下雨了》说课稿范文  作为一名老师,时常需要编写说课稿,说课稿有助于学生理解并...
运动会加油稿 运动会加油稿20字  导语:运动会少不了加油,简单的一句话,可以给予运动会无限的力量。下面是为大家的...
小学语文《数字歌》说课稿 小学语文《数字歌》说课稿  【说教材】  我说的是九年义务教育新课程北师大版语文一年级上册第三单元《...
高三百日誓师领导发言稿 高三百日誓师领导发言稿  在不断进步的时代,发言稿使用的情况越来越多,发言稿可以帮助发言者更好的表达...
小学经典美文朗诵稿 通过朗诵可以陶冶性情,开阔胸怀,文明言行,增强理解。下面是大学网小编为大家整理了小学经典美文朗诵稿,...
《角的度量》四年级说课稿 《角的度量》四年级说课稿  一、说教材  (一)说课内容:  (四年级上册第18—19页)  (二)...
一年级家长会班主任发言稿 一年级家长会班主任发言稿(精选10篇)  在充满活力,日益开放的今天,在很多情况下我们需要用到发言稿...
高中体育《武术初级长拳》说课... 高中体育《武术初级长拳》说课稿  很多老师不知道说课稿怎么写?格式是怎么样的?下面YJBYS小编为大...