游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

图像预处理随机贴图生成标注文件的python实现

  1。任务目标
  在训练目标检测模型时,若数据存在以下情况:图像之间差异小、不同类别数目差异大、有些目标物体的样本图片难以搜集等,需要对数据进行处理。本文以fire类别为例实现对数据的随机贴图增广,生成新的标注文件,或在已有标注文件中添加,且避免覆盖已有标注。2。Python实现2。1将已标注的目标保存
  数据存储格式:(路径中不要包含中文)
  输入文件夹:datafiredatasetJPEGImages。jpgdatafiredatasetAnnotations。xml
  输出文件夹:datafirecut
  代码:importosimportcv2importtimeimportargparseimportxml。etree。ElementTreeasETfromtqdmimporttqdmparserargparse。ArgumentParser(descriptionReadboxfromxmlandcropfromimage。)parser。addargument(dstlabel,defaultfire,helplabelboxtocut)parser。addargument(inputpath,defaultdatafiredataset,helpcontainAnnotations,JPEGImagesfolder)parser。addargument(outputpath,defaultdatafirecut,helpoutputpath)argsparser。parseargs()defreadxmlbox(xmlfile):xmlannoET。parse(xmlfile)result〔〕forobjinxmlanno。findall(object):classnameobj。find(name)。text。strip()xminobj。find(bndbox)。find(xmin)。textxmaxobj。find(bndbox)。find(xmax)。textyminobj。find(bndbox)。find(ymin)。textymaxobj。find(bndbox)。find(ymax)。textresult。append(〔classname,int(xmin),int(xmax),int(ymin),int(ymax)〕)returnresultdefmain():xmlpathos。path。join(args。inputpath,Annotations)imgpathos。path。join(args。inputpath,JPEGImages)forimgnameintqdm(os。listdir(imgpath)):xmlname{}。xml。format(imgname。rsplit(。,maxsplit1)〔0〕)xmlfileos。path。join(xmlpath,xmlname)ifnotos。path。exists(xmlfile):print({}notexists。format(xmlname))continueimgcv2。imread(os。path。join(imgpath,imgname))clsboxesreadxmlbox(xmlfile)forclsboxinclsboxes:classname,xmin,xmax,ymin,ymaxclsboxifclassname!args。dstlabel:continuecropimgimg〔ymin:ymax,xmin:xmax,:〕newname{}{}。jpg。format(xmlname〔:4〕,str(time。time())。replace(。,))savepathos。path。join(args。outputpath,classname)ifnotos。path。exists(savepath):os。makedirs(savepath)savenameos。path。join(savepath,newname)print(savename)cv2。imwrite(savename,cropimg)ifnamemain:main()
  生成结果:
  2。2随机贴图扩充数据
  数据存储格式:
  输入文件夹:datafirecutdatafirebgJPEGImages。jpgdatafirebgAnnotations。xml
  注意:此处作为背景的数据,可以只有图片,没有标注文件。也可以既有图片又有标注文件。若没有标注文件,则生成;若有标注文件,则在贴图时会避免目标框的遮挡。
  输出文件夹:dataoutput
  输入参数:gennum:生成的图片数目,实际生成数目小于等于该值;clsname:待扩增的类别名称;tietudir:前景图片文件夹,保存fire目标图,是从已标注的fire数据中剪切保存;imgpath:背景图片文件夹,其他含fire目标或不含fire目标的图片;xmlpath:背景图片标注文件夹savepath:保存结果文件夹
  代码:importosimporttimeimportrandomimportargparseimportxml。etree。ElementTreeasETfromPILimportImageparserargparse。ArgumentParser()parser。addargument(tietudir,defaultdatafirecutfire,help贴图路径)parser。addargument(xmlpath,defaultdatafirebgAnnotations,help躲避路径)parser。addargument(imgpath,defaultdatafirebgJPEGImages,help底图路径)parser。addargument(savepath,defaultdataoutput,help保存路径)parser。addargument(gennum,default11,help保存个数)parser。addargument(clsname,defaultfire,help目标类别名)argsparser。parseargs()defcreatsrcxml(widthditu,heightditu,box,savepath,name,clsname):xmlnamenamexmlfilesavepathxmlnamexopen(xmlfile,w)x。writelines()x。writelines(folderdatafolder)x。writelines(filenamexmlnamefilename)x。writelines(pathxmlfilepath)x。writelines(source)x。writelines(databaseUnknowndatabase)x。writelines(source)x。writelines(size)x。writelines(widthstr(widthditu)width)x。writelines(heightstr(heightditu)height)x。writelines(depth3depth)x。writelines(size)x。writelines(segmented0segmented)x。writelines(object)x。writelines(nameclsnamename)x。writelines(poseUnspecifiedpose)x。writelines(truncated0truncated)x。writelines(difficult0difficult)x。writelines(bndbox)x。writelines(xminstr(int(box〔0〕))xmin)x。writelines(yminstr(int(box〔1〕))ymin)x。writelines(xmaxstr(int(box〔2〕))xmax)x。writelines(ymaxstr(int(box〔3〕))ymax)x。writelines(bndbox)x。writelines(object)x。writelines(annotation)x。close()defcreatxml(box,savepath,copypath,clsname):readFileopen(copypath,encodingUTF8)linesreadFile。readlines()readFile。close()xopen(savepath,w,encodingUTF8)x。writelines(〔itemforiteminlines〔:1〕〕)x。writelines(object)x。writelines(nameclsnamename)x。writelines(poseUnspecifiedpose)x。writelines(truncated0truncated)x。writelines(difficult0difficult)x。writelines(bndbox)x。writelines(xminstr(int(box〔0〕))xmin)x。writelines(yminstr(int(box〔1〕))ymin)x。writelines(xmaxstr(int(box〔2〕))xmax)x。writelines(ymaxstr(int(box〔3〕))ymax)x。writelines(bndbox)x。writelines(object)x。writelines(annotation)x。close()defreadxmlbox(xmlfile):xmlannoET。parse(xmlfile)result〔〕forobjinxmlanno。findall(object):classnameobj。find(name)。text。strip()xminobj。find(bndbox)。find(xmin)。textxmaxobj。find(bndbox)。find(xmax)。textyminobj。find(bndbox)。find(ymin)。textymaxobj。find(bndbox)。find(ymax)。textresult。append(〔classname,int(xmin),int(ymin),int(xmax),int(ymax)〕)returnresultdefcomputeIOU(rec1,rec2):leftcolumnmaxmax(rec1〔0〕,rec2〔0〕)rightcolumnminmin(rec1〔2〕,rec2〔2〕)uprowmaxmax(rec1〔1〕,rec2〔1〕)downrowminmin(rec1〔3〕,rec2〔3〕)ifleftcolumnmaxrightcolumnminordownrowminuprowmax:return0else:s1(rec1〔2〕rec1〔0〕)(rec1〔3〕rec1〔1〕)s2(rec2〔2〕rec2〔0〕)(rec2〔3〕rec2〔1〕)scross(downrowminuprowmax)(rightcolumnminleftcolumnmax)returnscross(s1s2scross)defrandombox(end1,end2,end3,end4):xminrandom。randint(0,end1)yminrandom。randint(0,end2)xmaxxminend3ymaxyminend4returnxmin,ymin,xmax,ymaxdefgetshufflelist(imgpath,gennum):imgsos。listdir(imgpath)numlen(imgs)ifnotnum:returnNonerandom。shuffle(imgs)times,remainderpmod(gennum,num)namegenimgs〔:remainder〕foriinrange(times):namegen。extend(imgs)random。shuffle(namegen)returnnamegendefprocess(gennum,tietudir,imgpath,xmlpath,savepath,clsname):os。makedirs(savepath,existokTrue)loadfgfggengetshufflelist(tietudir,gennum)loadbgbggengetshufflelist(imgpath,gennum)iffggenisNoneorbggenisNone:returncombinenum0forfg,bginzip(fggen,bggen):num1fgimgImage。open(os。path。join(tietudir,fg))bgimgImage。open(os。path。join(imgpath,bg))savenamebg。rsplit(。,maxsplit1)〔0〕bgxmlname{}。xml。format(savename)bgxmlpathos。path。join(xmlpath,bgxmlname)clsboxes〔〕ifos。path。exists(bgxmlpath):clsboxesreadxmlbox(bgxmlpath)fgwidthfgimg。size〔0〕贴图长宽fgheightfgimg。size〔1〕bgwidthbgimg。size〔0〕底图长宽bgheightbgimg。size〔1〕scale1。0try:box2randombox(bgwidthfgwidth,bgheightfgheight,fgwidth,fgheight)except:scale0。5fgimg。resize((int(fgwidthscale),int(fgheightscale)))fgwidthfgimg。size〔0〕fgheightfgimg。size〔1〕iffgwidthbgwidthorfgheightbgheight:continuebox2randombox(bgwidthfgwidth,bgheightfgheight,fgwidth,fgheight)timer50loopflagTruewhiletimerandloopflagandclsboxes:timer1loopflagFalseforboxinclsboxes:areacomputeIOU(box〔1:5〕,box2)ifarea0:box2randombox(bgwidthfgwidth,bgheightfgheight,fgwidth,fgheight)loopflagTruebreakiftimer0:bgimg。paste(fgimg,(box2〔0〕,box2〔1〕))bgimgaddbgimg。convert(RGB)newname{}{}。format(savename,str(time。time())。replace(。,))bgimgadd。save(os。path。join(savepath,newname。jpg))xmlsavepathos。path。join(savepath,newname。xml)ifnotclsboxes:creatsrcxml(bgwidth,bgheight,box2,savepath,newname。xml,clsname)else:creatxml(box2,xmlsavepath,bgxmlpath,clsname)ifnamemain:process(args。gennum,args。tietudir,args。imgpath,args。xmlpath,args。savepath,args。clsname)
  生成结果:(labelimg查看)
  智驱力科技驱动生产力

故乡,那一塘苇韵作者:闻笛记忆中,故乡的池塘边有一片茫茫的苇海。每年的夏天,这群在水一方的娉婷佳人,都会站在蒹葭苍苍之中,站在迷离悠远的烟波深处,用纤柔的舞姿摇曳出一片风景。以一种……梁安琪的隐形财富有多少?在澳门有160亩地,还将建成豪华度假赌王四太太梁安琪的财富到底被低估多少呢?在何鸿燊家族的分家中,梁安琪看似是最大的输家。因为梁安琪分到了澳娱公司股份最少。澳娱公司是澳博控股的大股东,同时澳娱在澳门还控制了非常多……赏花灯看民俗观展演南宁这些地方邀您闹元宵欢欢喜喜、热热闹闹庆佳节!过年期间,南宁市青秀区的大街小巷、商场、公园等地挂满了各式各样的灯笼,彩色的兔子花灯营造出格外喜庆的氛围。2月5日就是传统元宵节了,青秀区哪些地方有特……推荐6个yyds实用接私活开源项目大家好,我是Echa。这是一年的第四天,幸福在这头,欢乐在那头;这是期望的开头,努力在这头,辉煌在那头;这是喜庆的开头,笑容在这头,好福气在那头;这是祝福的开头,我在信息……Epic商店限时免费领取神陨挑战者版和监狱建筑师一星期过去了,又到E宝送福利的日子,一起来看看本周赠送是什么游戏吧!本周Epic商店赠送的两款免费游戏分别第三人称动作格斗RPG游戏《神陨挑战者版》(GodfallChalle……CBA明日五场大战!辽宁VS上海不留情面新疆胜券在握老叔血战北京时间10月13日,CBA联赛将继续展开季前赛的争夺,眼看新赛季将在16日即将拉开战幕,所以近两天的比赛对于各支球队状态的寻找至关重要。眼下除了上海以外,所有球队都将以全华班……浅谈胃病患者的饮食规律及忌讳好医生为健康护航胃病疼起来真的不要命,我以前工作是出野外,饮食不规律,作息时间经常熬夜不好好休息,久而久之胃病就这样熬出来了,昨天看了一篇关于胃病的饮食规律的文章与有胃病的好友……贝利生前最大的痛!雷米特杯被盗至今下落不明,此前遗失曾被狗找82岁的贝利离世之后,世界足坛纷纷对这位传奇球员表示悼念。在辉煌的职业生涯中,贝利最大的荣誉莫过于三次帮助巴西队登顶世界杯,并且永久保留了当时的冠军奖杯雷米特杯。不过这座……快递人员优先参加工伤保险2023年重庆社保工作有这些重点上游新闻记者从3月22日举行的2023年全市社会保险工作会议上得到消息,今年,重庆市社会保险工作将以经办服务数字化转型为牵引,对照八张问题清单,围绕七张报表,落实五项机制,重点……刘越中国足球这么多年没搞好,道德品质低下是主因虎扑02月03日讯对于中国足球多年来发展失败的原因,前国脚刘越在微博撰文分析认为,这与很多从业者道德品质低下有关。刘越写道:近期总结国家队输球的话题很多,大部分都挺……杨玉环重做失败,官方紧急调整,新皮肤春节上线,只能提升热度爱生活,爱游戏,大家好,我是阿呆。期待大家的关注,我会在这里分享更多有趣的最新资讯。前言:在最近一段时间里,王者荣耀重做了好几个英雄,有的是技能全面升级,有的只是调整了部……总台记者看世界丨走进巴西首都巴西利亚感受世界文化遗产名城的永总台记者看世界!大家好,我是总台驻拉美记者曹璇!不久前,我和同事们来到巴西首都巴西利亚进行采访,我们感受到巴西利亚是这样一座充满独特魅力的文化名城。巴西利亚(图片来源:C……
首届中国大众网球联赛大区联赛贵阳站林城开幕!北京时间3月25日上午,首届中国大众网球联赛大区联赛贵阳站开赛仪式在贵阳市金阳网球中心隆重举行。贵州省网球协会荣誉主席(贵州省人大原副主任)李岷,贵州省体育局党委委员、副……余承东华为手机产能回归,供货将恢复正常众所周知,由于两年前的一纸禁令,华为手机供应链受到非常大的影响,也因此华为手机不仅产能大幅降低,就连新品的发布周期也相应延长,不少用户在无奈之下选择了其他品牌,不过这样的现象在……房企前9月销售Top10央国企排名明显上升,民企龙湖集团升至红星资本局消息,龙湖集团(00960。HK)公布2022年9月份销售快报。当月,公司地产开发业务实现销售额192。2亿元,其中权益销售额114。9亿元。截至目前,三季度楼……春困夏困秋困冬困,总之就是打不起精神?最近有没有觉着睡意说来就来?甭管是上班还是上课在家里还是在车里只要坐下来歇会儿不自觉地就打起了瞌睡阿远可没有在您身边装摄像头您这是犯春困啦!……寒冷又黑暗的冥界被发现,在里面待一年等于地球的248年我们居住的地球有温暖、寒冷、光明、黑暗,四季分明、昼夜交替的生活环境让我们的认知中也具有这种分界线。因此对于永恒的黑暗、寒冷等,这都是不可接受的,比如两极地区的极昼和极夜可能会……宋小宝难以登录央视春晚,这一点永远输给了小沈阳娱乐圈考古记曾经赵本山的小品就是春晚,每个除夕夜都在电视机前等本山大叔的出场,而他也几乎每年都没有让观众失望,小品王的称号实至名归,那也是小品的最后巅峰时刻。在20……实现高画质自由,讯景RX6650XT海外版OC显卡评测前言RadeonRX6650XT是RX6600XT的官方预超频版本,凭借7nmRDNA2架构优势,GPU的体质更加稳定,让频率轻松达成更高水平,实际的游戏效能也是不同程度……经常饮茶好处多,一文告诉你什么体质喝什么茶,你喝对了吗?现代生活的坏习惯越来越多,比如久坐、玩手机、油腻饮食等,但排名前二的依然是吸烟和喝酒,并且难以戒掉。更糟糕的是,不少人既吸烟,又喝酒,经常相伴的还有喝茶。许多烟民和酒友喜……更多设计模拟图曝光,米兰新体育场将于2027年落成国际米兰和AC米兰透露,他们的新体育场将被称为大教堂,并将在2027年取代传奇的圣西罗球场。两家意大利俱乐部收到了许多设计和提案,但选择了Populous的碳中和愿景的设……中国最长的省,与陕西甘肃吉林等8省相邻,不知属于东北还是西北芒果旅行日记:中国几乎每个省(自治区)都有明确的地理划分,如新疆、甘肃属于西北,云南、四川属于西南,浙江、江苏属于东南,吉林、黑龙江属于东北。但是有一个地方,它跨越了东北和西北……许家印重组球队!郑智选择离开,26岁的韦世豪也要走北京时间3月1日,相信很多球迷都看到了许家印对足球做出的一系列的决定,足协公布限薪令以后,许家印随后也出台了限薪政策,球队只能有3名顶薪球员,税前为60万,并且要求球队1500……再战三年!两年前Reno手机开启ColorOS12内测招募,现在的手机,同价位硬件性能都差不多,这让许多消费者在选购时陷入了困惑:究竟买哪一款才会有更好的体验?事实上,手机厂商们早也意识到了这个问题,因此也纷纷在系统层面发力,增强产品的……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网