| import os |
| from typing import List, Dict, Optional |
| import pandas as pd |
| from utils.data_types import ModalityType, TaskType, TaskResult, ModalityResults |
|
|
| |
| from processors.image_processor import ImageProcessor |
| from processors.video_processor import VideoProcessor |
| from processors.audio_processor import AudioProcessor |
| from processors.nlp_processor import NLPProcessor |
| from processors.three_d_processor import ThreeDProcessor |
| |
|
|
| def process_all_modalities(dataset_dir: str, pred_json_file: str) -> ModalityResults: |
| """Process data for all modalities |
| |
| Args: |
| dataset_dir: Dataset directory path |
| pred_json_file: Prediction JSON filename |
| """ |
| if not os.path.exists(dataset_dir): |
| raise ValueError(f"Dataset directory not found: {dataset_dir}") |
| print(f"Using dataset directory: {dataset_dir}") |
| |
| |
| processors = [ |
| ImageProcessor(ModalityType.IMAGE, dataset_dir, pred_json_file), |
| VideoProcessor(ModalityType.VIDEO, dataset_dir, pred_json_file), |
| AudioProcessor(ModalityType.AUDIO, dataset_dir, pred_json_file), |
| NLPProcessor(ModalityType.NLP, dataset_dir, pred_json_file), |
| ThreeDProcessor(ModalityType.THREE_D, dataset_dir, pred_json_file) |
| ] |
| |
| |
| results: ModalityResults = {} |
| for processor in processors: |
| if processor.modality == ModalityType.NLP: |
| |
| nlp_results = processor.process() |
| if nlp_results: |
| results[processor.modality] = { |
| TaskType.COMPREHENSION: nlp_results |
| } |
| else: |
| |
| comp_results = processor.process_comprehension() |
| gen_results = processor.process_generation() |
| |
| if comp_results or gen_results: |
| results[processor.modality] = {} |
| if comp_results: |
| results[processor.modality][TaskType.COMPREHENSION] = comp_results |
| if gen_results: |
| results[processor.modality][TaskType.GENERATION] = gen_results |
| |
| print(f"Implemented modalities: {[m.value for m in results.keys()]}") |
| |
| return results |
|
|
| def save_to_excel(results: ModalityResults, template_excel: str, output_dir: str, model_name: str): |
| """Save results to Excel file, keeping all sheets and empty columns for unimplemented modalities""" |
| |
| template_dfs = pd.read_excel(template_excel, sheet_name=None) |
| |
| |
| output_file = os.path.join(output_dir, f"{model_name}_result.xlsx") |
| with pd.ExcelWriter(output_file, engine='openpyxl') as writer: |
| for sheet_name, template_df in template_dfs.items(): |
| new_df = template_df.copy() |
| new_df[model_name] = None |
| found = False |
| for modality, task_results in results.items(): |
| for task_type, results_list in task_results.items(): |
| expected_sheet = f"{modality.value}-{task_type.value.capitalize()}" if modality != ModalityType.NLP else modality.value |
| if expected_sheet == sheet_name: |
| found = True |
| for task_result in results_list: |
| mask = (new_df['Task Name'] == task_result.task_name) & \ |
| (new_df['Metrics'] == task_result.metric) |
| if mask.any(): |
| new_df.loc[mask, model_name] = task_result.score |
| new_df.to_excel(writer, sheet_name=sheet_name, index=False) |
| if found: |
| print(f"Updated {sheet_name} sheet") |
| else: |
| print(f"{sheet_name} sheet empty, column preserved") |
| print(f"Results saved to {output_file}") |
|
|
| def main(): |
| """Main function to process command line args and execute workflow""" |
| import argparse |
| |
| parser = argparse.ArgumentParser(description='Process multimodal evaluation data and generate Excel report') |
| parser.add_argument('-d', '--dataset_dir', type=str, default='General-Bench-Openset', |
| help='Dataset directory path (default: General-Bench-Openset)') |
| parser.add_argument('-t', '--template', type=str, default='references/template_result.xlsx', |
| help='Template Excel file path (default: references/template_result.xlsx)') |
| parser.add_argument('-p', '--pred_json_file', type=str, default='prediction.json', |
| help='Prediction JSON file name(default: prediction.json)') |
| parser.add_argument('-o', '--output_dir', type=str, default='outcome', |
| help='Output directory path (default: outcome)') |
| parser.add_argument('-m', '--model_name', type=str, default='test', help='Model name') |
| |
| args = parser.parse_args() |
| |
| os.makedirs(args.output_dir, exist_ok=True) |
| |
| print(f"Processing evaluation data for {args.model_name}...") |
| print(f"Dataset directory: {args.dataset_dir}") |
| print(f"Template file: {args.template}") |
| print(f"Output directory: {args.output_dir}") |
| |
| results = process_all_modalities(args.dataset_dir, args.pred_json_file) |
| save_to_excel(results, args.template, args.output_dir, args.model_name) |
| |
| print("Processing complete!") |
|
|
| if __name__ == "__main__": |
| main() |