DeafTranslator / app.py
masadonline's picture
Update app.py
b28101a verified
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.")