TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models
Paper โข 2109.10282 โข Published โข 13
How to use TeamUNIVA/23MATHQ_TrOCR-large with Transformers:
# Use a pipeline as a high-level helper
from transformers import pipeline
pipe = pipeline("image-text-to-text", model="TeamUNIVA/23MATHQ_TrOCR-large") # Load model directly
from transformers import AutoTokenizer, AutoModelForImageTextToText
tokenizer = AutoTokenizer.from_pretrained("TeamUNIVA/23MATHQ_TrOCR-large")
model = AutoModelForImageTextToText.from_pretrained("TeamUNIVA/23MATHQ_TrOCR-large")How to use TeamUNIVA/23MATHQ_TrOCR-large with vLLM:
# Install vLLM from pip:
pip install vllm
# Start the vLLM server:
vllm serve "TeamUNIVA/23MATHQ_TrOCR-large"
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "TeamUNIVA/23MATHQ_TrOCR-large",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'docker model run hf.co/TeamUNIVA/23MATHQ_TrOCR-large
How to use TeamUNIVA/23MATHQ_TrOCR-large with SGLang:
# Install SGLang from pip:
pip install sglang
# Start the SGLang server:
python3 -m sglang.launch_server \
--model-path "TeamUNIVA/23MATHQ_TrOCR-large" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "TeamUNIVA/23MATHQ_TrOCR-large",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'docker run --gpus all \
--shm-size 32g \
-p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HF_TOKEN=<secret>" \
--ipc=host \
lmsysorg/sglang:latest \
python3 -m sglang.launch_server \
--model-path "TeamUNIVA/23MATHQ_TrOCR-large" \
--host 0.0.0.0 \
--port 30000
# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:30000/v1/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "TeamUNIVA/23MATHQ_TrOCR-large",
"prompt": "Once upon a time,",
"max_tokens": 512,
"temperature": 0.5
}'How to use TeamUNIVA/23MATHQ_TrOCR-large with Docker Model Runner:
docker model run hf.co/TeamUNIVA/23MATHQ_TrOCR-large
์ค ๋จ์๋ก ์์์ด ํฌํจ๋ ๊ธ์๋ฅผ ์ธ์ ๋ชจ๋ธ์
๋๋ค.
microsoft TrOCR-large ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ตญ์ด + latex ๋ฐ์ดํฐ์
finetuning ํ์ต๋๋ค.
์ค ๋จ์๋ก ์ด๋ฏธ์ง๋ฅผ cropํ๋ ๋ณ๋์ detector๊ฐ ํ์ํฉ๋๋ค.
from PIL import Image
import glob
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
import torch
import IPython.display as ipd
## ์ด๋ฏธ์ง ์ค๋น
img_path_list = sorted(glob.glob('images/mathematical_expression_2-*.png'))
img_list = [Image.open(img_path).convert("RGB") for img_path in img_path_list]
## ๋ชจ๋ธ ๋ฐ ํ๋ก์ธ์ ์ค๋น
model_path = 'TeamUNIVA/23MATHQ_TrOCR-large'
processor = TrOCRProcessor.from_pretrained(model_path)
model = VisionEncoderDecoderModel.from_pretrained(model_path)
model.eval()
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
processor.feature_extractor.size = model.config.encoder.image_size
gc = model.generation_config
gc.max_length = 128
gc.early_stopping = True
gc.no_repeat_ngram_size = 3
gc.length_penalty = 2.0
gc.num_beams = 4
gc.eos_token_id = processor.tokenizer.sep_token_id
## TrOCR ์ถ๋ก
pixel_values = processor(img_list, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values.to(model.device), pad_token_id=processor.tokenizer.eos_token_id)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for img,text in zip(img_list, generated_text):
ipd.display(img)
print(text)
@misc{li2021trocr,
title={TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models},
author={Minghao Li and Tengchao Lv and Lei Cui and Yijuan Lu and Dinei Florencio and Cha Zhang and Zhoujun Li and Furu Wei},
year={2021},
eprint={2109.10282},
archivePrefix={arXiv},
primaryClass={cs.CL}
}