masadonline commited on
Commit
65a6e59
·
verified ·
1 Parent(s): ff082dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -52
app.py CHANGED
@@ -4,12 +4,11 @@ from PIL import Image
4
  import argostranslate.package
5
  import argostranslate.translate
6
 
7
- # Streamlit UI setup
 
8
  st.set_page_config(page_title="DeafTranslator", layout="centered")
9
  st.title("🤟 DeafTranslator")
10
- st.markdown("Translate **Urdu** text to **English** and view it in **Sign Language** (ASL).")
11
-
12
- SIGN_IMAGE_FOLDER = "sign_images" # Place images like a.jpg, A.JPG, hello.jpg, etc. here
13
 
14
  @st.cache_resource
15
  def load_argos_urdu_to_english():
@@ -21,30 +20,46 @@ def load_argos_urdu_to_english():
21
  argostranslate.package.install_from_path(pkg.download())
22
  break
23
  except Exception:
24
- pass # Ignore if model already installed or offline
25
-
26
  installed_languages = argostranslate.translate.get_installed_languages()
27
  from_lang = next((lang for lang in installed_languages if lang.code == "ur"), None)
28
  to_lang = next((lang for lang in installed_languages if lang.code == "en"), None)
 
 
 
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  if from_lang and to_lang:
31
  return from_lang.get_translation(to_lang)
32
  return None
33
 
34
- translator = load_argos_urdu_to_english()
 
35
 
36
- def translate_urdu_to_english(urdu_text):
37
- if translator:
38
- try:
39
- return translator.translate(urdu_text)
40
- except Exception as e:
41
- st.error(f"Translation failed: {e}")
42
- else:
43
- st.error("Translation model not loaded.")
44
  return ""
45
 
46
  def find_image_path(name):
47
- """Try to find image with common extensions."""
48
  for ext in ["jpg", "JPG"]:
49
  path = os.path.join(SIGN_IMAGE_FOLDER, f"{name}.{ext}")
50
  if os.path.exists(path):
@@ -53,50 +68,64 @@ def find_image_path(name):
53
 
54
  def display_sign_language(english_text):
55
  st.markdown("### 👐 Sign Language Representation")
56
-
57
- words = english_text.strip().split()
58
  for word in words:
59
- st.markdown(f"**{word.upper()}**")
60
- chars = list(word)
61
- cols = st.columns(len(chars))
62
-
63
- for i, c in enumerate(chars):
64
- if c.isalpha():
65
- img_path = find_image_path(c.lower())
66
- if img_path:
67
- with cols[i]:
68
- st.image(img_path, caption=c.upper(), width=80)
69
- else:
70
- with cols[i]:
71
- st.warning(f"❌ {c.upper()}")
72
- # Show space image after word
73
- space_img = find_image_path("space")
74
- if space_img:
75
- st.image(space_img, caption="", width=40)
76
-
77
-
78
- # Handle last word if any
79
- if current_word:
80
- st.markdown(f"**{''.join(current_word)}**")
81
- for c in current_word:
82
- img_path = find_image_path(c.lower())
83
  if img_path:
84
- st.image(img_path, caption=c.upper(), width=80)
 
85
  else:
86
  st.warning(f"Missing image for: {c.upper()}")
 
 
 
87
 
88
-
89
- # --- Streamlit UI ---
90
  urdu_text = st.text_area("📝 Enter Urdu Text", height=150)
91
-
92
  if st.button("🔄 Translate & Show Signs"):
93
- if not urdu_text.strip():
94
- st.warning("Please enter some Urdu text.")
95
- else:
96
- with st.spinner("Translating..."):
97
- english_translation = translate_urdu_to_english(urdu_text)
98
-
99
  if english_translation:
100
  st.markdown("### ✅ Translated English")
101
  st.success(english_translation)
102
  display_sign_language(english_translation)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  import argostranslate.package
5
  import argostranslate.translate
6
 
7
+ SIGN_IMAGE_FOLDER = "sign_images"
8
+
9
  st.set_page_config(page_title="DeafTranslator", layout="centered")
10
  st.title("🤟 DeafTranslator")
11
+ st.markdown("Translate **Urdu** text to **English** and view it in **Sign Language** (ASL). Or enter signs manually to reverse translate back to Urdu.")
 
 
12
 
13
  @st.cache_resource
14
  def load_argos_urdu_to_english():
 
20
  argostranslate.package.install_from_path(pkg.download())
21
  break
22
  except Exception:
23
+ pass
 
24
  installed_languages = argostranslate.translate.get_installed_languages()
25
  from_lang = next((lang for lang in installed_languages if lang.code == "ur"), None)
26
  to_lang = next((lang for lang in installed_languages if lang.code == "en"), None)
27
+ if from_lang and to_lang:
28
+ return from_lang.get_translation(to_lang)
29
+ return None
30
 
31
+ @st.cache_resource
32
+ def load_argos_english_to_urdu():
33
+ try:
34
+ argostranslate.package.update_package_index()
35
+ available_packages = argostranslate.package.get_available_packages()
36
+ for pkg in available_packages:
37
+ if pkg.from_code == "en" and pkg.to_code == "ur":
38
+ argostranslate.package.install_from_path(pkg.download())
39
+ break
40
+ except Exception:
41
+ pass
42
+ installed_languages = argostranslate.translate.get_installed_languages()
43
+ from_lang = next((lang for lang in installed_languages if lang.code == "en"), None)
44
+ to_lang = next((lang for lang in installed_languages if lang.code == "ur"), None)
45
  if from_lang and to_lang:
46
  return from_lang.get_translation(to_lang)
47
  return None
48
 
49
+ translator_ur_en = load_argos_urdu_to_english()
50
+ translator_en_ur = load_argos_english_to_urdu()
51
 
52
+ def translate_urdu_to_english(text):
53
+ if translator_ur_en:
54
+ return translator_ur_en.translate(text)
55
+ return ""
56
+
57
+ def translate_english_to_urdu(text):
58
+ if translator_en_ur:
59
+ return translator_en_ur.translate(text)
60
  return ""
61
 
62
  def find_image_path(name):
 
63
  for ext in ["jpg", "JPG"]:
64
  path = os.path.join(SIGN_IMAGE_FOLDER, f"{name}.{ext}")
65
  if os.path.exists(path):
 
68
 
69
  def display_sign_language(english_text):
70
  st.markdown("### 👐 Sign Language Representation")
71
+ words = english_text.lower().split()
 
72
  for word in words:
73
+ st.markdown(f"**{word}**")
74
+ cols = st.columns(len(word))
75
+ for i, c in enumerate(word):
76
+ img_path = find_image_path(c)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  if img_path:
78
+ with cols[i]:
79
+ st.image(img_path, caption=c.upper(), width=80)
80
  else:
81
  st.warning(f"Missing image for: {c.upper()}")
82
+ space_path = find_image_path("space")
83
+ if space_path:
84
+ st.image(space_path, caption="", width=40)
85
 
86
+ # Urdu to Sign Language
87
+ st.header("🔹 Urdu to Sign Language")
88
  urdu_text = st.text_area("📝 Enter Urdu Text", height=150)
 
89
  if st.button("🔄 Translate & Show Signs"):
90
+ if urdu_text.strip():
91
+ english_translation = translate_urdu_to_english(urdu_text)
 
 
 
 
92
  if english_translation:
93
  st.markdown("### ✅ Translated English")
94
  st.success(english_translation)
95
  display_sign_language(english_translation)
96
+ else:
97
+ st.warning("Please enter some Urdu text.")
98
+
99
+ # Manual Input for Reverse
100
+ st.header("🔹 Manual ASL Input (A–Z & Space)")
101
+ if "manual_signs" not in st.session_state:
102
+ st.session_state.manual_signs = ""
103
+
104
+ cols1 = st.columns(13)
105
+ for i, c in enumerate("ABCDEFGHIJKLM"):
106
+ with cols1[i]:
107
+ if st.button(c):
108
+ st.session_state.manual_signs += c.lower()
109
+ cols2 = st.columns(14)
110
+ for i, c in enumerate("NOPQRSTUVWXYZ "):
111
+ label = "Space" if c == " " else c
112
+ val = " " if c == " " else c.lower()
113
+ with cols2[i]:
114
+ if st.button(label):
115
+ st.session_state.manual_signs += val
116
+
117
+ st.markdown("### 🔠 Current ASL Input")
118
+ st.code(st.session_state.manual_signs.strip())
119
+
120
+ if st.button("🔁 Translate Signs → English → Urdu"):
121
+ asl_input = st.session_state.manual_signs.strip()
122
+ if asl_input:
123
+ english_text = asl_input.replace(" ", " ")
124
+ st.markdown("### ✅ Detected English")
125
+ st.success(english_text)
126
+ urdu_text = translate_english_to_urdu(english_text)
127
+ if urdu_text:
128
+ st.markdown("### 🇵🇰 Urdu Translation")
129
+ st.success(urdu_text)
130
+ else:
131
+ st.warning("Please input some ASL letters.")