1# pip install huggingface_hub torch torchvision Pillow
2from huggingface_hub import hf_hub_download
3import importlib.util, json, torch
4from torchvision import transforms
5from PIL import Image
6
7# 1. Download files from hub
8repo = "Sarjinkhan2003/bengali-ocr-recognition"
9net_path = hf_hub_download(repo, "bengali_crnn.py")
10ckpt_path = hf_hub_download(repo, "bengali_crnn.pth")
11vocab_path = hf_hub_download(repo, "vocab.json")
12
13# 2. Load model
14spec = importlib.util.spec_from_file_location("bengali_crnn", net_path)
15mod = importlib.util.module_from_spec(spec)
16spec.loader.exec_module(mod)
17
18vocab = json.load(open(vocab_path, encoding="utf-8"))
19idx2char = {int(k): v for k, v in vocab["idx2char"].items()}
20model = mod.Model(1, 256, 256, vocab["num_classes"])
21ckpt = torch.load(ckpt_path, map_location="cpu")
22model.load_state_dict(ckpt["model_state_dict"])
23model.eval()
24
25# 3. Run inference
26tf = transforms.Compose([
27 transforms.Grayscale(1),
28 transforms.Resize((64, 256)),
29 transforms.ToTensor(),
30 transforms.Normalize([0.5],[0.5])
31])
32img = Image.open("word.jpg").convert("RGB")
33tensor = tf(img).unsqueeze(0)
34with torch.no_grad():
35 out = model(tensor)
36_, preds = out.permute(1,0,2).max(2)
37chars, prev = [], None
38for p in preds[0].tolist():
39 if p != 0 and p != prev:
40 chars.append(idx2char.get(p, ""))
41 prev = p
42print("".join(chars))
1import easyocr
2reader = easyocr.Reader(
3 lang_list=["bn"],
4 recog_network="bengali_crnn",
5 model_storage_directory="./model_dir",
6 user_network_directory="./model_dir",
7 gpu=True
8)
9results = reader.readtext("bengali_doc.jpg")
10for bbox, text, confidence in results:
11 print(f"{confidence:.2f} | {text}")
Bengali vowels, consonants, diacritics (incl. matra, hasanta, anusvar) +
Bengali numerals + English letters/digits + punctuation
Total: 148 characters