import gradio as gr from umpire_decision import simulate_umpire_decision from drs_review import analyze_drs from final_decision import compare_decisions def lbw_decision_app(pitch_zone, shot_offered, impact_zone, ball_tracking): # Step 1 - On-field onfield = simulate_umpire_decision(pitch_zone, shot_offered, impact_zone, ball_tracking) # Step 2 - DRS drs_result = analyze_drs(ball_tracking) # Step 3 - Final Comparison final = compare_decisions(onfield, drs_result) return f"""๐Ÿ **On-field Decision**: {onfield['decision']} ๐Ÿ“Œ Reason: {onfield['reason']} ๐Ÿงช **DRS Verdict**: {'CONFIRMED โœ…' if final['confirmed'] else 'OVERTURNED โŒ'} ๐Ÿ“Œ DRS Analysis: {drs_result['reason']} โœ… **Final Decision**: {final['final_decision']}""" iface = gr.Interface( fn=lbw_decision_app, inputs=[ gr.Radio(["In Line", "Outside Off", "Outside Leg"], label="Pitch Location"), gr.Radio(["Yes", "No"], label="Was Shot Offered?"), gr.Radio(["In Line", "Outside Off", "Outside Leg"], label="Impact Zone"), gr.Textbox(label="Ball Tracking Data (JSON format)", placeholder='{"pitching": "in line", "impact": "in line", "trajectory": "hitting"}'), ], outputs="markdown", title="Smart LBW Decision Review System", description="Simulates on-field umpire call and DRS-based final decision." ) if __name__ == "__main__": iface.launch()