Spaces:
Configuration error
Configuration error
| from vlmeval.smp import * | |
| def OCRBench_eval(eval_file): | |
| OCRBench_score = { | |
| 'Regular Text Recognition': 0, | |
| 'Irregular Text Recognition': 0, | |
| 'Artistic Text Recognition': 0, | |
| 'Handwriting Recognition': 0, | |
| 'Digit String Recognition': 0, | |
| 'Non-Semantic Text Recognition': 0, | |
| 'Scene Text-centric VQA': 0, | |
| 'Doc-oriented VQA': 0, | |
| 'Key Information Extraction': 0, | |
| 'Handwritten Mathematical Expression Recognition': 0 | |
| } | |
| logger = get_logger('Evaluation') | |
| data = load(eval_file) | |
| lt = len(data) | |
| lines = [data.iloc[i] for i in range(lt)] | |
| for i in tqdm(range(len(lines))): | |
| line = lines[i] | |
| predict = str(line['prediction']) | |
| answers = eval(line['answer']) | |
| category = line['category'] | |
| if category == 'Handwritten Mathematical Expression Recognition': | |
| for j in range(len(answers)): | |
| answer = answers[j].strip().replace('\n', ' ').replace(' ', '') | |
| predict = predict.strip().replace('\n', ' ').replace(' ', '') | |
| if answer in predict: | |
| OCRBench_score[category] += 1 | |
| break | |
| else: | |
| for j in range(len(answers)): | |
| answer = answers[j].lower().strip().replace('\n', ' ') | |
| predict = predict.lower().strip().replace('\n', ' ') | |
| if answer in predict: | |
| OCRBench_score[category] += 1 | |
| break | |
| final_score_dict = {} | |
| final_score_dict['Text Recognition'] = ( | |
| OCRBench_score['Regular Text Recognition'] + OCRBench_score['Irregular Text Recognition'] | |
| + OCRBench_score['Artistic Text Recognition'] + OCRBench_score['Handwriting Recognition'] | |
| + OCRBench_score['Digit String Recognition'] + OCRBench_score['Non-Semantic Text Recognition'] | |
| ) | |
| final_score_dict['Scene Text-centric VQA'] = OCRBench_score['Scene Text-centric VQA'] | |
| final_score_dict['Doc-oriented VQA'] = OCRBench_score['Doc-oriented VQA'] | |
| final_score_dict['Key Information Extraction'] = OCRBench_score['Key Information Extraction'] | |
| final_score_dict['Handwritten Mathematical Expression Recognition'] = \ | |
| OCRBench_score['Handwritten Mathematical Expression Recognition'] | |
| final_score_dict['Final Score'] = ( | |
| final_score_dict['Text Recognition'] + final_score_dict['Scene Text-centric VQA'] | |
| + final_score_dict['Doc-oriented VQA'] + final_score_dict['Key Information Extraction'] | |
| + final_score_dict['Handwritten Mathematical Expression Recognition'] | |
| ) | |
| final_score_dict['Final Score Norm'] = float(final_score_dict['Final Score']) / 10 | |
| score_pth = eval_file.replace('.xlsx', '_score.json') | |
| dump(final_score_dict, score_pth) | |
| logger.info(f'OCRBench_eval successfully finished evaluating {eval_file}, results saved in {score_pth}') | |
| logger.info('Score: ') | |
| for key, value in final_score_dict.items(): | |
| logger.info('{}:{}'.format(key, value)) | |