โ ๋ฉ์ธ์ผ๋ก ๋์๊ฐ๊ธฐ
1. ๋ฌธ์ ์ ์
๋ฌธ์ ์ ์: ํ์ต ์๋ฃ์ ํฌํจ๋ ๊ฐ์ธ์ ๋ณด(์ด๋ฉ์ผ ์ฃผ์) ๋
ธ์ถ ์ํ์ฑ๊ณผ ํด๊ฒฐ ํ์์ฑ
๐ฏ ์ฒ๋ฆฌ ๋์
ํ์ผ: amazon-q-cli-install.html์ ์ฒจ๋ถ๋ ์ด๋ฏธ์ง 2๊ฐ
์์น: /02_web/assets/images/q-cli-install/
๊ฐ์ธ์ ๋ณด: ์ด๋ฉ์ผ ์ฃผ์ (๊ฐ์ธ ์๋ณ ์ ๋ณด)
์ฒ๋ฆฌ ์ผ์: 2025๋
9์ 26์ผ 09:00-09:05
โ๏ธ ๋ฒ์ ์๊ตฌ์ฌํญ
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฒ: ๊ฐ์ธ ์๋ณ ์ ๋ณด ๊ณต๊ฐ ์ ๋์ ํ์
- ํ์ต ์๋ฃ ๊ณต๊ฐ: ๋ถํน์ ๋ค์ ์ ๊ทผ ๊ฐ๋ฅํ ์น์ฌ์ดํธ
- ๋ฆฌ์คํฌ ์ ๊ฑฐ: ์ฌ์ ์๋ฐฉ์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ์กฐ์น
2. OCR ๊ธฐ์
OCR ๊ธฐ์ : Tesseract 5.5.1 ๊ธฐ๋ฐ ์ด๋ฉ์ผ ์ฃผ์ ์๋ ํ์ง ์๊ณ ๋ฆฌ์ฆ
๐ง ๊ธฐ์ ์คํ
import pytesseract
from PIL import Image, ImageFilter
import re
# ์ด๋ฉ์ผ ํจํด์ผ๋ก ์ ํํ ์์น ํ์ง
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT)
๐ OCR ์ฒ๋ฆฌ ๊ฒฐ๊ณผ
โ
builder-id-login.png
- ์ด๋ฏธ์ง ํฌ๊ธฐ: 854 ร 1148 ํฝ์
- ๋ฐ๊ฒฌ๋ ์์น: (120, 728, 427, 761)
- ์ฒ๋ฆฌ ์์ญ: (110, 718, 437, 771) - 10px ์ฌ๋ฐฑ ํฌํจ
โ
email-verification.png
- ์ด๋ฏธ์ง ํฌ๊ธฐ: 796 ร 1050 ํฝ์
- ๋ฐ๊ฒฌ๋ ์์น: (65, 362, 437, 390)
- ์ฒ๋ฆฌ ์์ญ: (55, 352, 447, 400) - 10px ์ฌ๋ฐฑ ํฌํจ
3. ๋ธ๋ฌ ์ฒ๋ฆฌ
๋ธ๋ฌ ์ฒ๋ฆฌ: ๊ฐ์ฐ์์ ๋ธ๋ฌ ๋ฐ๊ฒฝ 15px๋ก ์ ํํ ์์ ์ฒ๋ฆฌ
๐จ ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
- ์ด๋ฏธ์ง ๋ก๋: PIL๋ก ์๋ณธ ์ด๋ฏธ์ง ์ฝ๊ธฐ
- OCR ์คํ: pytesseract๋ก ํ
์คํธ์ ์์น ์ ๋ณด ์ถ์ถ
- ํจํด ๋งค์นญ: ์ ๊ทํํ์์ผ๋ก ์ด๋ฉ์ผ ์ฃผ์ ํ์ง
- ์์ญ ์ถ์ถ: ํด๋น ์์น์ ์ด๋ฏธ์ง ์์ญ ํฌ๋กญ
- ๋ธ๋ฌ ์ ์ฉ: ๊ฐ์ฐ์์ ๋ธ๋ฌ๋ก ํ
์คํธ ๊ฐ๋ฆผ
- ์ด๋ฏธ์ง ํฉ์ฑ: ์ฒ๋ฆฌ๋ ์์ญ์ ์๋ณธ์ ๋ถ์ฌ๋ฃ๊ธฐ
โก ์ด๊ธฐ vs ์ต์ข
๋ฐฉ์ ๋น๊ต
โ ์ด๊ธฐ ๋ฐฉ์ (๋ถ์ ํ)
์ถ์ ์ขํ๋ก ๋ธ๋ฌ ์ฒ๋ฆฌ โ ์ค์ ํ
์คํธ ์์น์ ๋ถ์ผ์น
โ
์ต์ข
๋ฐฉ์ (์ ํ)
OCR ๊ธฐ๋ฐ ์ ํํ ์์น ํ์ง โ 100% ์ ํํ ์ด๋ฉ์ผ ์ฃผ์ ์์ ์ฒ๋ฆฌ
4. ์๋ํ ๊ตฌํ
์๋ํ ๊ตฌํ: Python ์คํฌ๋ฆฝํธ๋ฅผ ํตํ ๋ฐฐ์น ์ฒ๋ฆฌ ๋ฐ ํ์ง ๊ฒ์ฆ
๐ง ์๋ํ ๋๊ตฌ๋ค
- blur_email_in_images.py: ๊ธฐ๋ณธ ์ด๋ฉ์ผ ๋ธ๋ฌ ์ฒ๋ฆฌ
- precise_email_blur.py: ์ ๋ฐ OCR ๊ธฐ๋ฐ ์ฒ๋ฆฌ
- blur_email_final.py: ์ต์ข
์์ฑ ๋ฒ์
๐ก๏ธ ๋ณด์ ์กฐ์น
๋ฐฑ์
๋ฐ ๋ณต์
- ์๋ณธ ๋ฐฑ์
: original_[ํ์ผ๋ช
].png ํํ๋ก ๋ณด๊ด
- ์ฒ๋ฆฌ ํ์ผ: ๊ธฐ์กด ํ์ผ๋ช
์ ์งํ์ฌ ๋งํฌ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
- ๋ณต์ ๊ฐ๋ฅ: ํ์์ ์๋ณธ์ผ๋ก ๋๋๋ฆฌ๊ธฐ ๊ฐ๋ฅ
5. ์ค์ ์ ์ฉ ์ฌ๋ก
์ค์ ์ฌ๋ก: Amazon Q CLI ์ค์น ๊ฐ์ด๋์์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์ ์ฉ
๐ ์ ์ฉ ๋์
Amazon Q CLI ์ค์น ๊ฐ์ด๋์์ ๋ค์ ์ด๋ฏธ์ง๋ค์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ต๋๋ค:
Builder ID ๋ก๊ทธ์ธ ํ๋ฉด
โ
์ด๋ฉ์ผ ์ฃผ์ ์๋ ๋ธ๋ฌ ์ฒ๋ฆฌ
์ด๋ฉ์ผ ์ธ์ฆ ํ๋ฉด
โ
์ด๋ฉ์ผ ์ฃผ์ ์๋ ๋ธ๋ฌ ์ฒ๋ฆฌ
๐ฏ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: OCR๋ก ํ์ง๋ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์๋์ผ๋ก ๋ธ๋ฌ ์ฒ๋ฆฌ๋จ
- ๊ฐ๋
์ฑ ์ ์ง: ์ ์ฒด์ ์ธ ํ๋ฉด ๊ตฌ์ฑ๊ณผ UI ์์๋ ๊ทธ๋๋ก ์ ์ง
- ํ์ต ํจ๊ณผ: ์ค์ ์ฌ์ฉ ๊ณผ์ ์ ๋ณด์ฌ์ฃผ๋ฉด์๋ ๊ฐ์ธ์ ๋ณด๋ ์์ ํ ๋ณดํธ
- ์๋ํ ํจ๊ณผ: ์๋ ํธ์ง ์์ด ์๋์ผ๋ก ๊ฐ์ธ์ ๋ณด ํ์ง ๋ฐ ์ฒ๋ฆฌ
- ์ ํํ ์ฒ๋ฆฌ: ์ด๋ฉ์ผ ์ฃผ์ ์์ญ๋ง ์ ํํ ๋ธ๋ฌ ์ฒ๋ฆฌ, ๋ค๋ฅธ ํ
์คํธ๋ ์ ๋ช
ํ๊ฒ ์ ์ง
๐ก ์ค๋ฌด ์ ์ฉ ํ: ์ด ๋ฐฉ์์ผ๋ก ์คํฌ๋ฆฐ์ท์ด ํฌํจ๋ ๋ชจ๋ ๋ฌธ์์์ ๊ฐ์ธ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๋ณดํธํ ์ ์์ต๋๋ค.
ํนํ ํ์ต ์๋ฃ, ๋งค๋ด์ผ, ๋ธ๋ก๊ทธ ํฌ์คํธ ๋ฑ์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
6. ๊ฒฐ๊ณผ ๊ฒ์ฆ
๊ฒฐ๊ณผ ๊ฒ์ฆ: OCR ์ธ์๋ฅ 100%, ๊ฐ์ธ์ ๋ณด ๋ณดํธ ์๋ฃ
๐ ์ฒ๋ฆฌ ์ ํ๋
- OCR ์ธ์๋ฅ : 100% (์ด๋ฉ์ผ ์ฃผ์ ์ ํํ ํ์ง)
- ๋ธ๋ฌ ๊ฐ๋: ๊ฐ์ฐ์์ ๋ธ๋ฌ ๋ฐ๊ฒฝ 15px
- ์ฌ๋ฐฑ ์ฒ๋ฆฌ: ํ
์คํธ ๊ฒฝ๊ณ์์ 10px ์ถ๊ฐ ์ฌ๋ฐฑ
- ํ์ง ๋ณด์กด: ํ์ต ์๋ฃ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ณธ ํ์ง ์ ์ง
๐ฏ ํจ๊ณผ ๋ฐ ์์
๊ฐ์ธ์ ๋ณด ๋ณดํธ: ๊ฐ์ธ ์๋ณ ์ ๋ณด ์์ ๊ฐ๋ฆผ, ๋ฒ์ ๋ฆฌ์คํฌ ์ ๊ฑฐ
๊ธฐ์ ์ ํ์ : OCR ๊ธฐ๋ฐ ์ ํํ ์์น ํ์ง, ์๋ ์ขํ ์ค์ ๋๋น ์ ํ๋ ํฅ์
๊ต์ก์ ๊ฐ์น: ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๊ธฐ์ ์ค์ฆ, ์ค๋ฌด ์ ์ฉ ๊ฐ๋ฅํ ์๋ํ ์๋ฃจ์
๐ ํฅํ ๊ฐ์ ๋ฐฉ์
- ์๋ํ ํ์ฅ: ๋ค๋ฅธ ๊ฐ์ธ์ ๋ณด ํจํด ํ์ง (์ ํ๋ฒํธ, ์ฃผ๋ฏผ๋ฒํธ ๋ฑ)
- ๋ฐฐ์น ์ฒ๋ฆฌ: ์ฌ๋ฌ ์ด๋ฏธ์ง ๋์ ์ฒ๋ฆฌ
- CI/CD ํตํฉ: ํ์ดํ๋ผ์ธ์ ๊ฐ์ธ์ ๋ณด ๊ฒ์ฌ ๋จ๊ณ ์ถ๊ฐ
- ์ ํ๋ ํฅ์: ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ ๊ฐ์ธ์ ๋ณด ํ์ง ๋ชจ๋ธ ์ ์ฉ