LMC / services /ocr.py
Jobin Thavu Varghese
added error alerts
885a344
Raw
History Blame Contribute Delete
3.1 kB
import os
from datetime import datetime
import shutil
from huggingface_hub import batch_bucket_files
from langchain_core.messages import HumanMessage
from config import model, HF_BUCKET_NAME, HF_BUCKET_URL, HF_BUCKET_TOKEN
import gradio as gr
ocr_languages = [
"English", "Afrikaans", "Amharic", "Arabic", "Assamese", "Azerbaijani",
"Azerbaijani - Cyrillic", "Belarusian", "Bengali", "Tibetan", "Bosnian",
"Breton", "Bulgarian", "Catalan; Valencian", "Cebuano", "Czech",
"Chinese", "Cherokee", "Corsican", "Welsh",
"Danish", "Danish - Fraktur", "German", "German",
"Dzongkha", "Greek", "Esperanto",
"Estonian", "Basque", "Faroese", "Persian", "Filipino",
"Finnish", "French", "French", "Western Frisian",
"Scottish Gaelic", "Irish", "Galician", "Gujarati",
"Haitian; Haitian Creole", "Hebrew", "Hindi", "Croatian", "Hungarian",
"Armenian", "Inuktitut", "Indonesian", "Icelandic", "Italian",
"Javanese", "Japanese", "Kannada", "Georgian", "Georgian - Old", "Kazakh",
"Central Khmer", "Kirghiz; Kyrgyz", "Kurmanji", "Korean",
"Korean", "Kurdish", "Lao", "Latin", "Latvian",
"Lithuanian", "Luxembourgish", "Malayalam", "Marathi", "Macedonian",
"Maltese", "Mongolian", "Maori", "Malay", "Burmese", "Nepali",
"Dutch; Flemish", "Norwegian", "Occitan", "Oriya",
"Panjabi; Punjabi", "Polish", "Portuguese", "Pushto; Pashto", "Quechua",
"Romanian; Moldavian; Moldovan", "Russian", "Sanskrit", "Sinhala; Sinhalese",
"Slovak", "Slovak - Fraktur", "Slovenian", "Sindhi", "Spanish; Castilian",
"Spanish; Castilian - Old", "Albanian", "Serbian", "Serbian - Latin",
"Sundanese", "Swahili", "Swedish", "Syriac", "Tamil", "Tatar", "Telugu",
"Tajik", "Thai", "Tigrinya", "Tonga", "Turkish",
"Uighur; Uyghur", "Ukrainian", "Urdu", "Uzbek",
"Vietnamese", "Yiddish", "Yoruba"
]
def upload_file(file):
if file is None:
return "No file uploaded"
timestamp = datetime.now().strftime("%Y%m%d")
original_name = os.path.basename(file.name)
name, ext = os.path.splitext(original_name)
new_filename = f"{name}_{timestamp}{ext}"
if not os.path.exists("assets"):
os.makedirs("assets")
dest_path = os.path.join("assets", new_filename)
shutil.copy(file, dest_path)
batch_bucket_files(
bucket_id=HF_BUCKET_NAME,
add=[
(dest_path, new_filename)
],
token=HF_BUCKET_TOKEN
)
file_url = f"{HF_BUCKET_URL}/{new_filename}"
return dest_path, file_url
def ocr(image_url:str, language:str) -> str:
try:
messages = [
HumanMessage(
content=[
{"type": "text", "text": "Extract the content of this document into well-formatted markdown. No Intro. Extract the user file. "},
{
"type": "image_url",
"image_url": image_url
}
]
)
]
response = model.invoke(messages)
return response.content
except Exception as e:
raise gr.Error(str(e))