Spaces:
Running
Running
File size: 4,798 Bytes
21c1312 cb113e3 b28101a cb113e3 65a6e59 5a79e69 76e6474 b28101a 21c1312 b28101a 65a6e59 b28101a 9850d63 b28101a 54aae44 570a8e7 b28101a d88e1e6 b28101a ff082dd 65a6e59 b28101a 460b753 b28101a 65a6e59 b28101a 65a6e59 b28101a 65a6e59 b28101a 65a6e59 b28101a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
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.") |