def diarization(protocol, subset, hypotheses, greedy=False, collar=0.0, skip_overlap=False): options = { 'collar': collar, 'skip_overlap': skip_overlap, 'parallel': True } metrics = { 'purity': DiarizationPurity(**options), 'coverage': DiarizationCoverage(**options) } if greedy: metrics['error'] = GreedyDiarizationErrorRate(**options) else: metrics['error'] = DiarizationErrorRate(**options) reports = get_reports(protocol, subset, hypotheses, metrics) report = metrics['error'].report(display=False) purity = metrics['purity'].report(display=False) coverage = metrics['coverage'].report(display=False) report['purity', '%'] = purity[metrics['purity'].name, '%'] report['coverage', '%'] = coverage[metrics['coverage'].name, '%'] columns = list(report.columns) report = report[[columns[0]] + columns[-2:] + columns[1:-2]] report = reindex(report) summary = 'Diarization ({0:s}collar = {1:g} ms{2})'.format( 'greedy, ' if greedy else '', 1000 * collar, ', no overlap' if skip_overlap else '') headers = [summary] + \ [report.columns[i][0] for i in range(3)] + \ ['%' if c[1] == '%' else c[0] for c in report.columns[3:]] print( tabulate(report, headers=headers, tablefmt="simple", floatfmt=".2f", numalign="decimal", stralign="left", missingval="", showindex="default", disable_numparse=False))
def get_diarization_metrics(reference, hypothesis, uem=None): metric_dict = {} metric = DiarizationErrorRate() met = metric(reference, hypothesis, uem=uem) metric_dict[metric.metric_name()] = met metric = DiarizationCompleteness() met = metric(reference, hypothesis, uem=uem) metric_dict[metric.metric_name()] = met metric = DiarizationCoverage() met = metric(reference, hypothesis, uem=uem) metric_dict[metric.metric_name()] = met metric = DiarizationPurity() met = metric(reference, hypothesis, uem=uem) metric_dict[metric.metric_name()] = met metric = DiarizationHomogeneity() met = metric(reference, hypothesis, uem=uem) metric_dict[metric.metric_name()] = met return metric_dict
def test_coverage(reference, hypothesis): diarizationCoverage = DiarizationCoverage() coverage = diarizationCoverage(reference, hypothesis) npt.assert_almost_equal(coverage, 0.7586, decimal=3)