def get_ioh(bb1, bb2):
    """
    Calculate the Intersection over motorcyclist bbox (IoH) of given helmet bounding box.

    Parameters
    ----------
    bb1 : Helmet Bounding Box 
        List
        List Idx : {0 -'x1', 2 - 'x2', 1 - 'y1', 3- 'y2'}
        The (x1, y1) position is at the top left corner,
        the (x2, y2) position is at the bottom right corner
    bb2 : Motorcyclist Bounding Box
        List
        List idx refers to : {0 -'x1', 2 - 'x2', 1- 'y1', 3- 'y2'}
        The (x, y) position is at the top left corner,
        the (x2, y2) position is at the bottom right corner

    Returns
    -------
    Helmet bbox Intersection over Motorcyclist bbox : float in [0, 1]
    """
    assert bb1[0] < bb1[2]
    assert bb1[1] < bb1[3]
    assert bb2[0] < bb2[2]
    assert bb2[1] < bb2[3]

    # determine the coordinates of the intersection rectangle
    x_left = max(bb1[0], bb2[0])
    y_top = max(bb1[1], bb2[1])
    x_right = min(bb1[2], bb2[2])
    y_bottom = min(bb1[3], bb2[3])

    if x_right < x_left or y_bottom < y_top:
        return 0.0

    # The intersection of two axis-aligned bounding boxes is always an
    # axis-aligned bounding box
    intersection_area = (x_right - x_left) * (y_bottom - y_top)

    # compute the area of both AABBs
    bb1_area = (bb1[2] - bb1[0]) * (bb1[3] - bb1[1])

    # compute the intersection over union by taking the intersection
    # area and dividing it by the sum of prediction + ground-truth
    # areas - the interesection area
    ioh = intersection_area / float(bb1_area)
    assert ioh >= 0.0
    assert ioh <= 1.0
    return ioh