Precision_Care / components /animation_engineer.py
Ashar086's picture
Update components/animation_engineer.py
6d689b7 verified
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