当前位置: 首页 > 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.hkea.cn/news/678685/

相关文章:

  • 网站建设凡科厦门网站建设平台
  • 互联网行业pest分析福州百度快速优化排名
  • 做网站的接私活犯法吗如何对网站进行推广
  • 身高差效果图网站优化师和运营区别
  • 谷歌wordpress建站搜索引擎算法
  • .net 购物网站开发源代码发布信息的免费平台
  • 自己做一网站大学生网络营销策划书
  • 关于网站建设的文章百度域名收录提交入口
  • 国人在线做网站推广图片大全
  • 郑州网站建设七彩科技四年级说新闻2023
  • 在什么网站上做自媒体seo整站怎么优化
  • 网站开发要注意安全性公司优化是什么意思
  • 河北邢台做移动网站开通网站需要多少钱
  • 天河网站建设多少钱淘宝关键词优化
  • 中型网站 收益关键词排名查询官网
  • 网站的弹窗是怎么做的谈谈对seo的理解
  • 广州网站制作费用宁波seo外包哪个品牌好
  • 河南高端网站建设广州网站优化页面
  • 企业可以备案几个网站南昌seo实用技巧
  • 网站用什么布局专业网站建设公司
  • 公司网站怎么做分录it培训机构学费一般多少
  • 如何将自己做的网页做成网站绍兴seo
  • 河南省住房与城乡建设厅网站首页怎么做属于自己的网站
  • 移动端网站开发推广效果最好的平台
  • 用二级页面做网站的源代码自助建站系统破解版
  • 网站上怎么做动画广告推广策略包括哪些内容
  • 广州网站优化公司大亚湾发布
  • 广州网站开发招聘百度经验悬赏令
  • 吴江建设局网站郑州粒米seo外包
  • 建设工程合同纠纷与劳务合同纠纷seo培训教程视频