import streamlit as st import os from PIL import Image import argostranslate.package import argostranslate.translate SIGN_IMAGE_FOLDER = "sign_images" st.set_page_config(page_title="DeafTranslator", layout="centered") st.title("🤟 DeafTranslator") st.markdown("Translate **Urdu** text to **English** and view it in **Sign Language** (ASL). Or enter signs manually to reverse translate back to Urdu.") @st.cache_resource def load_argos_urdu_to_english(): try: argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() for pkg in available_packages: if pkg.from_code == "ur" and pkg.to_code == "en": argostranslate.package.install_from_path(pkg.download()) break except Exception: pass installed_languages = argostranslate.translate.get_installed_languages() from_lang = next((lang for lang in installed_languages if lang.code == "ur"), None) to_lang = next((lang for lang in installed_languages if lang.code == "en"), None) if from_lang and to_lang: return from_lang.get_translation(to_lang) return None @st.cache_resource def load_argos_english_to_urdu(): try: argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() for pkg in available_packages: if pkg.from_code == "en" and pkg.to_code == "ur": argostranslate.package.install_from_path(pkg.download()) break except Exception: pass installed_languages = argostranslate.translate.get_installed_languages() from_lang = next((lang for lang in installed_languages if lang.code == "en"), None) to_lang = next((lang for lang in installed_languages if lang.code == "ur"), None) if from_lang and to_lang: return from_lang.get_translation(to_lang) return None translator_ur_en = load_argos_urdu_to_english() translator_en_ur = load_argos_english_to_urdu() def translate_urdu_to_english(text): if translator_ur_en: return translator_ur_en.translate(text) return "" def translate_english_to_urdu(text): if translator_en_ur: return translator_en_ur.translate(text) return "" def find_image_path(name): for ext in ["jpg", "JPG"]: path = os.path.join(SIGN_IMAGE_FOLDER, f"{name}.{ext}") if os.path.exists(path): return path return None def display_sign_language(english_text): st.markdown("### 👐 Sign Language Representation") words = english_text.lower().split() for word in words: st.markdown(f"**{word}**") cols = st.columns(len(word)) for i, c in enumerate(word): img_path = find_image_path(c) if img_path: with cols[i]: st.image(img_path, caption=c.upper(), width=80) else: st.warning(f"Missing image for: {c.upper()}") space_path = find_image_path("space") if space_path: st.image(space_path, caption="", width=40) # Urdu to Sign Language st.header("🔹 Urdu to Sign Language") urdu_text = st.text_area("📝 Enter Urdu Text", height=150) if st.button("🔄 Translate & Show Signs"): if urdu_text.strip(): english_translation = translate_urdu_to_english(urdu_text) if english_translation: st.markdown("### ✅ Translated English") st.success(english_translation) display_sign_language(english_translation) else: st.warning("Please enter some Urdu text.") # Manual Input for Reverse st.header("🔹 Manual ASL Input (A–Z & Space)") if "manual_signs" not in st.session_state: st.session_state.manual_signs = "" cols1 = st.columns(13) for i, c in enumerate("ABCDEFGHIJKLM"): with cols1[i]: if st.button(c): st.session_state.manual_signs += c.lower() cols2 = st.columns(14) for i, c in enumerate("NOPQRSTUVWXYZ "): label = "Space" if c == " " else c val = " " if c == " " else c.lower() with cols2[i]: if st.button(label): st.session_state.manual_signs += val st.markdown("### 🔠 Current ASL Input") st.code(st.session_state.manual_signs.strip()) if st.button("🔁 Translate Signs → English → Urdu"): asl_input = st.session_state.manual_signs.strip() if asl_input: english_text = asl_input.replace(" ", " ") st.markdown("### ✅ Detected English") st.success(english_text) urdu_text = translate_english_to_urdu(english_text) if urdu_text: st.markdown("### 🇵🇰 Urdu Translation") st.success(urdu_text) else: st.warning("Please input some ASL letters.")