๋ฌธ์ž ์ธ์‹ ์‹œ์Šคํ…œ Tesseract 5.0 ์ถœ์‹œ

Tesseract 4.1 ๊ด‘ํ•™ ํ…์ŠคํŠธ ์ธ์‹ ์‹œ์Šคํ…œ์ด ์ถœ์‹œ๋˜์–ด ๋Ÿฌ์‹œ์•„์–ด, ์นด์žํ์–ด, ๋ฒจ๋กœ๋ฃจ์‹œ์–ด ๋ฐ ์šฐํฌ๋ผ์ด๋‚˜์–ด๋ฅผ ํฌํ•จํ•œ 8๊ฐœ ์ด์ƒ์˜ ์–ธ์–ด๋กœ UTF-100 ๋ฌธ์ž ๋ฐ ํ…์ŠคํŠธ ์ธ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋‚˜ HTML(hOCR), ALTO(XML), PDF ๋ฐ TSV ํ˜•์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ์›๋ž˜ Hewlett Packard ์—ฐ๊ตฌ์†Œ์—์„œ 1985~1995๋…„์— ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, 2005๋…„์— ์ฝ”๋“œ๋Š” Apache ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๊ณต๊ฐœ๋˜์—ˆ์œผ๋ฉฐ Google ์ง์›์˜ ์ฐธ์—ฌ๋กœ ๋”์šฑ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” Apache 2.0 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Tesseract์—๋Š” OCR ๊ธฐ๋Šฅ์„ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ libtesseract ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Tesseract๋ฅผ ์ง€์›ํ•˜๋Š” ํƒ€์‚ฌ GUI ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” gImageReader, VietOCR ๋ฐ YAGF๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ธ์‹ ์—”์ง„์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๋ฌธ์ž ํŒจํ„ด ์ˆ˜์ค€์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ธ์‹ํ•˜๋Š” ํด๋ž˜์‹ ์—”์ง„๊ณผ LSTM ์ˆœํ™˜ ์‹ ๊ฒฝ๋ง ๊ธฐ๋ฐ˜ ๊ธฐ๊ณ„ ํ•™์Šต ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ์—”์ง„์€ ์ „์ฒด ๋ฌธ์ž์—ด์„ ์ธ์‹ํ•˜๊ณ  ์ •ํ™•๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์„ฑ ํ•™์Šต ๋ชจ๋ธ์ด 123๊ฐœ ์–ธ์–ด๋กœ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด OpenMP ๋ฐ SIMD ๋ช…๋ น์–ด AVX2, AVX, NEON ๋˜๋Š” SSE4.1์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Tesseract 5.0์˜ ์ฃผ์š” ๊ฐœ์„  ์‚ฌํ•ญ:

  • ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์€ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” API ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ libtesseract API๋Š” ๋” ์ด์ƒ ๋…์  GenericVector ๋ฐ STRING ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ  std::string ๋ฐ std::Vector๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
  • ์†Œ์Šค ํ…์ŠคํŠธ ํŠธ๋ฆฌ๊ฐ€ ์žฌ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์šฉ ํ—ค๋” ํŒŒ์ผ์ด include/tesseract ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์žฌ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๋ชจ๋“  malloc ๋ฐ free ํ˜ธ์ถœ์ด C++ ์ฝ”๋“œ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ผ๋ฐ˜์ ์ธ ํ˜„๋Œ€ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ARM ๋ฐ ARM64 ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ตœ์ ํ™”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ARM NEON ๋ช…๋ น์–ด๋Š” ๊ณ„์‚ฐ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์— ๊ณตํ†ต์ ์ธ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ณ„์‚ฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ›ˆ๋ จ ๋ชจ๋ธ ๋ฐ ํ…์ŠคํŠธ ์ธ์‹์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ชจ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ชจ๋“œ๋Š” ๋” ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋” ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. LSTM ์—”์ง„์—์„œ๋Š” float32 ๋น ๋ฅธ ๋ชจ๋“œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • NFC(Normalization Form Canonical) ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ๋‹ˆ์ฝ”๋“œ ์ •๊ทœํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜ต์…˜(--loglevel)์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Autotools ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์žฌ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๋น„์žฌ๊ท€ ๋ชจ๋“œ๋กœ ๋นŒ๋“œํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Git์˜ "๋งˆ์Šคํ„ฐ" ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ด "๋ฉ”์ธ"์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • M1 ์นฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” macOS ๋ฐ Apple ์‹œ์Šคํ…œ์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    ์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€