当前位置: 首页 > news >正文

西安网站优化平台外链代发免费

西安网站优化平台,外链代发免费,深圳设计师品牌,wordpress获取当前分类名视频标注 用于从视频中标注数据,用于YOLO网络的目标检测。旨在实现单次鼠标标注能生成多张被标注图像,实现数据集快速制作! 从视频中,通过鼠标框选指定区域,形成掩码box鼠标选定区域后,根据设定的成像尺寸…

视频标注

用于从视频中标注数据,用于YOLO网络的目标检测。旨在实现单次鼠标标注能生成多张被标注图像,实现数据集快速制作!

  1. 从视频中,通过鼠标框选指定区域,形成掩码box
  2. 鼠标选定区域后,根据设定的成像尺寸,在选定区域周围随机实施多个角度的剪切,制作数据集。(重在减少鼠标标注操作,丰富数据集图片数量)
  3. 剪切出的图片,每张都带掩码box、原图和效果图。
  4. 标注过程视频可暂停,生成图像文件自动命名。(鼠标单击过后,或者键盘按键,都可控制视频暂停和继续)
  5. 不足之处:不可控制视频帧移动

程序文件:https://download.csdn.net/download/tjb132/88514408?spm=1001.2014.3001.5503


import threading
import queueclass Mask_video:def __init__(self, urls, label, images_save_path):self.urls = urlsself.video_idx = 0self.lock = threading.Lock()self.drawing = Falseself.start_point = (-1, -1)self.end_point = (-1, -1)self.cropped_image = Noneself.paused = False  # 是否暂停视频播放self.expanded_cropped_image = Noneself.expanded_cropped_image_mask_pts = [0,0,0,0]self.images_save_root = images_save_pathself.images_data_save_path = os.path.join(self.images_save_root, 'images')self.images_label_save_path = os.path.join(self.images_save_root, 'labels')self.images_label_mask_path = os.path.join(self.images_save_root, 'mask')os.makedirs(self.images_data_save_path, exist_ok=True)os.makedirs(self.images_label_save_path, exist_ok=True)os.makedirs(self.images_label_mask_path, exist_ok=True)self.images_idx = 0self.label = label# 创建一个窗口并设置鼠标事件回调函数cv.namedWindow('Video')cv.setMouseCallback('Video', self.draw_rectangle)passdef draw_rectangle(self, event, x, y, flags, param):if event == cv.EVENT_LBUTTONDOWN:with self.lock:self.drawing = Trueself.start_point = (x, y)self.pause_video()elif event == cv.EVENT_MOUSEMOVE:if self.drawing:with self.lock:self.end_point = (x, y)if event == cv.EVENT_LBUTTONUP:with self.lock:self.drawing = Falseself.end_point = (x, y)# print('=== 1 ===',  self.start_point, self.end_point)# 归一化坐标,确保 start_point 包含左上角坐标,end_point 包含右下角坐标start_point = (min(self.start_point[0], self.end_point[0]), min(self.start_point[1], self.end_point[1]))end_point = (max(self.start_point[0], self.end_point[0]), max(self.start_point[1], self.end_point[1]))self.start_point, self.end_point = start_point, end_point# print('=== 2 ===', self.start_point, self.end_point)if (self.start_point[0]-self.end_point[0])==0 or (self.start_point[1]-self.end_point[1])==0:self.cropped_image = Nonereturnelse:# 裁剪图像并显示self.cropped_image = self.frame[self.start_point[1]:self.end_point[1],self.start_point[0]:self.end_point[0]]# cv.imshow('Cropped Image', self.cropped_image)for i in range(4): self.crop_and_random_expand()self.cropped_image = Noneself.resume_video()def pause_video(self):with self.lock:self.paused = Truedef resume_video(self):with self.lock:self.paused = Falsedef crop_and_random_expand(self):""" 在指定区域的附近,实施随机剪裁,生成图像 """# with self.lock:if self.cropped_image is not None:# 定义扩展的像素范围expand_range1 = np.random.randint(0, self.start_point[0])  # 您可以根据需要调整这个值expanded_x1 = max(self.start_point[0] - expand_range1, 0)expand_range2 = np.random.randint(0, self.frame.shape[1]-self.end_point[0])  # 您可以根据需要调整这个值expanded_x2 = min(self.end_point[0] + expand_range2, self.frame.shape[1])expand_range3 = np.random.randint(0, self.start_point[1])  # 您可以根据需要调整这个值expanded_y1 = max(self.start_point[1] - expand_range3, 0)expand_range4 = np.random.randint(0, self.frame.shape[0] - self.end_point[1])  # 您可以根据需要调整这个值expanded_y2 = min(self.end_point[1] + expand_range4, self.frame.shape[0])expanded_cropped_image = self.frame[expanded_y1:expanded_y2, expanded_x1:expanded_x2]yh1, xw1 = expanded_cropped_image.shape[:2]expanded_cropped_image = cv.resize(expanded_cropped_image, (640, 640))yh2, xw2 = expanded_cropped_image.shape[:2]self.expanded_cropped_image = expanded_cropped_image.copy()new_pts = [expand_range1, expand_range3, self.end_point[0]-self.start_point[0], self.end_point[1]-self.start_point[1]]new_pts = [new_pts[0]*xw2/xw1, new_pts[1]*yh2/yh1, new_pts[2]*xw2/xw1, new_pts[3]*yh2/yh1]new_pts = np.array(new_pts, dtype=np.int32)self.expanded_cropped_image_mask_pts = new_ptscv.rectangle(expanded_cropped_image, (new_pts[0],new_pts[1]), (new_pts[0]+new_pts[2], new_pts[1]+new_pts[3]), (0, 255, 0), 2)cv.imshow('expanded_cropped_image', expanded_cropped_image)self.save_image(self.expanded_cropped_image, expanded_cropped_image)return expanded_cropped_imageelse:return Nonedef run_video_crop(self):while True:if not self.paused:ret, self.frame = self.cap.read()if not ret:print("无法读取视频帧")breakimg = self.frame.copy()if self.start_point != (-1, -1) and self.end_point != (-1, -1):# 在帧上绘制方框with self.lock:cv.rectangle(img, self.start_point, self.end_point, (0, 255, 0), 2)cv.imshow('Video', img)key = cv.waitKey(20)if key & 0xFF == ord('q'):  # 退出剪裁软件breakelif key & 0xFF == ord('s'):   # 暂停视频self.pause_video()elif key & 0xFF == ord('d'):  # 继续播放视频self.resume_video()# cv.waitKey(20)self.cap.release()# cv.destroyAllWindows()def run(self):for i in range(len(self.urls)):url = self.urls[i]self.video_idx = itry:cap = cv.VideoCapture(url)ret, frame = cap.read()if ret:self.cap = cap# breakself.lock = threading.Lock()self.drawing = Falseself.start_point = (-1, -1)self.end_point = (-1, -1)self.cropped_image = Noneself.paused = False  # 是否暂停视频播放self.run_video_crop()except: passcv.destroyAllWindows()def save_image(self, imgdata, maskdata):self.images_idx += 1imgfile = os.path.join(self.images_data_save_path, f"{str(self.video_idx)}_{self.images_idx}.jpg")labelfile = os.path.join(self.images_label_save_path, f"{str(self.video_idx)}_{self.images_idx}.txt")maskfile = os.path.join(self.images_label_mask_path, f"{str(self.video_idx)}_{self.images_idx}.jpg")print('\timages data jpg save in:', imgfile)cv.imwrite(imgfile, imgdata)print('\timages label txt save in:', labelfile)hy, wx = imgdata.shape[:2]x,y,w,h = self.expanded_cropped_image_mask_ptswith open(labelfile, 'w') as f:data = f"{str(self.label)}\t{x / wx}\t{y / hy}\t{w / wx}\t{h / hy}" + "\n"f.write(data)print('\timages mask save in:', maskfile)cv.imwrite(maskfile, maskdata)def run():print('==========   start system  ==============')import pandas as pd# 读取Excel文件excel_file = r'I:\python\02-job\h03090 data-output\video.xlsx'  # 将文件名替换为实际的Excel文件名df = pd.read_excel(io=excel_file)# 提取某一行的数据,例如第3行(索引为2)row_index = 3selected_row = df.iloc[row_index]# 打印提取的行数据print("提取的行数据:")print(selected_row)videos = str(selected_row['topVideo']).split(',')print(videos)data = {'id': selected_row['goods_id'], 'videos': videos}images_save_path = r'I:\python\02-job\h03090 data-output\new_images-labeled'mask = Mask_video(urls=videos, label=row_index, images_save_path=images_save_path)mask.run()pass
http://www.yayakq.cn/news/231204/

相关文章:

  • 网站频道建设wordpress虚拟模板
  • 网站建设的目标客户分析wordpress和帝国哪个好
  • 深圳公司网站推广游戏网站seo怎么做
  • 专业做公司网站的机构黑群晖建设个人网站
  • 网站数据库安全如何为一个网站做短连接
  • xuzhou公司网站制作专业律所网站建设
  • 58做网站联系电话免费网站收录入口
  • 南宁建站模板源码石家庄营销型网站建设费用
  • 广东省住房和建设局官方网站北京死亡病例最新消息
  • 做变形字的网站施工企业财务工作总结及工作计划
  • 惠州自适应网站建设中信建设有限责任公司四川分公司
  • 杭州公司车牌摇号申请流程网站建设及优化
  • 自字网站建设教程怎么做网页中不显示项目符号
  • 做淘客网站dedecms网站地图前台路径不修改
  • PHP网站开发简单实例如何用ppt做网站
  • 小灯具网站建设方案公司网站建设需求表
  • 用yershop做网站wordpress高亮插件
  • 论文收录网站排名厦门seo排名优化方式
  • 如何找网站足球排行榜前十名
  • jsp网站设计教学做一体化教程wordpress电商推广插件
  • 宿州城乡建设局网站建设装修公司网站
  • 自己如何在网上做网站网站备案负责人幕布照
  • 3d打印网站开发建设一个公司网站
  • 做外贸推广的网站有哪些网站优化排名方法有哪些
  • wordpress网站维护页面模板vs做网站需要的插件
  • 云服务器建立多个网站徐州鸿美网站建设
  • 广西网站推广深圳营销建网站公司
  • 五八同城网站开发了多久怎么查看网站disallow
  • 贺州 网站建设公司有哪些做孵化的网站
  • 展示型网站 asp.net写作网站保底和全勤的区别