Spaces:
				
			
			
	
			
			
		Runtime error
		
	
	
	
			
			
	
	
	
	
		
		
		Runtime error
		
	| import gradio as gr | |
| import pandas as pd | |
| import numpy as np | |
| import easyocr | |
| import torch | |
| import cv2 | |
| import PIL | |
| import sys | |
| import os | |
| from PIL import ImageFont, ImageDraw, Image | |
| this=gr.Interface.load("spaces/Omnibus/Translate-100") | |
| lang_id = { | |
| "":"", | |
| "Afrikaans": "af", | |
| "Albanian": "sq", | |
| "Amharic": "am", | |
| "Arabic": "ar", | |
| "Armenian": "hy", | |
| "Asturian": "ast", | |
| "Azerbaijani": "az", | |
| "Bashkir": "ba", | |
| "Belarusian": "be", | |
| "Bulgarian": "bg", | |
| "Bengali": "bn", | |
| "Breton": "br", | |
| "Bosnian": "bs", | |
| "Burmese": "my", | |
| "Catalan": "ca", | |
| "Cebuano": "ceb", | |
| "Chinese": "zh", | |
| "Chinese (simplified)": "zh", | |
| "Chinese (traditional)": "zh", | |
| "Croatian": "hr", | |
| "Czech": "cs", | |
| "Danish": "da", | |
| "Dutch": "nl", | |
| "English": "en", | |
| "Estonian": "et", | |
| "Fulah": "ff", | |
| "Finnish": "fi", | |
| "French": "fr", | |
| "Western Frisian": "fy", | |
| "Gaelic": "gd", | |
| "Galician": "gl", | |
| "Georgian": "ka", | |
| "German": "de", | |
| "Greek": "el", | |
| "Gujarati": "gu", | |
| "Hausa": "ha", | |
| "Hebrew": "he", | |
| "Hindi": "hi", | |
| "Haitian": "ht", | |
| "Hungarian": "hu", | |
| "Irish": "ga", | |
| "Indonesian": "id", | |
| "Igbo": "ig", | |
| "Iloko": "ilo", | |
| "Icelandic": "is", | |
| "Italian": "it", | |
| "Japanese": "ja", | |
| "Javanese": "jv", | |
| "Kazakh": "kk", | |
| "Central Khmer": "km", | |
| "Kannada": "kn", | |
| "Korean": "ko", | |
| "Luxembourgish": "lb", | |
| "Ganda": "lg", | |
| "Lingala": "ln", | |
| "Lao": "lo", | |
| "Lithuanian": "lt", | |
| "Latvian": "lv", | |
| "Malagasy": "mg", | |
| "Macedonian": "mk", | |
| "Malayalam": "ml", | |
| "Mongolian": "mn", | |
| "Marathi": "mr", | |
| "Malay": "ms", | |
| "Nepali": "ne", | |
| "Norwegian": "no", | |
| "Northern Sotho": "ns", | |
| "Occitan": "oc", | |
| "Oriya": "or", | |
| "Panjabi": "pa", | |
| "Persian": "fa", | |
| "Polish": "pl", | |
| "Pushto": "ps", | |
| "Portuguese": "pt", | |
| "Romanian": "ro", | |
| "Russian": "ru", | |
| "Sindhi": "sd", | |
| "Sinhala": "si", | |
| "Slovak": "sk", | |
| "Slovenian": "sl", | |
| "Spanish": "es", | |
| "Somali": "so", | |
| "Serbian": "sr", | |
| "Serbian (cyrillic)": "sr", | |
| "Serbian (latin)": "sr", | |
| "Swati": "ss", | |
| "Sundanese": "su", | |
| "Swedish": "sv", | |
| "Swahili": "sw", | |
| "Tamil": "ta", | |
| "Thai": "th", | |
| "Tagalog": "tl", | |
| "Tswana": "tn", | |
| "Turkish": "tr", | |
| "Ukrainian": "uk", | |
| "Urdu": "ur", | |
| "Uzbek": "uz", | |
| "Vietnamese": "vi", | |
| "Welsh": "cy", | |
| "Wolof": "wo", | |
| "Xhosa": "xh", | |
| "Yiddish": "yi", | |
| "Yoruba": "yo", | |
| "Zulu": "zu", | |
| } | |
| ocr_id = { | |
| "":"", | |
| "Afrikaans": "af", | |
| "Albanian": "sq", | |
| "Arabic": "ar", | |
| "Azerbaijani": "az", | |
| "Belarusian": "be", | |
| "Bulgarian": "bg", | |
| "Bengali": "bn", | |
| "Bosnian": "bs", | |
| "Chinese (simplified)": "ch_sim", | |
| "Chinese (traditional)": "ch_tra", | |
| "Croatian": "hr", | |
| "Czech": "cs", | |
| "Danish": "da", | |
| "Dutch": "nl", | |
| "English": "en", | |
| "Estonian": "et", | |
| "French": "fr", | |
| "German": "de", | |
| "Irish": "ga", | |
| "Hindi": "hi", | |
| "Hungarian": "hu", | |
| "Indonesian": "id", | |
| "Icelandic": "is", | |
| "Italian": "it", | |
| "Japanese": "ja", | |
| "Kannada": "kn", | |
| "Korean": "ko", | |
| "Lithuanian": "lt", | |
| "Latvian": "lv", | |
| "Mongolian": "mn", | |
| "Marathi": "mr", | |
| "Malay": "ms", | |
| "Nepali": "ne", | |
| "Norwegian": "no", | |
| "Occitan": "oc", | |
| "Polish": "pl", | |
| "Portuguese": "pt", | |
| "Romanian": "ro", | |
| "Russian": "ru", | |
| "Serbian (cyrillic)": "rs_cyrillic", | |
| "Serbian (latin)": "rs_latin", | |
| "Slovak": "sk", | |
| "Slovenian": "sl", | |
| "Spanish": "es", | |
| "Swedish": "sv", | |
| "Swahili": "sw", | |
| "Tamil": "ta", | |
| "Thai": "th", | |
| "Tagalog": "tl", | |
| "Turkish": "tr", | |
| "Ukrainian": "uk", | |
| "Urdu": "ur", | |
| "Uzbek": "uz", | |
| "Vietnamese": "vi", | |
| "Welsh": "cy", | |
| "Zulu": "zu", | |
| } | |
| def blur_im(img,bounds,target_lang,trans_lang): | |
| im = cv2.imread(img) | |
| im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) | |
| for bound in bounds: | |
| p0, p1, p2, p3 = bound[0] | |
| x = int(p0[0]) | |
| y = int(p0[1]) | |
| w = int(p2[0]) - int(x) | |
| h = int(p2[1]) - int(y) | |
| kernel = np.ones((3, 3), np.uint8) | |
| im[y:y+h, x:x+w] = cv2.dilate(im[y:y+h, x:x+w], kernel, iterations=3) | |
| im[y:y+h, x:x+w] = cv2.GaussianBlur(im[y:y+h, x:x+w],(51,51),0) | |
| im = Image.fromarray(im) | |
| for bound in bounds: | |
| if bound[2]>=0.3: | |
| p0, p1, p2, p3 = bound[0] | |
| x = int(p0[0]) | |
| y = int(p0[1]) | |
| w = int(p2[0]) - int(x) | |
| h = int(p2[1]) - int(y) | |
| draw = ImageDraw.Draw(im) | |
| font_size=int(int(w)*0.15) | |
| font = ImageFont.truetype("./fonts/unifont-15.0.01.ttf", int(font_size)) | |
| text = this(bound[1],target_lang,trans_lang) | |
| draw.text((x, y),text, font = font, fill=(0,0,0)) | |
| else: | |
| pass | |
| return im | |
| def draw_boxes(image, bounds, color='blue', width=1): | |
| draw = ImageDraw.Draw(image) | |
| for bound in bounds: | |
| p0, p1, p2, p3 = bound[0] | |
| draw.line([*p0, *p1, *p2, *p3, *p0], fill=color, width=width) | |
| return image | |
| def detect(img, target_lang,trans_lang,target_lang2=None): | |
| if target_lang2 != None and target_lang2 != "": | |
| lang=f"{lang_id[target_lang]}" | |
| lang2=f"{lang_id[target_lang2]}" | |
| lang=[lang,lang2] | |
| else: | |
| lang=[f"{ocr_id[target_lang]}"] | |
| pass | |
| #global bounds | |
| reader = easyocr.Reader(lang) | |
| bounds = reader.readtext(img) | |
| im = PIL.Image.open(img) | |
| im_out=draw_boxes(im, bounds) | |
| #im.save('result.jpg') | |
| blr_out=blur_im(img,bounds,target_lang,trans_lang) | |
| return im_out,blr_out,pd.DataFrame(bounds),pd.DataFrame(bounds).iloc[:,1:] | |
| with gr.Blocks() as robot: | |
| with gr.Row(): | |
| with gr.Column(): | |
| im=gr.Image(type="filepath") | |
| with gr.Column(): | |
| target_lang = gr.Dropdown(label="Detect language:", choices=list(ocr_id.keys()),value="English") | |
| #target_lang2 = gr.Dropdown(label="Detect language2", choices=list(lang_id.keys()),value="") | |
| trans_lang = gr.Dropdown(label="Translate to:", choices=list(lang_id.keys()),value="Chinese") | |
| go_btn=gr.Button() | |
| with gr.Row(): | |
| with gr.Column(): | |
| out_im=gr.Image() | |
| with gr.Column(): | |
| trans_im=gr.Image() | |
| with gr.Row(): | |
| out_txt=gr.Textbox(lines=8) | |
| data_f=gr.Dataframe() | |
| go_btn.click(detect,[im,target_lang,trans_lang],[out_im,trans_im,out_txt,data_f]) | |
| #go_btn.click(detect,[im,target_lang,target_lang2],[out_im,trans_im,out_txt,data_f]) | |
| robot.queue(concurrency_count=10).launch() | 
