Spaces:
Running
Running
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.") | |
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 | |
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.") |