AI Label
This commit is contained in:
1 parent
897af7ce56
commit
ae53e9eac5
6 files changed
+177
-65
No files matched your search
@@ -107,12 +107,12 @@ class DetFineVid():
|
|||||||
tm2 = time.time()
|
tm2 = time.time()
|
||||||
if gp.DebugPrint_flag:
|
if gp.DebugPrint_flag:
|
||||||
print("main1 time is ", (tm2 - tm1) * 1000)
|
print("main1 time is ", (tm2 - tm1) * 1000)
|
||||||
# cv2.imshow("AI-ECO", img_show)
|
cv2.imshow("AI-ECO", img_show)
|
||||||
# #cv2.imwrite("../data_MPKFNet/RTSP3/" + "{}.jpg".format(time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))),img_show)
|
#cv2.imwrite("../data_MPKFNet/RTSP3/" + "{}.jpg".format(time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))),img_show)
|
||||||
# if cv2.waitKey(1) & 0xFF == ord('r'):
|
if cv2.waitKey(1) & 0xFF == ord('r'):
|
||||||
# break
|
break
|
||||||
save_path =os.path.join(self.SavePath,"{}.jpg".format(str(num_detection).zfill(6)))
|
# save_path =os.path.join(self.SavePath,"{}.jpg".format(str(num_detection).zfill(6)))
|
||||||
cv2.imwrite(save_path,img_show)
|
# cv2.imwrite(save_path,img_show)
|
||||||
tm3 = time.time()
|
tm3 = time.time()
|
||||||
if gp.DebugPrint_flag:
|
if gp.DebugPrint_flag:
|
||||||
print("main2 time is ", (tm3 - tm2) * 1000)
|
print("main2 time is ", (tm3 - tm2) * 1000)
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import os,argparse,torch
|
||||||
|
from System_I import Detection_Y5
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser1 = argparse.ArgumentParser(description="AILabel")
|
||||||
|
parser1.add_argument("--RawPath", default='/data/DataManagement/Project/001_cuihu/0012_20220517_RTSP/imagesAILabel', type=str,
|
||||||
|
help='RawPath.')
|
||||||
|
parser1.add_argument("--GPU", default="1", type=str,
|
||||||
|
help='GPU.')
|
||||||
|
parser1.add_argument("--thresh", default=0.4, type=float,
|
||||||
|
help='thresh.')
|
||||||
|
parser1.add_argument("--Weight", default="/data/Hatcher/data/Detection_weigth/BJCHKMCH-Bird-1-4/weights/best.pt", type=str,
|
||||||
|
help='Weight.')
|
||||||
|
args = parser1.parse_args()
|
||||||
|
os.environ['CUDA_VISIBLE_DEVICES'] = args.GPU
|
||||||
|
devices = torch.device('cuda:{}'.format(str(int(args.GPU))) if torch.cuda.is_available() else 'cpu')
|
||||||
|
if not os.path.exists(args.RawPath.replace("imagesAILabel","NoResult")):
|
||||||
|
os.makedirs(args.RawPath.replace("imagesAILabel","NoResult"))
|
||||||
|
if not os.path.exists(args.RawPath.replace("imagesAILabel","YesResult")):
|
||||||
|
os.makedirs(args.RawPath.replace("imagesAILabel","YesResult"))
|
||||||
|
if not os.path.exists(args.RawPath.replace("imagesAILabel","LabelXML")):
|
||||||
|
os.makedirs(args.RawPath.replace("imagesAILabel","LabelXML"))
|
||||||
|
Detection = Detection_Y5(device=devices,root=" ", detect_thresh=args.thresh,DetWeight=args.Weight)
|
||||||
|
imagepaths = os.listdir(args.RawPath)
|
||||||
|
for imagepath in tqdm(imagepaths):
|
||||||
|
imagepath = os.path.join(args.RawPath,imagepath)
|
||||||
|
Detection.AIlabel(imagepath)
|
||||||
+68
-8
@@ -7,7 +7,7 @@ import json
|
|||||||
import random
|
import random
|
||||||
from configs.configs import model_head
|
from configs.configs import model_head
|
||||||
|
|
||||||
import os,sys
|
import os,sys,shutil
|
||||||
import torch
|
import torch
|
||||||
from torch import nn
|
from torch import nn
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
@@ -23,6 +23,7 @@ import numpy as np
|
|||||||
from fine.models.LoadModel import MainModel
|
from fine.models.LoadModel import MainModel
|
||||||
from fine.fineConfig import LoadConfig, load_data_transformers
|
from fine.fineConfig import LoadConfig, load_data_transformers
|
||||||
from torch.autograd import Variable
|
from torch.autograd import Variable
|
||||||
|
from creat_xml_fordetection import make_xml
|
||||||
import threading
|
import threading
|
||||||
from common import global_para as gp
|
from common import global_para as gp
|
||||||
import time,statistics
|
import time,statistics
|
||||||
@@ -288,17 +289,14 @@ class Detection_S:
|
|||||||
print("check final is ", (t5 - t4) * 1000)
|
print("check final is ", (t5 - t4) * 1000)
|
||||||
return flag,labels,boxes,scores
|
return flag,labels,boxes,scores
|
||||||
class Detection_Y5:
|
class Detection_Y5:
|
||||||
def __init__(self,device,root):
|
def __init__(self,device,root,detect_thresh,DetWeight):
|
||||||
self.device = device
|
self.device = device
|
||||||
self.root = root
|
self.root = root
|
||||||
self.img_size = 640
|
self.img_size = 640
|
||||||
self.conf_thres = gp.detect_thresh
|
self.conf_thres = detect_thresh
|
||||||
self.iou_thres = 0.4
|
self.iou_thres = 0.4
|
||||||
self.stride = 1
|
self.stride = 1
|
||||||
if gp.red_flag:
|
self.weights = DetWeight
|
||||||
self.weights = '../data_MPKFNet/test/2_r.pt'
|
|
||||||
else:
|
|
||||||
self.weights = gp.DetWeight
|
|
||||||
# self.device = select_device(self.device)
|
# self.device = select_device(self.device)
|
||||||
model = attempt_load(self.weights, map_location=self.device)
|
model = attempt_load(self.weights, map_location=self.device)
|
||||||
model.to(self.device).eval()
|
model.to(self.device).eval()
|
||||||
@@ -320,6 +318,68 @@ class Detection_Y5:
|
|||||||
img = img.unsqueeze(0)
|
img = img.unsqueeze(0)
|
||||||
|
|
||||||
return img0, img
|
return img0, img
|
||||||
|
def AIlabel(self,imagename):
|
||||||
|
with torch.no_grad():
|
||||||
|
image = cv2.imread(imagename)
|
||||||
|
image_or = image
|
||||||
|
img_detect = cv2.resize(image, (1024, 768))
|
||||||
|
t1 = time.time()
|
||||||
|
image_scale,image = self.preprocess(img_detect)
|
||||||
|
t2 = time.time()
|
||||||
|
if gp.DebugPrint_flag:
|
||||||
|
print("Detection data deal is ",(t2-t1)*1000)
|
||||||
|
pred = self.model(image, augment=False)[0]
|
||||||
|
pred = pred.float()
|
||||||
|
pred = non_max_suppression(pred, self.conf_thres, self.iou_thres)
|
||||||
|
t3 = time.time()
|
||||||
|
if gp.DebugPrint_flag:
|
||||||
|
print("Detection inference is ",(t3-t2)*1000)
|
||||||
|
boxes = []
|
||||||
|
scores = []
|
||||||
|
labels = []
|
||||||
|
for det in pred:
|
||||||
|
if det is not None and len(det):
|
||||||
|
det[:, :4] = scale_coords(
|
||||||
|
image.shape[2:], det[:, :4], image_scale.shape).round()
|
||||||
|
|
||||||
|
boxes.append(det[:, :4])
|
||||||
|
scores.append(det[:, 4])
|
||||||
|
labels.append((det[:, -1]))
|
||||||
|
boxes = boxes[0]
|
||||||
|
scores = scores[0]
|
||||||
|
labels = labels[0]
|
||||||
|
t5 = time.time()
|
||||||
|
if gp.DebugPrint_flag:
|
||||||
|
print("Detection get result is ", (t5 - t3) * 1000)
|
||||||
|
if len(labels) > 0:
|
||||||
|
ratio_x = (image_or.shape[1] / 1024.0)
|
||||||
|
ratio_y = (image_or.shape[0] / 768.0)
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(len(boxes)):
|
||||||
|
boxes[i][0]=boxes[i][0] * ratio_x
|
||||||
|
boxes[i][2]=boxes[i][2] * ratio_x
|
||||||
|
boxes[i][1] = boxes[i][1] * ratio_y
|
||||||
|
boxes[i][3] = boxes[i][3] * ratio_y
|
||||||
|
if boxes[i][0]<0:
|
||||||
|
boxes[i][0] = 0
|
||||||
|
if boxes[i][1]<0:
|
||||||
|
boxes[i][1] = 0
|
||||||
|
if boxes[i][2]<0:
|
||||||
|
boxes[i][2] = 0
|
||||||
|
if boxes[i][3]<0:
|
||||||
|
boxes[i][3] = 0
|
||||||
|
# for i in range(len(labels)):
|
||||||
|
# labels[i] = "bird"
|
||||||
|
t4 = time.time()
|
||||||
|
if gp.DebugPrint_flag:
|
||||||
|
print("Detection final is ", (t4 - t3) * 1000)
|
||||||
|
xml_outputpath = imagename.replace("imagesAILabel","LabelXML").replace(".jpg",".xml")
|
||||||
|
make_xml(imagename,image_or.shape[0],image_or.shape[1],boxes,labels,scores,xml_outputpath)
|
||||||
|
shutil.copy(imagename, imagename.replace("imagesAILabel", "YesResult"))
|
||||||
|
else:
|
||||||
|
shutil.copy(imagename,imagename.replace("imagesAILabel","NoResult"))
|
||||||
|
|
||||||
def inference(self,image,imagetime,index,fine_grained):
|
def inference(self,image,imagetime,index,fine_grained):
|
||||||
with torch.no_grad():
|
with torch.no_grad():
|
||||||
rootpath = os.path.join(self.root, imagetime)
|
rootpath = os.path.join(self.root, imagetime)
|
||||||
@@ -1578,7 +1638,7 @@ class Density_mul (threading.Thread):
|
|||||||
gp.destory_image = True
|
gp.destory_image = True
|
||||||
if gp.DebugPrint_flag:
|
if gp.DebugPrint_flag:
|
||||||
print(self.name + self.imagetime," is over")
|
print(self.name + self.imagetime," is over")
|
||||||
class Detecntion_mul (threading.Thread):
|
class Detection_mul (threading.Thread):
|
||||||
def __init__(self, threadID, name,imagetime,DetectionClass,Fine_grainedClass):
|
def __init__(self, threadID, name,imagetime,DetectionClass,Fine_grainedClass):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.threadID = threadID
|
self.threadID = threadID
|
||||||
|
|||||||
@@ -7,28 +7,28 @@
|
|||||||
import os,torch, threading,argparse
|
import os,torch, threading,argparse
|
||||||
class global_para():
|
class global_para():
|
||||||
#check()
|
#check()
|
||||||
parser1 = argparse.ArgumentParser(description="CUI")
|
# parser1 = argparse.ArgumentParser(description="CUI")
|
||||||
parser1.add_argument("video_num", default='/data1/Hatcher/model/project/data_MPKFNet/rawdata/竹林嘴-3月3日候鸟视频.mp4', type=str,
|
# parser1.add_argument("video_num", default='/data1/Hatcher/model/project/data_MPKFNet/rawdata/竹林嘴-3月3日候鸟视频.mp4', type=str,
|
||||||
help='Video name.')
|
# help='Video name.')
|
||||||
parser1.add_argument("GPU", default='2', type=str,
|
# parser1.add_argument("GPU", default='2', type=str,
|
||||||
help='GPU.')
|
# help='GPU.')
|
||||||
parser1.add_argument("--thresh", default=0.4, type=float,
|
# parser1.add_argument("--thresh", default=0.4, type=float,
|
||||||
help='GPU.')
|
# help='GPU.')
|
||||||
parser1.add_argument("--red", default=0, type=int,
|
# parser1.add_argument("--red", default=0, type=int,
|
||||||
help='red.')
|
# help='red.')
|
||||||
parser1.add_argument("--add", default=0, type=str,
|
# parser1.add_argument("--add", default=0, type=str,
|
||||||
help='add.')
|
# help='add.')
|
||||||
|
#
|
||||||
args = parser1.parse_args()
|
# args = parser1.parse_args()
|
||||||
#print(args)
|
#print(args)
|
||||||
root = "/home/gyd/output1"
|
# root = "/home/gyd/output1"
|
||||||
# os.environ['CUDA_VISIBLE_DEVICES'] = '0'
|
# # os.environ['CUDA_VISIBLE_DEVICES'] = '0'
|
||||||
os.environ['CUDA_VISIBLE_DEVICES'] = args.GPU
|
# os.environ['CUDA_VISIBLE_DEVICES'] = args.GPU
|
||||||
devices = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
# devices = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
|
||||||
camera_address = args.add
|
# camera_address = args.add
|
||||||
VideoPath = args.video_num
|
# VideoPath = args.video_num
|
||||||
red_flag = args.red
|
# red_flag = args.red
|
||||||
detect_thresh = args.thresh
|
# detect_thresh = args.thresh
|
||||||
|
|
||||||
#fine_thresh2 = torch.tensor(fine_thresh2).cuda()
|
#fine_thresh2 = torch.tensor(fine_thresh2).cuda()
|
||||||
birdIndex = 99999
|
birdIndex = 99999
|
||||||
@@ -51,7 +51,7 @@ class global_para():
|
|||||||
|
|
||||||
showThresh = 25
|
showThresh = 25
|
||||||
destory_image = False
|
destory_image = False
|
||||||
Camera_device = args.video_num # ÉãÏñÍ·±àºÅ£¬0001
|
# Camera_device = args.video_num # ÉãÏñÍ·±àºÅ£¬0001
|
||||||
image_time = None # µ±Ç°´¦ÀíµÄ30ÊÓÆµµÄ±àºÅ
|
image_time = None # µ±Ç°´¦ÀíµÄ30ÊÓÆµµÄ±àºÅ
|
||||||
ImgDealQueue = [] # 750Ö¡ÊÓÆµ£¬»º´æ¿Õ¼ä
|
ImgDealQueue = [] # 750Ö¡ÊÓÆµ£¬»º´æ¿Õ¼ä
|
||||||
img_show = None
|
img_show = None
|
||||||
@@ -80,28 +80,28 @@ class global_para():
|
|||||||
|
|
||||||
# DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/exp21/weights/best.pt"
|
# DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/exp21/weights/best.pt"
|
||||||
# FineWeight = "/data/Hatcher/data/weigth/areaproject/resnet50-JXPYH-Bird-3-4-20220429/_42911_PYH-3/best.pth"
|
# FineWeight = "/data/Hatcher/data/weigth/areaproject/resnet50-JXPYH-Bird-3-4-20220429/_42911_PYH-3/best.pth"
|
||||||
DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/KunMingCuiHu-Fish2/weights/best.pt"
|
#DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/KunMingCuiHu-Fish2/weights/best.pt"
|
||||||
FineWeight = "/data/Hatcher/data/weigth/areaproject/resnet50-KMDC-Fish-5-1-20220505/_5510_DianChiFish-4/best.pth"
|
#FineWeight = "/data/Hatcher/data/weigth/areaproject/resnet50-KMDC-Fish-5-1-20220505/_5510_DianChiFish-4/best.pth"
|
||||||
# DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/BeijingCuiHu-Bird26/weights/best.pt"
|
DetWeight = "/data1/Hatcher/model/Detection/yolov5/runs/train/BeijingCuiHu-Bird26/weights/best.pt"
|
||||||
# FineWeight = "/data/Hatcher/data/weigth/areaproject/resnet50-cui90_1model0.7/_42111_CUI-94-1/best.pth"
|
FineWeight = "/data/Hatcher/data/weigth/areaproject/VIT-BJCH_Bird_94_DDP/_5914_CUI-94-1/best.pth"
|
||||||
#BHG_chineseName = ["kong", '白鹤', '白头鹤','白枕鹤']
|
#BHG_chineseName = ["kong", '白鹤', '白头鹤','白枕鹤']
|
||||||
BHG_chineseName = ["kong","鲫鱼","麦穗鱼","鳑鲏","鲈鱼"]
|
#BHG_chineseName = ["kong","鲫鱼","麦穗鱼","鳑鲏","鲈鱼"]
|
||||||
|
|
||||||
# BHG_chineseName = ['Kong', '白额雁', '白骨顶', '苍鹭', '苍鹭', '白秋沙鸭', '白腰草鹬', '斑头雁', '斑嘴鸭', '苍鹭', '赤膀鸭', '赤颈鸭', '苍鹭', '大麻鳽',
|
BHG_chineseName = ['Kong', '白额雁', '白骨顶', '苍鹭', '苍鹭', '白秋沙鸭', '白腰草鹬', '斑头雁', '斑嘴鸭', '苍鹭', '赤膀鸭', '赤颈鸭', '苍鹭', '大麻鳽',
|
||||||
# '豆雁', '反嘴鹬', '凤头鸊鷉', '凤头麦鸡', '凤头潜鸭', '黑鹳', '黑水鸡', '红嘴鸥', '鸿雁', '灰鹤', '灰雁', '绿翅鸭', '绿头鸭', '琵嘴鸭',
|
'豆雁', '反嘴鹬', '凤头鸊鷉', '凤头麦鸡', '凤头潜鸭', '黑鹳', '黑水鸡', '红嘴鸥', '鸿雁', '灰鹤', '灰雁', '绿翅鸭', '绿头鸭', '琵嘴鸭',
|
||||||
# '普通鸬鹚', '普通秋沙鸭', '翘鼻麻鸭', '鹊鸭', '扇尾沙锥', '小白额雁', '小天鹅', '针尾鸭', '苍鹭', '暗绿绣眼鸟', '八哥', '白腹鹞', '白鹡鸰',
|
'普通鸬鹚', '普通秋沙鸭', '翘鼻麻鸭', '鹊鸭', '扇尾沙锥', '小白额雁', '小天鹅', '针尾鸭', '苍鹭', '暗绿绣眼鸟', '八哥', '白腹鹞', '白鹡鸰',
|
||||||
# '白眼潜鸭', '草鹭', '池鹭', '戴胜', '黑翅长脚鹬', '黑鸢', '红隼', '花脸鸭', '环颈雉', '灰头绿啄木鸟', '灰头麦鸡', '矶鹬', '栗苇鳽',
|
'白眼潜鸭', '草鹭', '池鹭', '戴胜', '黑翅长脚鹬', '黑鸢', '红隼', '花脸鸭', '环颈雉', '灰头绿啄木鸟', '灰头麦鸡', '矶鹬', '栗苇鳽',
|
||||||
# '罗纹鸭', '牛背鹭', '普通翠鸟', '雀鹰', '喜鹊', '苍鹭', '鸳鸯', '棕背伯劳', '红胸秋沙鸭', '普通燕鸥', '小白额燕鸥', '丘鹬', '凤头蜂鹰',
|
'罗纹鸭', '牛背鹭', '普通翠鸟', '雀鹰', '喜鹊', '苍鹭', '鸳鸯', '棕背伯劳', '红胸秋沙鸭', '普通燕鸥', '小白额燕鸥', '丘鹬', '凤头蜂鹰',
|
||||||
# '大天鹅', '大鸨', '小田鸡', '山斑鸠', '帆背潜鸭', '日本松雀鹰', '普通鵟', '松雀鹰', '毛脚鵟', '灰斑鸠', '白头鹞', '白尾鹞', '白眉鸭',
|
'大天鹅', '大鸨', '小田鸡', '山斑鸠', '帆背潜鸭', '日本松雀鹰', '普通鵟', '松雀鹰', '毛脚鵟', '灰斑鸠', '白头鹞', '白尾鹞', '白眉鸭',
|
||||||
# '白鹈鹕', '红头潜鸭', '苍鹰', '蒙古银鸥', '西方秧鸡', '赤嘴潜鸭', '阔嘴鹬', '雕鸮', '鹌鹑', '鹗', '黄苇鳽', '黑颈鹤', '小䴙䴘', '赤麻鸭']
|
'白鹈鹕', '红头潜鸭', '苍鹰', '蒙古银鸥', '西方秧鸡', '赤嘴潜鸭', '阔嘴鹬', '雕鸮', '鹌鹑', '鹗', '黄苇鳽', '黑颈鹤', '小䴙䴘', '赤麻鸭']
|
||||||
# BHG_chineseName =["kong","绿头鸭","斑嘴鸭","灰雁","鸿雁","kong","小鷿鷈"]
|
# BHG_chineseName =["kong","绿头鸭","斑嘴鸭","灰雁","鸿雁","kong","小鷿鷈"]
|
||||||
spiec_number_old = [0 for i in range(len(BHG_chineseName))]
|
spiec_number_old = [0 for i in range(len(BHG_chineseName))]
|
||||||
FineClassNum = 5
|
FineClassNum = 94
|
||||||
color_show = (255, 255, 255)
|
color_show = (255, 255, 255)
|
||||||
color_box = (255, 0, 0)
|
color_box = (255, 0, 0)
|
||||||
NoneLabel = "鱼"#"鹤类" # "鱼"
|
NoneLabel = None#"鹤类" # "鱼"
|
||||||
fine_thresh1 = 6000
|
fine_thresh1 = 10000
|
||||||
fine_thresh2 = 6000
|
fine_thresh2 = 10000
|
||||||
ShowAllNumFlag = True
|
ShowAllNumFlag = True
|
||||||
fontScale = 1
|
fontScale = 1
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ def make_xml(filename,size_x,size_y,boxes,labels,scores,savename):
|
|||||||
xmax = int(boxes[i][2])
|
xmax = int(boxes[i][2])
|
||||||
ymax = int(boxes[i][3])
|
ymax = int(boxes[i][3])
|
||||||
score = int(scores[i]*1000)
|
score = int(scores[i]*1000)
|
||||||
anno.add_pic_attr(str(labels[i]), xmin, ymin, xmax, ymax,score)
|
anno.add_pic_attr("bird", xmin, ymin, xmax, ymax,score)
|
||||||
anno.savefile(savename)
|
anno.savefile(savename)
|
||||||
def make_xml_iccv(filename,size_x,size_y,boxes,savename):
|
def make_xml_iccv(filename,size_x,size_y,boxes,savename):
|
||||||
anno = GEN_Annotations(filename)
|
anno = GEN_Annotations(filename)
|
||||||
|
|||||||
@@ -3,16 +3,15 @@ import cv2
|
|||||||
import random
|
import random
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
path_unit= "/data1/zwq/model/data_MPKFNet/data/ConstructionSite/Hatcher_One"
|
import argparse,random
|
||||||
path_raw = "/data1/zwq/model/data_MPKFNet/data/ConstructionSite/NO"
|
from tqdm import tqdm
|
||||||
result_path = "/data1/zwq/model/data_MPKFNet/data/ConstructionSite/result"
|
|
||||||
|
|
||||||
class GEN_Annotations:
|
class GEN_Annotations:
|
||||||
def __init__(self, filename):
|
def __init__(self, filename):
|
||||||
self.root = etree.Element("annotation")
|
self.root = etree.Element("annotation")
|
||||||
|
|
||||||
child1 = etree.SubElement(self.root, "folder")
|
child1 = etree.SubElement(self.root, "folder")
|
||||||
child1.text = "VOC2007"
|
child1.text = "CDB"
|
||||||
|
|
||||||
child2 = etree.SubElement(self.root, "filename")
|
child2 = etree.SubElement(self.root, "filename")
|
||||||
child2.text = filename
|
child2.text = filename
|
||||||
@@ -20,7 +19,7 @@ class GEN_Annotations:
|
|||||||
child3 = etree.SubElement(self.root, "source")
|
child3 = etree.SubElement(self.root, "source")
|
||||||
|
|
||||||
child4 = etree.SubElement(child3, "annotation")
|
child4 = etree.SubElement(child3, "annotation")
|
||||||
child4.text = "PASCAL VOC2007"
|
child4.text = "CDB"
|
||||||
child5 = etree.SubElement(child3, "database")
|
child5 = etree.SubElement(child3, "database")
|
||||||
child5.text = "Unknown"
|
child5.text = "Unknown"
|
||||||
|
|
||||||
@@ -57,16 +56,21 @@ class GEN_Annotations:
|
|||||||
ymaxn.text = str(ymax)
|
ymaxn.text = str(ymax)
|
||||||
|
|
||||||
|
|
||||||
def negative_samples():
|
def negative_samples(path_unit,path_raw):
|
||||||
unit_list = os.listdir(path_unit)
|
unit_list = os.listdir(path_unit)
|
||||||
|
random.shuffle(unit_list)
|
||||||
|
if len(unit_list) < 1000:
|
||||||
|
unit_list = unit_list
|
||||||
|
else:
|
||||||
|
unit_list = unit_list[:1000]
|
||||||
unit_img_list = []
|
unit_img_list = []
|
||||||
for unit_img in unit_list:
|
for unit_img in unit_list:
|
||||||
img1 = Image.open(os.path.join(path_unit,unit_img))
|
img1 = Image.open(os.path.join(path_unit,unit_img))
|
||||||
unit_img_list.append(img1)
|
unit_img_list.append(img1)
|
||||||
raw_list = os.listdir(path_raw)
|
raw_list = os.listdir(path_raw)
|
||||||
for raw_path in raw_list:
|
for raw_path in tqdm(raw_list):
|
||||||
print(raw_list)
|
# print(raw_list)
|
||||||
print("\n")
|
# print("\n")
|
||||||
raw_img = Image.open(os.path.join(path_raw,raw_path))
|
raw_img = Image.open(os.path.join(path_raw,raw_path))
|
||||||
unit_num = random.randint(0,10)
|
unit_num = random.randint(0,10)
|
||||||
x_left = random.randint(0,raw_img.size[0]-unit_img_list[unit_num].size[0])
|
x_left = random.randint(0,raw_img.size[0]-unit_img_list[unit_num].size[0])
|
||||||
@@ -74,15 +78,33 @@ def negative_samples():
|
|||||||
x_right = x_left+unit_img_list[unit_num].size[0]
|
x_right = x_left+unit_img_list[unit_num].size[0]
|
||||||
y_right = y_left+unit_img_list[unit_num].size[1]
|
y_right = y_left+unit_img_list[unit_num].size[1]
|
||||||
raw_img.paste(unit_img_list[unit_num],(x_left,y_left,x_right,y_right))
|
raw_img.paste(unit_img_list[unit_num],(x_left,y_left,x_right,y_right))
|
||||||
raw_img.save(os.path.join(path_raw,raw_path).replace("/NO/","/result/Images/"))
|
raw_img.save(os.path.join(path_raw,raw_path).replace("/NOObject/","/result/Images/"))
|
||||||
filename = raw_path
|
filename = raw_path
|
||||||
anno = GEN_Annotations(filename)
|
anno = GEN_Annotations(filename)
|
||||||
anno.set_size(raw_img.size[0], raw_img.size[1], 3)
|
anno.set_size(raw_img.size[0], raw_img.size[1], 3)
|
||||||
anno.add_pic_attr("person", x_left, y_left, x_right, y_right)
|
anno.add_pic_attr("person", x_left, y_left, x_right, y_right)
|
||||||
anno.savefile(os.path.join(path_raw,raw_path).replace("/NO/","/result/Ground_truth/").replace(".jpg",".xml"))
|
anno.savefile(os.path.join(path_raw,raw_path).replace("/NOObject/","/result/Ground_truth/").replace(".jpg",".xml"))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
parser1 = argparse.ArgumentParser(description="CUI")
|
||||||
|
parser1.add_argument("path_unit", default='/data/DataManagement/Project/001_cuihu/CAS_CuihuBird/CMB_Cuihubird/FinalData/data',
|
||||||
|
type=str,
|
||||||
|
help='path to object unit')
|
||||||
|
parser1.add_argument("path_raw", default='/data/DataManagement/Project/001_cuihu/0009_20220507_RTSP/CDB_CuihuNobird/NOObject', type=str,
|
||||||
|
help='path to image to deal with')
|
||||||
|
|
||||||
negative_samples()
|
|
||||||
|
args = parser1.parse_args()
|
||||||
|
path_unit = args.path_unit
|
||||||
|
path_raw = args.path_raw
|
||||||
|
save_path1 = path_raw.replace("NOObject","result/Images/")
|
||||||
|
print(save_path1)
|
||||||
|
if not os.path.exists(save_path1):
|
||||||
|
os.makedirs(save_path1)
|
||||||
|
save_path2 = path_raw.replace("NOObject","result/Ground_truth/")
|
||||||
|
print(save_path2)
|
||||||
|
if not os.path.exists(save_path2):
|
||||||
|
os.makedirs(save_path2)
|
||||||
|
negative_samples(path_unit,path_raw)
|
||||||
Reference in new issue
Block a user