def add_box(path,boxes): # print(path) tree = ET.ElementTree(file=path) root = tree.getroot() for bndbox in boxes: root=XML.add_tag(root,bndbox) XML.write_xml(tree,path)
def calculate_similarity_on_labels(baseName, checkName): # 1. Match labels global labelNumber scoreSoles = 0 baseXml = os.path.join(xmlDir, baseName) checkXml = os.path.join(xmlDir, checkName) baseObjs = XML.read_objects(baseXml) checkObjs = XML.read_objects(checkXml) for checkObj in checkObjs: if checkObj['name'] in forceFetch: return 0 labelNumber += len(baseObjs) + len(checkObjs) pairs, baseSoles, checkSoles = match_labels(baseObjs, checkObjs) # 2. Calculate similarity of each pair labels which containing roi similarity and location similarity availablePairLenth = len(pairs) # for pair in pairs: # if pair[0]['name'] in ignoreLabels: # availablePairLenth-=1 if availablePairLenth > 0: similarity = pair_similarity(pairs, baseName, checkName) for baseSole in baseSoles: scoreSoles += 1 / weight[baseSole['name']] for checkSole in checkSoles: scoreSoles += 1 / weight[checkSole['name']] print('mother={}+{}+{}'.format(availablePairLenth, scoreSoles, scoreSoles)) similarity = similarity / (availablePairLenth + scoreSoles + scoreSoles) return similarity else: # print(baseSole) # print(checkSole) return 0
def regular_xml(path, filename): global count tree = ET.ElementTree(file=path) root = tree.getroot() XML.chk_label(root, sizeThreshDict) XML.chag_size(root, filename, width, height) XML.chag_filename(root, filename) XML.thresh_size(root, width, sizeThreshDict) XML.write_xml(tree, path)
def regular_xml(path, filename): global count tree = ET.ElementTree(file=path) root = tree.getroot() # XML.chag_label(root,labelDict) # 修改label名称 # root=XML.del_tag(root,names) # 删除指定label root = XML.save_tag(root, names) # 只保留指定label # root=XML.thresh_size(path,root,sizeThresh,sizeThreshNames) XML.write_xml(tree, path)
def add_new_cates(xmlPath,referPath,addCates): addBoxes=XML.read_objects(referPath) tree = ET.ElementTree(file=xmlPath) root = tree.getroot() root=XML.del_tag(root,addCates) # print(addBoxes) for box in addBoxes: if box['name'] in addCates: root=XML.add_tag(root,box) XML.write_xml(tree,xmlPath)
def calculate_similarity_on_labels(baseName, checkName): # 1. Match labels global labelNumber scoreSoles = 0 baseXml = os.path.join(xmlDir, baseName) checkXml = os.path.join(xmlDir, checkName) baseObjs = XML.read_objects_exclude_minsize(baseXml) checkObjs = XML.read_objects_exclude_minsize(checkXml) for checkObj in checkObjs: if checkObj['name'] in forceFetch: return 100 labelNumber += len(baseObjs) + len(checkObjs) similarity = match_labels(baseObjs, checkObjs) return similarity
def regular_xml(newxmlPath, img, newimg): print(newxmlPath, xml, newxml) tree = ET.ElementTree(file=newxmlPath) root = tree.getroot() for obj in root.findall('filename'): print(obj.text) obj.text = newimg for obj in root.findall('path'): print(obj.text) obj.text = obj.text.replace(img, newimg) XML.write_xml(tree, newxmlPath)
def filter_by_cate(allXmls, cateName): filteredXmls = [] viewCount = 0 xmlSum = len(allXmls) for xml in allXmls: xmlPath = os.path.join(xmlDir, xml) objs = XML.read_objects(xmlPath) for obj in objs: objName = obj['name'] if objName == cateName: filteredXmls.append(xml) viewCount += 1 sys.stdout.write('\rFiltering xmls >>{count:.2f}%'.format( count=100 * float(viewCount) / xmlSum)) # sys.stdout.write('\r>> Detecting {name} {count:.2f}%'.format(name=videoPath.split('/')[-1],count=(100*float(i)/total_frames))) sys.stdout.flush() return filteredXmls
def analyze_xml(path): objs = XML.read_objects(path) #print(objs) for obj in objs: name = obj['name'] ''' if name in ['、', 'microbus_foreign\n', 'micorbus_foreign', 'car_pickup', 'truck_foregin', 'suv_foreign']: print(path) print(obj) exit() ''' if name not in count.info: count.addtag(name) else: count.update(name) count.count() xmin = int(obj['xmin']) ymin = int(obj['ymin']) xmax = int(obj['xmax']) ymax = int(obj['ymax']) w = xmax - xmin h = ymax - ymin scale = round(np.sqrt(w * h)) nn = int(scale / 25) + 1 scale = nn * 25 ''' if scale >2000: print(path) print(obj) exit() ''' if scale not in count2.info: count2.addtag(scale) else: count2.update(scale) count2.count()
augNameList=['close','cover','open'] xmlDir=r"/DATACENTER2/yh/detectron/caffe2/train/safebox/faster_voc/11469/xml_1713" tarDir=r"/DATACENTER2/yh/detectron/caffe2/train/safebox/faster_voc/11469/xml_1713_aug" FILES.mkdir(tarDir) allXmls=[x for x in FILES.get_sorted_files(xmlDir) if ".xml" in x] cur=0 bgn=800 #包含 end=1900 #包含 for xml in allXmls: cur+=1 # print(cur) #第cur个文件 if cur>=bgn and cur<=end: xmlPath=xmlDir+'/'+xml tarXmlPath=tarDir+'/'+xml shutil.copy(xmlPath,tarXmlPath) BBOXES=XML.read_object(xmlPath) for augRate_xmin in range(0,5): augValue_xmin=augRate_xmin*0.02 for augRate_xmax in range(0,5): augValue_xmax=augRate_xmax*0.02 for augRate_ymin in range(0,5): augValue_ymin=augRate_ymin*0.02 for augRate_ymax in range(0,5): augValue_ymax=augRate_ymax*0.02 if augRate_xmin+augRate_xmax+augRate_ymin+augRate_ymax!=0: bboxes=[] for i in range(len(BBOXES)): if BBOXES[i][0] in augNameList and check_overlap(BBOXES[i],BBOXES): bboxes.append(trans_box(BBOXES[i],augValue_xmin,augValue_ymin,augValue_xmax,augValue_ymax)) try: add_box(tarXmlPath,bboxes)
if top_labels: #outImg image, labels, xmins, ymins, xmaxs, ymaxs = drawImg( image, top_labels, top_xmin, top_ymin, top_xmax, top_ymax, top_scores) # desImg = os.path.join(outImg,file) # cv2.imwrite(desImg,image) # # outXml if len(labels) > 0: tarXml = os.path.join(tarXmlDir, file.split('.')[0] + '.xml') shutil.copy(referXml, tarXml) tree = ET.ElementTree(file=tarXml) root = tree.getroot() for i in range(len(labels)): # if labels[i] not in ["close","open","cover"]: if 1 > 0: xmin = str(xmins[i]) ymin = str(ymins[i]) xmax = str(xmaxs[i]) ymax = str(ymaxs[i]) # print(labels[i],xmin,ymin,xmax,ymax) obj = { 'name': labels[i], 'xmin': xmin, 'ymin': ymin, 'xmax': xmax, 'ymax': ymax } XML.add_tag(root, obj) XML.write_xml(tree, tarXml)
def changeXmlLabelName(path, labelDict): tree = ET.ElementTree(file=path) root = tree.getroot() root = XML.del_tag(root, ["13"]) root = XML.chag_name(root, labelDict) XML.write_xml(tree, path)
def countObj(path): boxes = XML.read_object(path) return (len(boxes))
def regular_xml(path, changeLabelDict): global count tree = ET.ElementTree(file=path) root = tree.getroot() XML.chag_label(root, changeLabelDict, tag="object") XML.write_xml(tree, path)
labelXmlDir = r'/disk2/hao.yang/project/Qin/data/imgs/isle/modelxml_isle_17117_havered/' # checkedDir='/disk2/hao.yang/project/Qin/data/xmls/checkout/complete' attentionNames = ['red'] confuseNames = ['yellow', 'other', 'blue'] count = 0 allChecked = [] # allChecked=[x for x in FILES.get_sorted_files(checkedDir) if ".xml" in x] allXmls = [ x for x in FILES.get_sorted_files(modelXmlDir) if ".xml" in x and x not in allChecked ] for xml in allXmls: labelXmlPath = os.path.join(labelXmlDir, xml) modelXmlPath = os.path.join(modelXmlDir, xml) if os.path.exists(labelXmlPath): labelObjs = XML.read_objects(labelXmlPath) modelObjs = XML.read_objects(modelXmlPath) newObjs = [] for labelObj in labelObjs: if labelObj['name'] in confuseNames: newObjs.append(fuse(labelObj, modelObjs)) else: newObjs.append(labelObj) tree = ET.ElementTree(file=labelXmlPath) root = tree.getroot() XML.del_all_tag(root) for box in newObjs: root = XML.add_tag(root, box) XML.write_xml(tree, labelXmlPath) # FILES.copy_files_refer_dir(imgDir,'.jpg',badDir,badDir)
# font_label = ImageFont.truetype('/DATACENTER2/yh/resources/heiti.TTF',50) # img_PIL = Image.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB)) # cv2==>PIL # draw = ImageDraw.Draw(img_PIL) # draw.text((xmin,ymax-50),label_name,font_color,font=font_label) # image = cv2.cvtColor(numpy.asarray(img_PIL),cv2.COLOR_RGB2BGR) # PIL==>cv2 # img_PIL = Image.fromarray(cv2.cvtColor(image,cv2.COLOR_BGR2RGB)) # cv2==>PIL # draw = ImageDraw.Draw(img_PIL) # image = cv2.cvtColor(numpy.asarray(img_PIL),cv2.COLOR_RGB2BGR) # PIL==>cv2 return image if __name__ == "__main__": start = time.time() jpgDir = r"/disk2/hao.yang/project/Qin/data/xmls/isle/complete/imgs_overlook_16000_test/" xmlDir = r"/disk2/hao.yang/project/Qin/data/xmls/isle/complete/isle_FMXX_test_16000/" outDir = r"/disk2/hao.yang/project/Qin/data/xmls/isle/complete/imgs_overlook_16000_test_truth/" FILES.rm_mkdir(outDir) allJpgs = FILES.get_files(jpgDir) for jpg in allJpgs: # print(jpg) if '.jpg' in jpg: jpgPath = os.path.join(jpgDir, jpg) xmlPath = os.path.join(xmlDir, jpg.split('.')[0] + '.xml') objs = XML.read_objects(xmlPath) image = cv2.imread(jpgPath) img = drawXml(image, objs) desImg = os.path.join(outDir, jpg) cv2.imwrite(desImg, img) # extraFrames(davDir,mp4Dir)
def checkName(path, name): boxes = XML.read_object(path) for box in boxes: if box[0] == name: return 1 return 0
bigNames = [] # bigNames不可能有漏标,如果漏掉,必然是故意的,所以不算错误 count = 0 allChecked = [x for x in FILES.get_sorted_files(checkedDir) if ".xml" in x] if allChecked: allXmls = [ x for x in FILES.get_sorted_files(labelXmlDir) if ".xml" in x and x not in allChecked ] else: allXmls = [x for x in FILES.get_sorted_files(modelXmlDir) if ".xml" in x] for xml in tqdm(allXmls): labelXmlPath = os.path.join(labelXmlDir, xml) modelXmlPath = os.path.join(modelXmlDir, xml) if os.path.exists(labelXmlPath): modelObjs = XML.read_objects(modelXmlPath) labelObjs = XML.read_objects(labelXmlPath) differ = 0 differ, newObjs = combine(modelObjs, labelObjs) if differ: badXmlPath = os.path.join(badDir, xml) shutil.copy(labelXmlPath, badXmlPath) # tree = ET.ElementTree(file=badXmlPath) # root = tree.getroot() # root=XML.del_all_tag(root) # for boj in newObjs: # root=XML.add_tag(root,boj) # XML.write_xml(tree,badXmlPath) count += differ print(count) # for modelObj in modelObjs: