Download Evaluation/utils.py from Darknsu/SAT: direct link, hf CLI and curl.
- Browser
- Download file 2.8 kB
-
https://huggingface.co/spaces/Darknsu/SAT/resolve/main/Evaluation/utils.py
- Command line
-
hf download hf://spaces/Darknsu/SAT/Evaluation/utils.py
-
curl -L -o utils.py https://huggingface.co/spaces/Darknsu/SAT/resolve/main/Evaluation/utils.py
2.8 kB
| import json | |
| #import urllib.request, urllib.error, urllib.parse | |
| import numpy as np | |
| API = 'http://ec2-52-11-11-89.us-west-2.compute.amazonaws.com/challenge17/api.py' | |
| def get_blocked_videos(api=API): | |
| # api_url = '{}?action=get_blocked'.format(api) | |
| # req = urllib.request.Request(api_url) | |
| # response = urllib.request.urlopen(req) | |
| # return json.loads(response.read()) | |
| return list() | |
| def interpolated_prec_rec(prec, rec): | |
| """Interpolated AP - VOCdevkit from VOC 2011. | |
| """ | |
| mprec = np.hstack([[0], prec, [0]]) | |
| mrec = np.hstack([[0], rec, [1]]) | |
| for i in range(len(mprec) - 1)[::-1]: | |
| mprec[i] = max(mprec[i], mprec[i + 1]) | |
| idx = np.where(mrec[1::] != mrec[0:-1])[0] + 1 | |
| ap = np.sum((mrec[idx] - mrec[idx - 1]) * mprec[idx]) | |
| return ap | |
| def segment_iou(target_segment, candidate_segments): | |
| """Compute the temporal intersection over union between a | |
| target segment and all the test segments. | |
| Parameters | |
| ---------- | |
| target_segment : 1d array | |
| Temporal target segment containing [starting, ending] times. | |
| candidate_segments : 2d array | |
| Temporal candidate segments containing N x [starting, ending] times. | |
| Outputs | |
| ------- | |
| tiou : 1d array | |
| Temporal intersection over union score of the N's candidate segments. | |
| """ | |
| tt1 = np.maximum(target_segment[0], candidate_segments[:, 0]) | |
| tt2 = np.minimum(target_segment[1], candidate_segments[:, 1]) | |
| # Intersection including Non-negative overlap score. | |
| segments_intersection = (tt2 - tt1).clip(0) | |
| # Segment union. | |
| segments_union = (candidate_segments[:, 1] - candidate_segments[:, 0]) \ | |
| + (target_segment[1] - target_segment[0]) - segments_intersection | |
| # Compute overlap as the ratio of the intersection | |
| # over union of two segments. | |
| tIoU = segments_intersection.astype(float) / segments_union | |
| return tIoU | |
| def wrapper_segment_iou(target_segments, candidate_segments): | |
| """Compute intersection over union btw segments | |
| Parameters | |
| ---------- | |
| target_segments : ndarray | |
| 2-dim array in format [m x 2:=[init, end]] | |
| candidate_segments : ndarray | |
| 2-dim array in format [n x 2:=[init, end]] | |
| Outputs | |
| ------- | |
| tiou : ndarray | |
| 2-dim array [n x m] with IOU ratio. | |
| Note: It assumes that candidate-segments are more scarce that target-segments | |
| """ | |
| if candidate_segments.ndim != 2 or target_segments.ndim != 2: | |
| raise ValueError('Dimension of arguments is incorrect') | |
| n, m = candidate_segments.shape[0], target_segments.shape[0] | |
| tiou = np.empty((n, m)) | |
| for i in range(m): | |
| tiou[:, i] = segment_iou(target_segments[i,:], candidate_segments) | |
| return tiou | |