/camp-12

🦊 Toonslator | μƒλ™κ°μžˆλŠ” μ›Ήνˆ° μžλ™ λ²ˆμ—­ μ„œλΉ„μŠ€

Primary LanguagePython

[CV-11] Toonslator | μƒλ™κ°μžˆλŠ” μ›Ήνˆ° μžλ™ λ²ˆμ—­ μ„œλΉ„μŠ€

πŸ’ νŒ€ μ†Œκ°œ

CV 11쑰 🦊ꡬ미호🦊

λ₯˜κ±΄ 심건희 μœ€νƒœμ€€ 이강희 이예라
Blog Blog Blog Blog Blog
λͺ¨λΈλ§
νŒŒμ΄ν”„λΌμΈ
데이터 μˆ˜μ§‘
λͺ¨λΈλ§
연ꡬ
데이터 μˆ˜μ§‘
λ°±μ—”λ“œ
λ°œν‘œμžλ£Œ
ν˜‘μ—… 관리
ν”„λ‘ νŠΈμ—”λ“œ
μ„œλΉ„μŠ€ 배포
νŒŒμ΄ν”„λΌμΈ
λ°±μ—”λ“œ
μ„œλΉ„μŠ€ 배포
νŒŒμ΄ν”„λΌμΈ

python pytorch ubuntu git github React FastAPI

λͺ©μ°¨

πŸ“ƒ ν”„λ‘œμ νŠΈ μ†Œκ°œ

πŸ§‘β€πŸŽ¨Toonslator🎨

μ €ν¬μ˜ μ„œλΉ„μŠ€λŠ” μž‘ν’ˆμ„ ν•΄μ™Έλ‘œ μ§„μΆœν•˜κ³  싢은 μ›Ήνˆ° μž‘κ°€λ‚˜ λ²ˆμ—­ 및 νŽΈμ§‘μ— 어렀움을 κ²ͺλŠ” λ²ˆμ—­-νŽΈμ§‘μžλ₯Ό μœ„ν•œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

(Webtoon)+(Translation)을 합쳐 ToonslatorλΌλŠ” μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

Environments

  • Ubuntu 18.04.5 LTS
  • Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz
  • NVIDIA Tesla V100-PCIE-32GB
  • React
  • pytorch
  • FastAPI
  • Nginx
  • OpenCV

Repository ꡬ쑰

<final-project-level2-cv-11>
|
πŸ“œ-- README.md
πŸ“‚-- notebooks
|   πŸ“œ-- font_ex.ipynb
|   πŸ“„-- imagemaker.py
|   πŸ“„-- tesseract_boxes.py
|   πŸ“œ-- txt2json.ipynb
βš™οΈ-- poetry.lock
βš™οΈ-- pyproject.toml
πŸ“‚-- src
    πŸ“„-- __init__.py
    πŸ“‚-- backend
    |   πŸ“„-- __main__.py
    |   πŸ“„-- main.py
    |   πŸ“‚-- pipeline
    |   |   πŸ“„-- __init_.py
    |   |   πŸ“„-- typical_pipeline.py
    |   |   πŸ“„-- untypical_pipeline.py
    |   πŸ“‚-- routers
    |       πŸ“„-- machine_translation.py
    |       πŸ“„-- test.py
    |       πŸ“„-- txt_extraction.py
    |       πŸ“„-- untypical_generation.py
    |       πŸ“„-- untypical_machine_translation.py
    |       πŸ“„-- untypical_txt_extraction.py
    πŸ“‚-- frontend
    |   πŸ“œ-- README.md
    |   πŸ“œ-- package-lock.json
    |   πŸ“œ-- package.json
    |   πŸ“‚-- public
    |   πŸ“‚-- src
    πŸ“‚-- model
        πŸ“‚-- MachineTranslate
        |   πŸ“„-- papago_MT.py
        πŸ“‚-- OCR
        |   πŸ“„-- clova_OCR.py
        |   πŸ“„-- tesseract_OCR.py
        πŸ“„-- __init__.py
        πŸ“‚-- font_classifier
        |   πŸ“„-- FC.py
        |   πŸ“„-- dataset_font.py
        |   πŸ“„-- inference_font.py
        |   πŸ“„-- loss.py
        |   πŸ“„-- model_font.py
        |   πŸ“œ-- requirements.txt
        |   πŸ“„-- scheduler.py
        |   πŸ“„-- train_font.py
        |   πŸ“‚-- weights
        πŸ“‚-- font_color
        |   πŸ“„-- font_color.py
        πŸ“‚-- font_generator
        |   πŸ“‚-- gasnext
        |   πŸ“‚-- mxfont
        πŸ“‚-- svg2ttf
            πŸ“œ-- example.json
            πŸ“„-- svgs2ttf.py

ν”„λ‘œμ νŠΈ λ°°κ²½

디지털 λ§Œν™”μ‹œμž₯의 점유율이 점차 λ†’μ•„μ Έ κ²°κ΅­ 2019λ…„μ—λŠ” 인쇄 λ§Œν™” μ‹œμž₯을 λ›°μ–΄ λ„˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ†ŒλΉ„μžλ“€μ˜ 성곡적 λ°˜μ‘μœΌλ‘œ μ„Έκ³„μ μœΌλ‘œ 수좜 μ‹œμž₯이 μ»€μ§€λŠ” μ€‘μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ²ˆμ—­ 및 ν˜„μ§€ν™” 과정은 μ›Ήνˆ° 수좜 κ³Όμ •μ—μ„œ κ±Έλ¦ΌλŒμž…λ‹ˆλ‹€.

image

λ¬Έμ œμ •μ˜ 및 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

  • λ¬Έμ œμ •μ˜
    • μ μ ˆν•œ νŽΈμ§‘ 도ꡬ 없이 λ²ˆμ—­μ„ ν•  경우 λΉ„μš©μ΄ 증가
    • ν˜„μ§€ν™”κ°€ 잘 λ˜μ§€ μ•ŠλŠ” 경우 μˆ˜μš” κ°μ†Œλ‘œ μΈν•œ 수읡 ν•˜λ½
  • ν”„λ‘œμ νŠΈ λͺ©ν‘œ
    • νŽΈμ§‘ μžλ™ν™”λ₯Ό 톡해 λ²ˆμ—­κ³Όμ •μ˜ λΉ„μš©μ„ μ΅œμ†Œν™”ν•˜κ³  μ†ŒλΉ„μž 증가λ₯Ό ν†΅ν•œ 수읡 κ·ΉλŒ€ν™”λ₯Ό λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€ νƒ€κ²Ÿ
    • κΈ€λ‘œλ²Œν™”λ₯Ό μ›ν•˜λŠ” μ›Ήνˆ° μž‘κ°€
    • λ²ˆμ—­ 및 νŽΈμ§‘μ— 어렀움을 κ²ͺλŠ” μ›Ήνˆ° λ²ˆμ—­-νŽΈμ§‘μž

image

μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜

  • Frontend
    • HTML
    • CSS
    • React
  • Backend
    • FastAPI
  • API
    • Clova OCR
    • Papago κΈ°κ³„λ²ˆμ—­

image

μ„œλΉ„μŠ€ νŒŒμ΄ν”„λΌμΈ

  1. μ‚¬μš©μžλ‘œλΆ€ν„° λ°°κ²½, λŒ€μ‚¬ 효과음 이미지λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.
  2. λŒ€μ‚¬ μ΄λ―Έμ§€λŠ” λŒ€μ‚¬ νŒŒμ΄ν”„λΌμΈμ„ 톡해 λŒ€μ‚¬μ˜ μœ„μΉ˜λ₯Ό μ°Ύκ³ , λ²ˆμ—­ 및 폰트λ₯Ό λΆ„λ₯˜κ³Όμ •μ„ κ±°μΉ©λ‹ˆλ‹€.
  3. 효과음 νŒŒμ΄ν”„λΌμΈμ€ λŒ€μ‚¬ νŒŒμ΄ν”„λΌμΈμ„ ν†΅ν•œ output을 μ‚¬μš©ν•˜μ—¬ 폰트 μƒμ„±ν•˜λŠ” 과정을 κ±°μΉ©λ‹ˆλ‹€.
  4. λ²ˆμ—­λœ 결과물을 μ΄μš©ν•˜μ—¬ 폰트λ₯Ό μˆ˜μ •, μœ„μΉ˜ λ³€κ²½, 색 λ³€κ²½ λ“±μ˜ νŽΈμ§‘μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. νŽΈμ§‘μ΄ μ™„λ£Œλ˜λ©΄ μ΅œμ’… 결과물을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

image

κ²°κ³Όλ¬Ό

image

πŸ“ΉDemo

ν”„λ‘œμ νŠΈ μ˜μƒ

https://www.youtube.com/watch?v=ILJyhd24qd4 ggg

πŸš€μ‹€ν–‰λ°©λ²•

Frontend

  1. 경둜 이동
cd src
cd frontend
  1. Nodejs μ„€μΉ˜ (μš°λΆ„νˆ¬)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - &&\
sudo apt-get install -y nodejs
  1. νŒ¨ν‚€μ§€ μ„€μΉ˜
npm install
  1. μ„œλ²„ μ‹œμž‘
npm start

Backend

  1. νŒ¨ν‚€μ§€ ν™˜κ²½ μ„€μ •
pip install --user poetry
# (sudo) vi ~/.bashrc μž…λ ₯ ν›„, 맨 μ•„λž˜μ— PATH="$HOME/.local/bin:$PATH" μΆ”κ°€ (ν•œ 번만 ν•˜λ©΄ 됨)
# ν”„λ‘œμ νŠΈ 폴더 내에 κ°€μƒν™˜κ²½μ„ μ €μž₯
poetry config virtualenvs.in-project true
# poetry κ°€μƒν™˜κ²½ λ‚΄μ—μ„œ μ‹€ν–‰
poetry shell
  1. κ°€μ€‘μΉ˜, font λ‹€μš΄λ‘œλ“œ 및 ν™˜κ²½λ³€μˆ˜ μ„€μ •
  • Font Classifier κ°€μ€‘μΉ˜
# 링크1 : https://drive.google.com/file/d/1a28eDYyOUrJEhvLHsfI1iFBHhA7LlWl7/view?usp=sharing
# -O μ˜΅μ…˜μ— λ‹€μš΄λ°›μ„ 경둜 지정
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1a28eDYyOUrJEhvLHsfI1iFBHhA7LlWl7' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1a28eDYyOUrJEhvLHsfI1iFBHhA7LlWl7" -O /opt/ml/final-project-level2-cv-11/src/model/font_classifier/weights/typical/weight.pth && rm -rf ~/cookies.txt
# 링크2 : https://drive.google.com/file/d/107iA6ir5Fbii-5JimkGaL-HBomTDeKR1/view?usp=sharing
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=107iA6ir5Fbii-5JimkGaL-HBomTDeKR1' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=107iA6ir5Fbii-5JimkGaL-HBomTDeKR1" -O /opt/ml/final-project-level2-cv-11/src/model/font_classifier/weights/untypical/weight.pth && rm -rf ~/cookies.txt
  • Font Generator κ°€μ€‘μΉ˜
# mxfont링크: https://drive.google.com/file/d/1URxBMtHx1SXAAJ4b4A2jbmD44S1Ns1Jp/view?usp=sharing
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1URxBMtHx1SXAAJ4b4A2jbmD44S1Ns1Jp' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1URxBMtHx1SXAAJ4b4A2jbmD44S1Ns1Jp" -O /opt/ml/final-project-level2-cv-11/src/model/font_generator/mxfont/mxfont_weight.pth && rm -rf ~/cookies.txt
# gasnext링크: https://drive.google.com/file/d/173SEHgYuSoJ6eze-BaofzJutjd6bAIGo/view?usp=sharing
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=173SEHgYuSoJ6eze-BaofzJutjd6bAIGo' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=173SEHgYuSoJ6eze-BaofzJutjd6bAIGo" -O /opt/ml/final-project-level2-cv-11/src/model/font_generator/gasnext/checkpoints/gasnext_weight.pth && rm -rf ~/cookies.txt
  • Script Font λ‹€μš΄λ‘œλ“œ
# 링크 : https://drive.google.com/file/d/1p7Rwc08Xbk9bHGIE_7UoWl5OQksfVHrm/view?usp=sharing
mkdir -p data/font/typical
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1p7Rwc08Xbk9bHGIE_7UoWl5OQksfVHrm' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1p7Rwc08Xbk9bHGIE_7UoWl5OQksfVHrm" -O /opt/ml/final-project-level2-cv-11/data/font/typical.zip && rm -rf ~/cookies.txt
unzip data/font/typical.zip -d data/font
  • Effect Font λ‹€μš΄λ‘œλ“œ
# 링크 : https://drive.google.com/file/d/14rTAp7WJpr4Cl4qLrh5H7qgeiy4SfHw9/view?usp=sharing
mkdir -p data/font/untypical
wget --load-cookies ~/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies ~/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=14rTAp7WJpr4Cl4qLrh5H7qgeiy4SfHw9' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=14rTAp7WJpr4Cl4qLrh5H7qgeiy4SfHw9" -O /opt/ml/final-project-level2-cv-11/data/font/untypical.zip && rm -rf ~/cookies.txt
unzip data/font/untypical.zip -d data/font
  • .env 파일 μ„€μ •
# .env파일 λ§Œλ“€κ³  μ•„λž˜ μž…λ ₯
# μ‚¬μš©μ„ μœ„ν•΄μ„œ 두 μ‚¬μ΄νŠΈμ—μ„œ keyλ₯Ό λ°œκΈ‰λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.
# 파파고:https://developers.naver.com/docs/papago/papago-nmt-example-code.md
# Clova OCR: https://guide-fin.ncloud-docs.com/docs/ocr-ocr-1-4

PAPAGO_ID="인증 IDλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”"
PAPAGO_SECRET="인증 keyλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”"
CLOVA_URL="인증 URL을 μž…λ ₯ν•΄μ£Όμ„Έμš”"
CLOVA_KEY="인증 keyλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”"
  • μ‹€ν–‰
# Backend (FastAPI) μ‹€ν–‰
cd src/
python -m backend

πŸ—žοΈReference