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.")