Spaces:
Sleeping
Sleeping
| from gait_analysis import EnhancedGaitAnalyzer | |
| import os | |
| from datetime import datetime | |
| def generate_markdown_report(results, video_path, output_path): | |
| """ | |
| Generate a strictly structured gait analysis report. | |
| """ | |
| summary = results.get("summary", {}) | |
| observations = results.get("observations", {}) | |
| strategies = results.get("compensatory_strategies", []) | |
| reflex_influence = results.get("reflex_influence", "None observed") | |
| safety_note = results.get("safety_note", "") | |
| weight_dist = results.get("weight_distribution", {}) | |
| postural_strength = results.get("postural_strength", {}) | |
| clinical_notes = results.get("clinical_notes", []) | |
| # 1. Walking Condition | |
| walking_condition = summary.get("walking_condition", "Not specified") | |
| # 2. Observed Movement Patterns | |
| patterns = f"""### Observed Movement Patterns | |
| - **Trunk:** {observations.get('trunk', 'N/A')} | |
| - **Head & Neck:** {observations.get('head_neck', 'N/A')} | |
| - **Arms & Hands:** {observations.get('arms_hands', 'N/A')} | |
| - **Lower Limbs:** {observations.get('lower_limbs', 'N/A')} | |
| - **Symmetry:** {observations.get('symmetry', 'N/A')} | |
| - **Weight Distribution:** {observations.get('weight_distribution', 'N/A')} | |
| - **Postural Control:** {observations.get('postural_control', 'N/A')}""" | |
| # 3. Compensatory Strategies | |
| comp_strategies = "None identified" | |
| if strategies: | |
| comp_strategies = "\n".join([f"- {s}" for s in strategies]) | |
| # 4. Clinical Notes | |
| clinical_notes_text = "None noted" | |
| if clinical_notes: | |
| clinical_notes_text = "\n".join([f"- {n}" for n in clinical_notes]) | |
| # 5. Integrated Movement Summary | |
| # Combine stats into a summary | |
| asymmetry = summary.get("phase_asymmetry_percent", 0) | |
| stability = summary.get("stability_score", 0) | |
| strength = summary.get("strength_score", 0) | |
| weight_shift = summary.get("weight_shift_score", 0) | |
| gait_quality = summary.get("overall_gait_quality", "unknown") | |
| integrated_summary = f"""### Integrated Movement Summary | |
| The subject demonstrates a **{walking_condition.lower()}** walking pattern with a stability score of **{stability:.0f}/100**, strength score of **{strength:.0f}/100**, and weight shift score of **{weight_shift:.0f}/100**. | |
| Overall gait quality appears **{gait_quality}**. | |
| Movement symmetry shows a **{asymmetry:.1f}%** phase variance. | |
| {reflex_influence} | |
| {safety_note}""" | |
| # Final Report Assembly | |
| report = f"""# Gait Analysis Report | |
| ## Walking Condition | |
| **{walking_condition}** | |
| {patterns} | |
| ### Compensatory Strategies | |
| {comp_strategies} | |
| ### Clinical Notes | |
| {clinical_notes_text} | |
| {integrated_summary} | |
| --- | |
| *Generated by Gait Analysis System v3.0* | |
| """ | |
| # Write to file | |
| with open(output_path, 'w', encoding='utf-8') as f: | |
| f.write(report) | |
| print(f"✅ Strict Report generated successfully: {output_path}") | |
| return output_path | |
| def main(): | |
| # Path to test.mp4 | |
| video_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "test.mp4")) | |
| print(f"Looking for video at: {video_path}") | |
| if not os.path.exists(video_path): | |
| print("Error: test.mp4 not found!") | |
| return | |
| print("Initializing EnhancedGaitAnalyzer...") | |
| analyzer = EnhancedGaitAnalyzer(age=4) | |
| print("Processing video... this might take a moment.") | |
| try: | |
| results = analyzer.process_video(video_path) | |
| # Generate report filename with timestamp | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| report_filename = f"gait_analysis_report_{timestamp}.md" | |
| report_path = os.path.join(os.path.dirname(video_path), report_filename) | |
| # Generate markdown report | |
| generate_markdown_report(results, video_path, report_path) | |
| print(f"\n{'='*60}") | |
| print(f"Report saved to: {report_path}") | |
| print(f"{'='*60}\n") | |
| except Exception as e: | |
| print(f"An error occurred during processing: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| if __name__ == "__main__": | |
| main() | |