Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import time | |
| from PIL import Image, ImageDraw, ImageFont | |
| import io | |
| class AnimationEngineer: | |
| def __init__(self): | |
| self.colors = { | |
| 'Parkinson': '#FFB3BA', # Light Pink | |
| 'Alzheimer': '#BAFFC9', # Light Green | |
| 'Treatment A': '#BAE1FF', # Light Blue | |
| 'Treatment B': '#FFFFBA', # Light Yellow | |
| 'physiotherapy': '#FFD700', # Gold | |
| 'cognitive therapy': '#DDA0DD' # Plum | |
| } | |
| self.frame_width = 600 | |
| self.frame_height = 400 | |
| def display_care_plan_animation(self, final_plan): | |
| st.write("Visualizing Care Plan...") | |
| steps = final_plan.split(", ") | |
| # Create all frames | |
| frames = self.create_all_frames(steps) | |
| # Create a placeholder for our animation | |
| animation_placeholder = st.empty() | |
| # Display frames | |
| for i, frame in enumerate(frames): | |
| animation_placeholder.image(frame) | |
| progress = int((i + 1) / len(frames) * 100) | |
| st.progress(progress) | |
| time.sleep(0.5) # Adjust speed of animation | |
| st.success("Care Plan Visualization Complete!") | |
| st.balloons() | |
| def create_all_frames(self, steps): | |
| frames = [] | |
| # Create intro frame | |
| intro_frame = self.create_intro_frame() | |
| frames.append(intro_frame) | |
| # Create step frames | |
| for i, step in enumerate(steps): | |
| step_frame = self.create_step_frame(step, i+1, len(steps)) | |
| frames.append(step_frame) | |
| # Create transition frames | |
| transition_frames = self.create_transition_frames() | |
| frames.extend(transition_frames) | |
| # Create final frame | |
| final_frame = self.create_final_frame() | |
| frames.append(final_frame) | |
| return frames | |
| def create_intro_frame(self): | |
| img = Image.new('RGB', (self.frame_width, self.frame_height), color='white') | |
| d = ImageDraw.Draw(img) | |
| font = ImageFont.load_default() | |
| d.text((self.frame_width//2, self.frame_height//2), "Care Plan Animation", fill='black', font=font, anchor="mm") | |
| return img | |
| def create_step_frame(self, step, step_num, total_steps): | |
| img = Image.new('RGB', (self.frame_width, self.frame_height), color='white') | |
| d = ImageDraw.Draw(img) | |
| color = next((self.colors[key] for key in self.colors if key.lower() in step.lower()), '#FFFFFF') | |
| d.rectangle([50, 50, self.frame_width-50, self.frame_height-50], fill=color, outline='black') | |
| font = ImageFont.load_default() | |
| d.text((self.frame_width//2, 70), f"Step {step_num}/{total_steps}", fill='black', font=font, anchor="mm") | |
| d.text((self.frame_width//2, self.frame_height//2), step, fill='black', font=font, anchor="mm") | |
| return img | |
| def create_transition_frames(self): | |
| frames = [] | |
| for i in range(10): # 10 transition frames | |
| img = Image.new('RGB', (self.frame_width, self.frame_height), color='white') | |
| d = ImageDraw.Draw(img) | |
| size = 20 + i * 5 # Growing circle | |
| d.ellipse([self.frame_width//2 - size, self.frame_height//2 - size, | |
| self.frame_width//2 + size, self.frame_height//2 + size], | |
| fill='red') | |
| frames.append(img) | |
| return frames | |
| def create_final_frame(self): | |
| img = Image.new('RGB', (self.frame_width, self.frame_height), color='white') | |
| d = ImageDraw.Draw(img) | |
| font = ImageFont.load_default() | |
| d.text((self.frame_width//2, self.frame_height//2), "Care Plan Complete!", fill='black', font=font, anchor="mm") | |
| return img |