def main(): flg_det = PdxDet(model_path="../model/best/flg_det/", bs=8) for vid_name in os.listdir(args.input): print(vid_name) frame_data = [] names = [] name = vid_name.split(".")[0] video = Stream( osp.join(args.input, vid_name), osp.join(args.ann, name + ".txt"), itv_sparse=0, itv_dense=5, ) for frame_idx, img in tqdm(video): # print(idx) # # 第一种方式推理类负责组batch frames, idxs, bbs = flg_det.add(img, frame_idx) # print(bbs) for f, idx, bb in zip(frames, idxs, bbs): if len(bb) != 0: bb = bb[0] # 这个网络最多检出一个起落架 save_path = osp.join(args.output, "{}-{}.png".format(name, idx)) try: cv2.imwrite(save_path, crop(f, bb.square(256))) except: pass
def main(): flg_det = PdxDet(model_path="../model/best/flg_det/", bs=args.bs) for vid_name in os.listdir(args.input): print(vid_name) name = vid_name.split(".")[0] video = Stream( osp.join(args.input, vid_name), # osp.join(args.ann, name + ".txt"), itv_sparse=2, # itv_dense=2, ) os.mkdir(osp.join(args.output, "p" + vid_name)) for frame_idx, img in tqdm(video, miniters=args.bs): frames, idxs, bbs = flg_det.add(img, frame_idx) for f, idx, bb in zip(frames, idxs, bbs): # print(bb) if len(bb) != 0: bb = bb[0] # 这个网络最多检出一个起落架 save_path = osp.join( args.output, "p" + vid_name, "{}-{}.png".format(name, idx), ) try: cv2.imwrite(save_path, crop(f, bb.square(256))) except: pass
def main(): # 1. 定义模型对象 flg_det = PdxDet(model_path="../model/best/flg_det/", bs=4) person_det = PdxDet(model_path="../model/best/person_det_yolov3", bs=8, autoflush=False) for vid_name in os.listdir(args.input): print(vid_name) os.mkdir(osp.join(args.output, vid_name)) video = Stream(osp.join(args.input, vid_name), osp.join(args.time, os.listdir(args.time)[0])) # TODO: 研究tqdm需要什么方法显示总数 for fidx, img in video: # 检测出一个batch的起落架 frames, fidxs, flgs_batch = flg_det.add(img, fidx) for frame, frame_idx, flgs in zip(frames, fidxs, flgs_batch): # 对这些起落架中的每一个 if len(flgs) != 0: flg = flgs[0] person_det.add(crop(frame, flg.square(256)), [flg, frame_idx]) # 添加到检测人的任务list中 if len(flgs_batch) != 0: print("Gears detected: ", flgs_batch) if len(person_det.imgs) >= person_det.bs: count = 0 r = person_det.flush() # 进行人像检测 print("People detected: ", r[2]) for gear_square, info, people in zip(r[0], r[1], r[2]): # 对一个batch中的每一张,每一张可能有多个人 f = frames[count] flg = info[0] fid = info[1] count += 1 for pid, person in enumerate(people): dbb(f, flg.square(256).transpose(person), "G") patch = crop(f, flg.square(256).transpose(person).square(128)) if patch.shape == (128, 128, 3): cv2.imwrite( osp.join(args.output, vid_name, "{}-{}.png".format(pid, str(fid))), patch ) # cv2.imshow("img", crop(gear_square, person)) dbb(f, flg, "R") dpoint(f, flg.center(), "R") dbb(f, flg.square(256), "B") # cv2.imshow("img", f) cv2.waitKey(2)
import os import os.path as osp from tqdm import tqdm import cv2 from util.util import Stream vid_path = "/home/2t/plane/视频划分/train" img_path = "/home/aistudio/plane/temp" for vid_name in tqdm(os.listdir(vid_path)): video = Stream( osp.join(vid_path, vid_name), itv_dense=12, ) vid_name = osp.splitext(vid_name)[0] print(vid_name) for idx, frame in video: cv2.imwrite(osp.join(img_path, f"{vid_name}-{str(idx).zfill(5)}.png"), frame) # input("here")
def main(): # 1. 定义模型对象 flg_det = PdxDet(model_path="../model/best/flg_det/", bs=2) person_det = PdxDet(model_path="../model/best/person_det_yolov3", bs=2, autoflush=False) person_clas = HumanClas(mode="predict") for vid_name in os.listdir(args.input): # print(vid_name) #os.mkdir(osp.join(args.output, vid_name)) video = Stream( osp.join(args.input, vid_name), osp.join(args.time, os.listdir(args.time)[0]), itv_sparse=3, itv_dense=3, ) mem_len = 8 history = [False for _ in range(mem_len)] thresh = 0.5 # TODO: 研究tqdm需要什么方法显示总数 #res_f = open(osp.join("H:/W_S/Graduation_Project/plane/time-out", vid_name.rstrip(".mp4") + ".txt"), "w") for fidx, img in video: # 检测出一个batch的起落架 frames, fidxs, flgs_batch = flg_det.add(img, fidx) for frame, frame_idx, flgs in zip(frames, fidxs, flgs_batch): # 对这些起落架中的每一个 if len(flgs) != 0: flg = flgs[0] person_det.add(crop(frame, flg.square(256)), [flg, frame_idx, frame]) # 添加到检测人的任务list中 # print("Gears detected: ", flgs_batch) if len(person_det.imgs) >= person_det.bs: r = person_det.flush() # 进行人像检测 # print("People detected: ", r[2]) for gear_square, info, people in zip( r[0], r[1], r[2]): # 对一个batch中的每一张,每一张可能有多个人 flg = info[0] fid = info[1] f = info[2] # TODO: 一个batch推理 has_positive = False for pid, person in enumerate(people): patch = crop( f, flg.square(256).transpose(person).square(64)) res = person_clas.predict(patch) if res: has_positive = True # dbb(f, flg.square(256).transpose(person).region([1.8, 1.8]), "G" if res else "R") dpoint(f, flg.square(256).transpose(person).center(), "G" if res else "R") for idx in range(mem_len - 1, 0, -1): history[idx] = history[idx - 1] history[0] = has_positive prediction = "Positive" if np.sum( history) > mem_len * thresh else "Negative" print(has_positive) print(history, np.sum(history), prediction) #print(fid, has_positive, prediction, np.sum(history), file=res_f) #res_f.flush() dbb(f, flg, "B") dpoint(f, flg.center(), "B") dbb(f, flg.square(256), "B") cv2.imshow("img", f) cv2.waitKey() # cv2.imwrite( # osp.join(args.output, vid_name, str(fid).zfill(6) + ".png"), # crop(f, flg.square(300)), # ) #res_f.close() shutil.move(osp.join(args.output, vid_name), osp.join(args.output, "finish"))
########################################################### # Stream Test ########################################################### from util.util import Stream import cv2 vid = Stream( "/home/aistudio/plane/vid-split/train/15251-上轮挡.mp4", "/home/aistudio/plane/时间标注/train/15251-上轮挡.txt", itv_sparse=0, itv_dense=5, ) for idx, frame in vid: cv2.imshow("img", frame) cv2.waitKey()
import os import os.path as osp from tqdm import tqdm import cv2 from util.util import xml2bb, Stream, crop vid_dir = "/home/aistudio/plane/视频分类/1920/n/" bb_dir = "/home/aistudio/plane/视频分类/起落架bb/" out_dir = "/home/aistudio/plane/视频分类/256-frame/n/" for name in tqdm(os.listdir(vid_dir)): name = name.split(".")[0] bb_path = osp.join(bb_dir, name + ".xml") if os.path.exists(bb_path): print(name) bb = xml2bb(bb_path, "gear")[0] vid = cv2.VideoCapture(osp.join(vid_dir, name + ".mp4")) stream = Stream(osp.join(vid_dir, name + ".mp4"), itv_sparse=2) os.mkdir(osp.join(out_dir, name)) for idx, img in stream: out_path = osp.join(out_dir, name, "{}-{}.png".format(name, str(idx).zfill(6))) img = crop(img, bb.square(256), do_pad=True) cv2.imwrite(out_path, img)
import numpy as np import cv2 from util.util import Stream video = Stream("/home/2t/plane/视频划分/long/Q216022021.3.20", itv_sparse=1500) print(video.fps) prev_diff = 0 print(video.shape) prev_frame = np.zeros(video.shape) f = open("stamp.txt", "w") for idx, curr_frame in video: curr_diff = np.abs(curr_frame - prev_frame).sum() print(idx, prev_diff, curr_diff) if curr_diff > 1000 * prev_diff: print(int(idx / 25), file=f, end=" ") print("+++++++++++++++ Starting new video") f.flush() prev_diff = curr_diff cv2.imshow("img", curr_frame) cv2.waitKey(2)