import os import cv2 def get_path_list(file): retutn_list = [] if os.path.isdir(file): video_ext = [".mp4", ".avi",".MP4",'.jpg'] for maindir, subdir, file_name_list in os.walk(file): for filename in file_name_list: apath = os.path.join(maindir, filename) ext = os.path.splitext(apath)[1] if ext in video_ext: retutn_list.append(apath) else: retutn_list.append(file) return retutn_list # 获得字典中所有values值(这个值是列表) def get_dict_values(lst): """ 获取列表中所有字典的 values 值(如果值是列表) 参数: lst: 包含字典的列表 返回值: values: 包含所有字典的 values 值的列表(如果值是列表) """ return [value for dictionary in lst for value in dictionary.values() if isinstance(value, list)] # 解析检测后的结果,为检测后的结果排序 def img_cut(frame,bbox): frame_target = frame[int(bbox[1]):int(bbox[3]), int(bbox[0]):int(bbox[2])] return frame_target def img_write(frame,img_file,id_num,save_file): filename = os.path.basename(img_file).split('.')[0] +'_'+ f"person_{id_num}.jpg" person_image_path = os.path.join(save_file, filename) cv2.imwrite(person_image_path, frame) return person_image_path def change_bbox(bbox_person,bbox_hand): ''' 将小图上手的坐标转换到原图大图的坐标 ''' bbox_xmin = bbox_hand[0] + bbox_person[0] bbox_xmax = bbox_hand[2] + bbox_person[0] bbox_ymin = bbox_hand[1] + bbox_person[1] bbox_ymax = bbox_hand[3] + bbox_person[1] bbox = [bbox_xmin,bbox_ymin,bbox_xmax,bbox_ymax] return bbox def select_list(result_list): ''' 筛选列表中的空列表 ''' if result_list: result_only = [] for result in result_list: if result == None: pass else: result_only.append(result) return result_only def para_list_correction(images_size, bbox_list, dertpara): updata_result_list = [] for bbox in bbox_list: updata_bbox = para_correction(images_size, bbox, dertpara) size = [(updata_bbox[2] - updata_bbox[0]), (updata_bbox[3] - updata_bbox[1])] if determine_zero(size): if check_bbox(size): updata_result_list.append(updata_bbox) return updata_result_list def para_correction(images_size, bbox, dertpara): ''' 修正检测后标注框过小的情况,如果有修正参数则使用修正参数,如果没有就按照坐标值扩大两倍 ''' # if dertpara == 0: # pass # else: w = (bbox[2] - bbox[0]) / int(dertpara) h = (bbox[3] - bbox[1]) / int(dertpara) bbox_extand_list_x = [bbox[0] - w, bbox[2] + w] bbox_extand_list_y = [bbox[1] - h, bbox[3] + h] bbox_list_x = contrast( size=images_size[1], bbox_extand_list=bbox_extand_list_x) bbox_list_y = contrast( size=images_size[0], bbox_extand_list=bbox_extand_list_y) bbox_list = [bbox_list_x[0], bbox_list_y[0], bbox_list_x[1], bbox_list_y[1]] return bbox_list def contrast(size, bbox_extand_list): ''' 对比数值是否在这个范围内 ''' # print('bbox_extand_list:',bbox_extand_list) # print('size:',size) bbox_list = [] for x in bbox_extand_list: # print('size:',size) if 0 <= int(x) <= int(size): # print('in:',x,size) bbox_list.append(x) if int(x) > int(size): # print('>:',x,size) bbox_list.append(size) if int(x) < 0: # print('<:',x,size) bbox_list.append(0) # print('bbox_list:',bbox_list) return bbox_list def determine_zero(num_list): for num in num_list: if num == 0: return False return True def check_bbox(size): ratio = size[0]/size[1] if ratio >= 5: return False if ratio <= 1/5: return False else: return True