korean-handwriting-rec ยท ํ๊ตญ์ด ์๊ธ์จ OCR
์๊ธ์จ๋ ์ฝ๋ PP-OCRv5.
ํ๊ตญ์ด | English ยท ๋ชจ๋ธ ํ์ผ ยท GitHub
korean-handwriting-rec์ PP-OCRv5์ ํ๊ตญ์ด ์๊ธ์จ๋ฅผ ๋ ๊ฐ๋ฅด์น OCR ์ธ์ ๋ชจ๋ธ์ ๋๋ค. AI Hub ์๊ธ์จยท๊ณต๋ฌธ์ ๋ฐ์ดํฐ๋ก ์ถ๊ฐ ํ์ตํ์ผ๋ฉฐ, ์ฝ 15MB์ ONNX ๋ชจ๋ธ์ CPU์์ ์คํํ ์ ์์ต๋๋ค.
์๊ธ์จ ๋จ์ด ์ ํ๋ 67.2% โ 97.4%. ํ์ต์ ์ฐ์ง ์์ 2๋ง ๋จ์ด์์ ๊ธฐ์กด ๋ชจ๋ธ๊ณผ ๋น๊ตํ์ต๋๋ค. ํ๊ฐ ๊ฒฐ๊ณผ
RapidOCR์์๋ ์ธ์ ๋ชจ๋ธ๊ณผ ๊ธ์ ์ฌ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ฐ๊ฒฐํฉ๋๋ค.
๋น ๋ฅธ ์์
์ ์ฅ์๋ฅผ ๋ฐ์ ๋ค RapidOCR 3.x์ ONNX Runtime์ ์ค์นํฉ๋๋ค.
git clone https://github.com/VerifiedIdiot/korean-handwriting-rec.git
cd korean-handwriting-rec
python -m pip install "rapidocr>=3,<4" onnxruntime
์ ์ฅ์ ๋ฃจํธ์์ ์คํํฉ๋๋ค. scan.png๋ ์ฝ์ ์ด๋ฏธ์ง์ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
from rapidocr import RapidOCR
engine = RapidOCR(params={
"Rec.model_path": "model/rec_korean_hw.onnx",
"Rec.rec_keys_path": "model/ppocrv5_korean_dict.txt",
})
result = engine("scan.png", use_cls=False)
print(result.txts)
์ด ์์ ๋ ์ ๋ฐฉํฅ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ ๋ฐฉํฅ ๋ถ๋ฅ๋ฅผ ๋๋๋ค. ์ด ์ ์ฅ์๋ ๊ธ์ ์ธ์ ๋ชจ๋ธ์ ์ ๊ณตํ๋ฉฐ, ๊ฒ์ถ ๋ชจ๋ธ์ RapidOCR์ด ๋ณ๋๋ก ์ฌ์ฉํฉ๋๋ค. ์ฒซ ์คํ์๋ ๊ฒ์ถ ๋ชจ๋ธ์ ๋ด๋ ค๋ฐ๊ธฐ ์ํ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ํ์ํ ์ ์์ต๋๋ค.
์ธ์ ์ฑ๋ฅ
๋ชจ๋ธ ๊ณต๊ฐ ๋น์, ํ์ต์ ์ฐ์ง ์์ ๊ฐ์ ํ๊ฐ ์ด๋ฏธ์ง๋ก ๊ธฐ์กด korean_PP-OCRv5_mobile_rec๊ณผ ๋น๊ตํ ๊ฒฐ๊ณผ์
๋๋ค.
๋จ์ด ํ๊ฐ๋ ์ ๋ต ์์ญ์ผ๋ก ์๋ผ๋ธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ๊ธ์ ์ฌ์ ๋ฐ ๋ฌธ์๊ฐ ๋ ๋จ์ด๋ ์ ์ธํ์ต๋๋ค.
- ๋จ์ด ์ ํ๋: ์ธ์ํ ๋ฌธ์์ด ์ ์ฒด๊ฐ ์ ๋ต๊ณผ ์ผ์นํ ๋น์จ์ ๋๋ค. ํ๊ฐ ์ฝ๋
- CER(๋ฌธ์ ์ค๋ฅ์จ): ์ ๋ต ๊ธ์ ์ ๋๋น ๋ฌธ์ ํธ์ง ๊ฑฐ๋ฆฌ์ ๋๋ค. ์๋ ํ๋ฆผ์ฒด ๋ฌธ์ฅ ํ๊ฐ๋ ๋์ด์ฐ๊ธฐ๋ฅผ ์ ์ธํฉ๋๋ค. ๋ฎ์์๋ก ์ข์ต๋๋ค. ํ๊ฐ ์ฝ๋
| ํ๊ฐ ์ธํธ | ๊ธฐ์กด PP-OCRv5 | korean-handwriting-rec |
|---|---|---|
| ์๊ธ์จ ๋จ์ด 2๋ง ๊ฐ | 67.2% | 97.4% |
| ํ์ต์ ์๋ ํ์ 15๋ช ์ ์๊ธ์จ 6์ฒ ๋จ์ด | 56.7% | 99.1% |
| ํ์ต์ ์๋ ์ ๋ถ ์์ 5์ข ์ ์ธ์ ๊ธ์ 6์ฒ ๋จ์ด | 88.7% | 99.2% |
| ํ๋ฆผ์ฒด ๋ฌธ์ฅ 1,300๊ฐ์ CER, ๋์ด์ฐ๊ธฐ ์ ์ธ | 30.0% | 7.8% |
๊ธ์ ์์ญ์ ์ฝ์ ๊ฒฐ๊ณผ์ด๋ฉฐ, ๋ฌธ์ ์ ์ฒด์ ๊ฒ์ถ ์ ํ๋๋ ํยท๋ ์ด์์ ๋ณต์ ์ฑ๋ฅ์ ๋ปํ์ง ์์ต๋๋ค. ํ๋ฆฌ๊ฑฐ๋ ๊ฒน์น ๊ธ์จ๋ ์๋ชป ์ฝ์ ์ ์์ต๋๋ค.
์ธ๋ถ ํ๊ฐ ๊ฒฐ๊ณผ| ํ๊ฐ ์ธํธ | ๊ธฐ์กด PP-OCRv5 | korean-handwriting-rec |
|---|---|---|
| ์ข ์ด์ ์ด ์์ | 66.8% | 98.1% |
| ์ข ์ด์ ์ด ์์ ๊ธ์จ | 73.9% | 96.9% |
| ํ๋ธ๋ฆฟ์ ์ด ์์ | 55.8% | 97.1% |
| ํ๋ธ๋ฆฟ์ ์ด ์์ ๊ธ์จ | 55.0% | 93.8% |
| ํ์ต์ ์๋ ๋จ์ด | 66.7% | 96.3% |
| ๊ธฐ์กด ๋ชจ๋ธ์ด ํ๋ฆฐ ๋จ์ด 6,550๊ฐ | 0% | 92.9% |
| ์ ๋ถ ์์ ์ค ์ซ์๊ฐ ๋ ๋จ์ด | 95.7% | 99.3% |
| ์ ๋ถ ์์์ ๋ฏธ๋ฆฌ ์ธ์๋ ํญ๋ชฉ๋ช | 92.9% | 97.8% |
| ์ ๋ถ ์์์ ๊ธฐ์ฌํ ๊ฐ | 88.4% | 99.3% |
์์ ์ฌ์ฏ ํ์ ์๊ธ์จ ๋จ์ด 2๋ง ๊ฐ์ ํ์ ์งํฉ, ๋ค์ ์ธ ํ์ ์ ๋ถ ์์ ์ธ์ ๊ธ์ 6์ฒ ๋จ์ด์ ํ์ ์งํฉ์ ๋๋ค.
๊ฐ์ ์ด๋ฏธ์ง์์ ์ฝ์ ๊ฒฐ๊ณผ
| ์ข ๋ฅ | ์ ๋ต | ๊ธฐ์กด PP-OCRv5 | korean-handwriting-rec |
|---|---|---|---|
| ์๊ธ์จ | ์ฒด๋ฉ์ฒ๋ถ์ ์ | ์ ๋ฉ์ฒ๋ถ์ | ์ฒด๋ฉ์ฒ๋ถ์ ์ |
| ์๊ธ์จ | ๋ฑ๋ก๋ฉดํ์ธ | ๋ฑ๋ก๋ฉดํด์ธ | ๋ฑ๋ก๋ฉดํ์ธ |
| ์๊ธ์จ ๊ธ์ก | 3235์ | 2 | 3235์ |
| ํ์ต์ ์๋ ํ์์ ์๊ธ์จ | ์ด๋ ฅ์ | ์ด ๋ น์ | ์ด๋ ฅ์ |
| ํ์ต์ ์๋ ํ์์ ์๊ธ์จ | ํ์จ | ํ์ | ํ์จ |
| ์์ ์ธ์ ๊ธ์ก | 59,470,000 | 59.470.000 | 59,470,000 |
| ์์ ์ธ์ ๋ ์ง | 2017.10.28 | 201710.28 | 2017.10.28 |
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๊ธฐ์กด PP-OCRv5 ๋์ ์ธ ์ ์๋์?
RapidOCR์์๋ ์ ์์์ฒ๋ผ ์ธ์ ๋ชจ๋ธ๊ณผ ์ฌ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธ์ ๊ฒ์ถ ๋ชจ๋ธ์ ๊ธฐ์กด ๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ OCR ๋๊ตฌ์ ์ฐ๊ฒฐํ ๋๋ ํด๋น ๋๊ตฌ์ ์ ๋ ฅ ์ ์ฒ๋ฆฌ์ ์ถ๋ ฅ ํด์ ๋ฐฉ์์ ํ์ธํด์ผ ํฉ๋๋ค.
GPU๋ ์ธ๋ถ API๊ฐ ํ์ํ๊ฐ์?
ONNX Runtime์ผ๋ก CPU์์ ์คํํ ์ ์์ผ๋ฉฐ, ์ธ์ํ ์ด๋ฏธ์ง๋ฅผ ์ธ๋ถ OCR API์ ๋ณด๋ด์ง ์์ต๋๋ค. ์คํ๋ผ์ธ์์ ์ฐ๋ ค๋ฉด ํจํค์ง์ ์ฌ์ฉํ ๊ฒ์ถยท์ธ์ ๋ชจ๋ธ์ ๋ฏธ๋ฆฌ ์ค๋นํด์ผ ํฉ๋๋ค. ๋ฐฉํฅ ๋ถ๋ฅ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ถ๋ฅ ๋ชจ๋ธ๋ ํ์ํฉ๋๋ค.
์ธ์๋ ๊ธ์๋ ์ฝ๋์?
๊ณต๋ฌธ์ ์ธ์ ๊ธ์๋ฅผ ํจ๊ป ํ์ตํ์ต๋๋ค. ์ ๋ถ ์์ ํ๊ฐ ๊ฒฐ๊ณผ์ ๊ธ์กยท๋ ์ง ์ธ์ ์์๋ ์ ํ์ ์์ต๋๋ค.
PDF์ ํ๋ ๋ฌธ์ ๊ตฌ์กฐ๋ ์ถ์ถํ๋์?
์๋์. ์ด ๋ชจ๋ธ์ ๊ธ์ ์์ญ์ ํ ์คํธ๋ฅผ ์ฝ์ต๋๋ค. PDF๋ฅผ ์ด๋ฏธ์ง๋ก ๋ฐ๊พธ๊ฑฐ๋ ํยท๋ ์ด์์์ ๋ถ์ํ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ง ์์ต๋๋ค.
ํ์ต ๋ฐฉ๋ฒ
PaddleOCR์ ์ฌ์ ํ์ต ๋ชจ๋ธ์ PyTorch๋ก ์ฎ๊ฒจ Mac GPU(MPS)์์ ๋ ๋จ๊ณ๋ก ์ถ๊ฐ ํ์ตํ์ต๋๋ค. ๊ธ์ ์ฌ์ ์ ๊ธฐ์กด PP-OCRv5 ํ๊ตญ์ด ๋ชจ๋ธ์ ๊ฒ์ ์ ์งํ์ต๋๋ค.
- ์๊ธ์จ 386๋ง ๋จ์ด๋ฅผ 1 epoch ํ์ตํ์ต๋๋ค. ์ํ์ 20%๋ ๊ฐ์ ๋จ์ด๋ฅผ ์ธ์์ฒด๋ก ๋ ๋๋งํด ์์์ต๋๋ค.
- ์ ๋ถ ์์ ์ธ์ ๊ธ์ 42๋ง ๋จ์ด์ ํ๊ธฐ์ฒด 30๋ง ๋จ์ด์ 1๋จ๊ณ ์๊ธ์จ 120๋ง ๋จ์ด๋ฅผ ์์ด ์ด์ด์ ํ์ตํ์ต๋๋ค.
ํ์ต ยท ONNX ๋ด๋ณด๋ด๊ธฐ ยท ๋จ์ด ํ๊ฐ ยท ๋ฌธ์ฅ ํ๊ฐ
๋ฐ์ดํฐ ์ถ์ฒ์ ๋ผ์ด์ ์ค
| ๋ฐ์ดํฐ | ์ฉ๋ |
|---|---|
| ๋์ฉ๋ ์๊ธ์จ OCR ๋ฐ์ดํฐ | ์๊ธ์จ ํ์ตยทํ๊ฐ |
| ๋ค์ํ ํํ์ ํ๊ธ ๋ฌธ์ OCR | ํ๊ธฐ์ฒดยท๊ณต๋ฌธ์ ์ธ์ ๊ธ์ ํ์ตยทํ๊ฐ |
| ํ๊ตญ์ด ๊ธ์์ฒด ์ด๋ฏธ์ง | ํ๋ฆผ์ฒด ๋ฌธ์ฅ ํ๊ฐ |
์ด ๋ชจ๋ธ์ ๊ณผํ๊ธฐ์ ์ ๋ณดํต์ ๋ถ์ ์ฌ์์ผ๋ก ํ๊ตญ์ง๋ฅ์ ๋ณด์ฌํ์งํฅ์์ ์ง์์ ๋ฐ์ ๊ตฌ์ถ๋ ์ AI Hub ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ต๋๋ค. ํ์ต ๋ฐ์ดํฐ๋ ์ด ์ ์ฅ์์ ํฌํจํ์ง ์์ผ๋ฉฐ, AI Hub์์ ๋ณ๋๋ก ์ ์ฒญํด์ผ ํฉ๋๋ค.
๋ชจ๋ธ๊ณผ ์ฝ๋๋ Apache-2.0์ผ๋ก ๊ณต๊ฐํฉ๋๋ค. AI Hub ๋ฐ์ดํฐ์๋ ๋ณ๋์ ์ด์ฉ ์กฐ๊ฑด์ด ์ ์ฉ๋ฉ๋๋ค.
๊ธฐ๋ฐ ๋ชจ๋ธ๊ณผ ๊ธ์ ์ฌ์ ์ PaddleOCR, PyTorch ๋ณํ์ PaddleOCR2Pytorch๋ฅผ ์ฌ์ฉํ์ต๋๋ค.