Example #1
0
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!')
Example #2
0
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)
Example #4
0
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!')
Example #5
0
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!')
Example #7
0
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!')