Amandeep01 commited on
Commit
06f4d28
·
verified ·
1 Parent(s): 6d10abf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -66
app.py CHANGED
@@ -1,78 +1,53 @@
 
1
  import cv2
2
- from PIL import Image
3
  import numpy as np
4
- import pytesseract
5
- from googletrans import Translator
6
-
7
- def overlay_translation(image_path, src_lang='hi', dest_lang='en'):
8
- # Load image
9
- image = cv2.imread(image_path)
10
- image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
11
-
12
- # OCR data with boxes
13
- data = pytesseract.image_to_data(image_rgb, lang=src_lang, output_type=pytesseract.Output.DICT)
14
-
15
- translator = Translator()
16
- translated_image = image_rgb.copy()
17
-
18
- for i in range(len(data['text'])):
19
- text = data['text'][i].strip()
20
- if text != "":
21
- x, y, w, h = data['left'][i], data['top'][i], data['width'][i], data['height'][i]
22
-
23
- try:
24
- translated_text = translator.translate(text, src=src_lang, dest=dest_lang).text
25
- except:
26
- translated_text = text # fallback
27
-
28
- # White rectangle behind text for better visibility
29
- cv2.rectangle(translated_image, (x, y), (x+w, y+h), (255,255,255), -1)
30
-
31
- # Add translated text (in black, centered)
32
- font_scale = h / 35
33
- font_thickness = 2
34
- cv2.putText(translated_image, translated_text, (x, y + h - 5),
35
- cv2.FONT_HERSHEY_SIMPLEX, font_scale, (0,0,0), font_thickness, cv2.LINE_AA)
36
-
37
- # Save or return the translated image
38
- translated_image_pil = Image.fromarray(translated_image)
39
- return translated_image_pil
40
- import cv2
41
  from PIL import Image
42
- import numpy as np
43
  import pytesseract
44
- from googletrans import Translator
45
 
46
- def overlay_translation(image_path, src_lang='hi', dest_lang='en'):
47
- # Load image
48
- image = cv2.imread(image_path)
49
- image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
50
 
51
- # OCR data with boxes
52
- data = pytesseract.image_to_data(image_rgb, lang=src_lang, output_type=pytesseract.Output.DICT)
53
 
54
- translator = Translator()
55
- translated_image = image_rgb.copy()
 
56
 
57
- for i in range(len(data['text'])):
58
- text = data['text'][i].strip()
59
- if text != "":
60
- x, y, w, h = data['left'][i], data['top'][i], data['width'][i], data['height'][i]
61
 
62
- try:
63
- translated_text = translator.translate(text, src=src_lang, dest=dest_lang).text
64
- except:
65
- translated_text = text # fallback
66
 
67
- # White rectangle behind text for better visibility
68
- cv2.rectangle(translated_image, (x, y), (x+w, y+h), (255,255,255), -1)
69
 
70
- # Add translated text (in black, centered)
71
- font_scale = h / 35
72
- font_thickness = 2
73
- cv2.putText(translated_image, translated_text, (x, y + h - 5),
74
- cv2.FONT_HERSHEY_SIMPLEX, font_scale, (0,0,0), font_thickness, cv2.LINE_AA)
75
 
76
- # Save or return the translated image
77
- translated_image_pil = Image.fromarray(translated_image)
78
- return translated_image_pil
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
  import cv2
 
3
  import numpy as np
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  from PIL import Image
 
5
  import pytesseract
6
+ from deep_translator import GoogleTranslator
7
 
8
+ st.set_page_config(page_title="Image Translator App", layout="centered")
9
+ st.title("📄 Image Translator")
10
+ st.write("Upload an image with text and get it translated directly on the image.")
 
11
 
12
+ uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
 
13
 
14
+ if uploaded_file is not None:
15
+ image = Image.open(uploaded_file)
16
+ image_np = np.array(image)
17
 
18
+ st.image(image, caption="Original Image", use_column_width=True)
 
 
 
19
 
20
+ # Convert image to RGB (OpenCV uses BGR by default)
21
+ image_rgb = cv2.cvtColor(image_np, cv2.COLOR_RGB2BGR)
 
 
22
 
23
+ # OCR - get data with bounding boxes
24
+ data = pytesseract.image_to_data(image_rgb, output_type=pytesseract.Output.DICT)
25
 
26
+ translator = GoogleTranslator(source='auto', target='hi')
 
 
 
 
27
 
28
+ n_boxes = len(data['text'])
29
+ for i in range(n_boxes):
30
+ if int(data['conf'][i]) > 60: # confidence threshold
31
+ x, y, w, h = data['left'][i], data['top'][i], data['width'][i], data['height'][i]
32
+ text = data['text'][i]
33
+ if text.strip() != "":
34
+ try:
35
+ translated_text = translator.translate(text)
36
+
37
+ # Draw white rectangle as background for text
38
+ cv2.rectangle(image_rgb, (x, y), (x + w, y + h), (255, 255, 255), -1)
39
+
40
+ # Adjust font scale based on box height
41
+ font_scale = h / 35
42
+ font_thickness = 1
43
+
44
+ # Overlay translated text, vertically aligned inside the box
45
+ cv2.putText(image_rgb, translated_text, (x, y + h - 5),
46
+ cv2.FONT_HERSHEY_SIMPLEX, font_scale, (0, 0, 0),
47
+ font_thickness, cv2.LINE_AA)
48
+ except Exception as e:
49
+ print(f"Translation error for '{text}': {e}")
50
+
51
+ # Convert back to RGB for PIL display
52
+ result_image = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2RGB)
53
+ st.image(result_image, caption="Translated Image", use_column_width=True)