def pre_process_images(list_folders_scores, recalculate): print('Start pre_processing images') # Loading instances instance_pose = ClassOpenPose() for folder, min_score in list_folders_scores: for file in os.listdir(folder): full_path = os.path.join(folder, file) extension = ClassUtils.get_filename_extension(full_path) if extension != '.jpg': print('Ignoring file {0}'.format(full_path)) continue file_no_ext = ClassUtils.get_filename_no_extension(full_path) arr_file_name = os.path.join(folder, '{0}.json'.format(file_no_ext)) # If image recalculation if not recalculate: if os.path.isfile(arr_file_name): print('File already processed {0}'.format(full_path)) continue # Processing file print('Processing file {0}'.format(full_path)) image = cv2.imread(full_path) arr, img_draw = instance_pose.recognize_image_tuple(image) arr_pass = list() # Checking vector integrity for all elements # Verify there is at least one arm and one leg for elem in arr: if ClassUtils.check_vector_integrity_part(elem, min_score): arr_pass.append(elem) # If there is more than one person with vector integrity if len(arr_pass) != 1: for elem in arr_pass: pt1, pt2 = ClassUtils.get_rectangle_bounds(elem, ClassUtils.MIN_POSE_SCORE) cv2.rectangle(img_draw, pt1, pt2, (0, 0, 255), 3) cv2.namedWindow('main_window') cv2.imshow('main_window', img_draw) print(arr) print(arr_pass) cv2.waitKey(0) cv2.destroyAllWindows() raise Exception('Invalid len: {0} file {1}'.format(len(arr_pass), full_path)) person_arr = arr_pass[0] arr_str = json.dumps(person_arr.tolist()) with open(arr_file_name, 'w') as text_file: text_file.write(arr_str) print('Done!')
def main(): print('Initializing main function') # Initializing instances instance_pose = ClassOpenPose() # Withdrawing Tk window Tk().withdraw() # Loading folder from element in list init_dir = '/home/mauricio/Pictures/Poses' options = {'initialdir': init_dir} dir_name = filedialog.askdirectory(**options) if not dir_name: print('Directory not selected') else: print('Selected dir: {0}'.format(dir_name)) list_files = os.listdir(dir_name) cv2.namedWindow('main_window', cv2.WND_PROP_AUTOSIZE) index = 0 print('Press arrows to move, ESC to exit') while True: file = list_files[index] full_path = os.path.join(dir_name, file) print('Loading image {0}'.format(full_path)) image = cv2.imread(full_path) arr, pro_img = instance_pose.recognize_image_tuple(image) cv2.imshow('main_window', pro_img) key = cv2.waitKey(0) if key == 52: # Left arrow index -= 1 if index < 0: index = 0 elif key == 54: # Right arrow index += 1 if index == len(list_files): index = len(list_files) - 1 elif key == 27: # Esc break print('Done!')
def process_single(): print('Initializing process_single') # Loading instances instance_pose = ClassOpenPose() # Opening filename init_dir = '/home/mauricio/Pictures' options = {'initialdir': init_dir} filename = askopenfilename(**options) if not filename: filename = '/home/mauricio/Pictures/Poses/left_walk/636550788328999936_420.jpg' # Reading video extension extension = os.path.splitext(filename)[1] if extension != '.jpg' and extension != '.jpeg': raise Exception('Extension is not jpg or jpeg') # Opening filename image = cv2.imread(filename) # Loading image and array arr, processed_img = instance_pose.recognize_image_tuple(image) # Showing image to generate elements cv2.namedWindow('main_window', cv2.WND_PROP_AUTOSIZE) arr_pass = list() min_score = 0.05 # Checking vector integrity for all elements # Verify there is at least one arm and one leg for elem in arr: if ClassUtils.check_vector_integrity_pos(elem, min_score): arr_pass.append(elem) if len(arr_pass) != 1: print('There is more than one person in the image') cv2.imshow('main_window', processed_img) cv2.waitKey(0) else: person_array = arr_pass[0] print('Person array: {0}'.format(person_array)) generate_descriptors(person_array, image, processed_img, min_score)
def main(): print('Initializing main function') print('Initializing instance') instance = ClassOpenPose() print('Reading image') image = cv2.imread('/home/mauricio/Pictures/2_2.jpg') image2 = cv2.imread('/home/mauricio/Pictures/430.jpg') print('Recognizing image 1') arr, img_open = instance.recognize_image_tuple(image) print(arr) cv2.namedWindow('main_window', cv2.WINDOW_AUTOSIZE) cv2.imshow('main_window', img_open) cv2.waitKey() print('Recognizing image 2') arr = instance.recognize_image(image2) print(arr) print('Done generating elements!')
def main(): print('Generating angle descriptors') # Initializing instances instance_pose = ClassOpenPose() # Reading pose from dir path image = '/home/mauricio/Pictures/walk.jpg' if not os.path.exists(image): print('The path {0} does not exists'.format(image)) else: img_cv = cv2.imread(image) # Forwarding image arr, output_img = instance_pose.recognize_image_tuple(img_cv) person_array = arr[0] # Generating other descriptors # Assume image is OK shoulder_dis = ClassUtils.get_euclidean_distance_pt(person_array[1], person_array[2]) + \ ClassUtils.get_euclidean_distance_pt(person_array[1], person_array[5]) torso_dis = ClassUtils.get_euclidean_distance_pt(person_array[1], person_array[8]) # In total, we have a vector with 8 angles # We need to extract the characteristics of the 8 angles relation = shoulder_dis / torso_dis print(relation) cv2.namedWindow('main_window', cv2.WND_PROP_AUTOSIZE) cv2.imshow('main_window', output_img) cv2.waitKey(0) cv2.destroyAllWindows() print('Done!')
def main(): print('Initializing main function') Tk().withdraw() # filename1 = '/home/mauricio/Pictures/Poses/temp/636550787632290048_419.jpg' # filename2 = '/home/mauricio/Pictures/Poses/walk_front/636550801813440000_424.jpg' filename1 = '/home/mauricio/Pictures/Poses/bend_left/636453039344460032_1.jpg' filename2 = '/home/mauricio/Pictures/Poses/left_walk/636550795366450048_420.jpg' print('Select first file') init_dir = '/home/mauricio/Pictures/Poses' options = {'initialdir': init_dir} filename1_tmp = askopenfilename(**options) if filename1_tmp: filename1 = filename1_tmp print('File selected: {0}'.format(filename1)) print('Select second file') filename2_tmp = askopenfilename(**options) if filename2_tmp: filename2 = filename2_tmp print('File selected: {0}'.format(filename2)) img1 = cv2.imread(filename1) img2 = cv2.imread(filename2) instance_pose = ClassOpenPose() vectors1, img_draw1 = instance_pose.recognize_image_tuple(img1) vectors2, img_draw2 = instance_pose.recognize_image_tuple(img2) if len(vectors1) != 1: raise Exception('Invalid len for vector 1') if len(vectors2) != 1: raise Exception('Invalid len for vector 2') person_vector1 = vectors1[0] person_vector2 = vectors2[0] min_percent = 0.05 if not ClassUtils.check_vector_integrity_pos(person_vector1, min_percent): raise Exception('Invalid integrity for vector 1') if not ClassUtils.check_vector_integrity_pos(person_vector2, min_percent): raise Exception('Invalid integrity for vector 2') colors1 = ClassDescriptors.process_colors(vectors1, min_percent, img1, decode_img=False) colors2 = ClassDescriptors.process_colors(vectors2, min_percent, img2, decode_img=False) upper1 = colors1[0][0] lower1 = colors1[1][0] color_diff1 = ClassUtils.get_color_diff_rgb(upper1, lower1) upper2 = colors2[0][0] lower2 = colors2[1][0] color_diff2 = ClassUtils.get_color_diff_rgb(upper2, lower2) diff_upper = ClassUtils.get_color_diff_rgb(upper1, upper2) diff_lower = ClassUtils.get_color_diff_rgb(lower1, lower2) diff_diff = math.fabs(color_diff1 - color_diff2) print('Diff upper: {0}'.format(diff_upper)) print('Diff lower: {0}'.format(diff_lower)) print('Diff diffs: {0}'.format(diff_diff)) cv2.namedWindow('main_window', cv2.WND_PROP_AUTOSIZE) cv2.imshow('main_window', np.hstack((img_draw1, img_draw2))) cv2.waitKey(0) cv2.destroyAllWindows() print('Done!')
def main(): print('Initializing main function') print('Folder selection') folder_images = '/home/mauricio/PosesProcessed/folder_images' folder_images_draw = '/home/mauricio/PosesProcessed/folder_images_draw' Tk().withdraw() # Getting options init_dir = '/home/mauricio/Videos/Oviedo' options = {'initialdir': init_dir} dir_name = askdirectory(**options) if not dir_name: raise Exception('Directory not selected') # Create directory if does not exists if not os.path.isdir(folder_images): os.makedirs(folder_images) # Create directory if does not exists if not os.path.isdir(folder_images_draw): os.makedirs(folder_images_draw) # Initializing openpose instance instance_pose = ClassOpenPose() for root, subdirs, files in os.walk(dir_name): for file in files: full_path = os.path.join(root, file) print('Processing {0}'.format(full_path)) extension = ClassUtils.get_filename_extension(full_path) if extension == '.mjpeg': file_info = ClassMjpegReader.process_video(full_path) else: print('Extension ignored: {0}'.format(extension)) continue # Getting idcam from file id_cam = full_path.split('/')[-2] print('IdCam: {0}'.format(id_cam)) for index, info in enumerate(file_info): print('Processing {0} of {1} from {2}'.format(index, len(file_info), full_path)) frame = info[0] ticks = info[1] image_np = np.frombuffer(frame, dtype=np.uint8) image = cv2.imdecode(image_np, cv2.IMREAD_ANYCOLOR) arr, image_draw = instance_pose.recognize_image_tuple(image) min_score = 0.05 arr_pass = list() for elem in arr: if ClassUtils.check_vector_integrity_pos(elem, min_score): arr_pass.append(elem) if len(arr_pass) > 0: # Draw rectangles for all candidates for person_arr in arr_pass: pt1, pt2 = ClassUtils.get_rectangle_bounds(person_arr, min_score) cv2.rectangle(image_draw, pt1, pt2, (0, 0, 255), 5) # Overwriting 1 full_path_images = os.path.join(folder_images, '{0}_{1}.jpg'.format(ticks, id_cam)) print('Writing image {0}'.format(full_path_images)) cv2.imwrite(full_path_images, image) # Overwriting 2 full_path_draw = os.path.join(folder_images_draw, '{0}_{1}.jpg'.format(ticks, id_cam)) print('Writing image {0}'.format(full_path_images)) cv2.imwrite(full_path_draw, image_draw) print('Done!')
def main(): print('Initializing main function') # Prompt for user input cam_number_str = input('Insert camera number to process: ') cam_number = int(cam_number_str) # Open video from opencv cap = cv2.VideoCapture(cam_number) # Initializing open pose distance instance_pose = ClassOpenPose() # Initializing variables model_dir = '/home/mauricio/models/nn_classifier' instance_nn = ClassNN.load_from_params(model_dir) while True: # Capture frame-by-frame ret, frame = cap.read() # Processing frame with openpose arr, frame = instance_pose.recognize_image_tuple(frame) # Check if there is one frame with vector integrity arr_pass = list() min_score = 0.05 # Checking vector integrity for all elements # Verify there is at least one arm and one leg for elem in arr: if ClassUtils.check_vector_integrity_pos(elem, min_score): arr_pass.append(elem) if len(arr_pass) != 1: print('Invalid len for arr_pass: {0}'.format(arr_pass)) else: person_array = arr_pass[0] # Getting person descriptors results = ClassDescriptors.get_person_descriptors( person_array, min_score) # Descriptors data_to_add = results['angles'] data_to_add += ClassUtils.get_flat_list( results['transformedPoints']) data_np = np.asanyarray(data_to_add, dtype=np.float) # Getting result predict result_predict = instance_nn.predict_model(data_np) detected_class = result_predict['classes'] label_class = get_label_name(instance_nn.label_names, detected_class) print('Detected: {0} - Label: {1}'.format(detected_class, label_class)) # Draw text class into image - Evaluation purposes font = cv2.FONT_HERSHEY_SIMPLEX font_scale = 0.6 font_color = (255, 255, 255) line_type = 2 cv2.putText(frame, '{0}'.format(label_class), (0, 0), font, font_scale, font_color, line_type) # Display the resulting frame cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capture cap.release() cv2.destroyAllWindows() print('Done!')