-
[5월 4주차-5/26]손글씨 인식부터 배경 제거까지, OCR 기반 이미지 처리 앱 만들기!Why Not SW CAMP 5기/수업 기록 2025. 5. 26. 15:02
손글씨 인식(OCR) 및 이미지 배경 제거 기능을 직접 구현해보는 프로젝트를 진행했습니다. Hugging Face의 TrOCR 모델과 Segment Anything Model(SAM)을 활용하여 실제 작동하는 웹 애플리케이션을 만드는 과정이었습니다.
✅ 프로젝트 개요
- 손글씨 이미지 업로드 및 인식 (OCR)
- 캔버스에서 직접 손글씨 입력 후 인식
- 이미지에서 객체 선택 후 배경 제거
- 모든 기능은 Gradio 웹 인터페이스로 확인 가능
1. 손글씨 인식 앱: TrOCR 기반 OCR 모델 사용
📦 환경 설정 및 예제 데이터 다운로드
Colab에서 실행을 위한 패키지 설치 및 예제 손글씨 이미지들을 다운로드했습니다.
!pip install -r requirements-colab.txt !wget [손글씨 이미지들 다운로드]
🔧 모델 불러오기
Hugging Face의 TrOCRProcessor와 VisionEncoderDecoderModel을 사용해 OCR 모델을 불러왔습니다.
from transformers import TrOCRProcessor, VisionEncoderDecoderModel processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten") model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")
🖼 이미지 인식 함수 정의
업로드된 이미지를 PIL로 불러온 후, OCR 모델에 입력하여 텍스트를 추출하는 기능을 구현했습니다.
def recognize_text(img): pixel_values = processor(images=img, return_tensors="pt").pixel_values generated_ids = model.generate(pixel_values) return processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
🎨 손글씨 캔버스 지원
Gradio의 Sketchpad 기능을 통해 사용자가 직접 그림판에 글씨를 쓰면 해당 이미지를 인식하는 기능도 구현했습니다.
2. 배경 제거 앱: Meta의 SAM 모델 활용
🤖 Segment Anything Model(SAM) 사용
이미지에서 사용자가 클릭한 객체를 중심으로 마스크를 생성하고, 배경을 제거한 이미지를 반환하는 기능을 구현했습니다.
from segment_anything import SamPredictor # 모델 로드 sam = sam_model_registry["vit_b"](checkpoint=sam_checkpoint) predictor = SamPredictor(sam)
🖱 유저 입력 좌표 기반 마스킹
Gradio의 Image 컴포넌트를 통해 클릭한 위치 좌표를 SAM에 입력하고, 해당 객체만 남기는 방식으로 배경을 제거했습니다.
def remove_background(image, click_x, click_y): predictor.set_image(np.array(image)) masks, scores, logits = predictor.predict(point_coords=[[click_x, click_y]], point_labels=[1]) # 마스크 적용 후 배경 제거된 이미지 반환
3. Gradio를 활용한 웹 UI 구현
Blocks, Tabs, Sketchpad, Image 등의 컴포넌트를 조합하여, 손글씨 인식과 배경 제거 기능을 손쉽게 사용할 수 있는 웹 UI를 구성했습니다.
with gr.Blocks() as demo: with gr.Tab("Handwriting OCR"): # 업로드 + 캔버스 기능 with gr.Tab("Remove Background"): # 클릭 기반 배경 제거 기능
✨ 마무리
이번 실습을 통해 이미지 처리 분야에서 자주 활용되는 두 가지 기술—OCR과 세그멘테이션—을 실전으로 다뤄보았습니다. Hugging Face와 Meta AI의 모델을 실제 애플리케이션에 적용하고, Gradio로 빠르게 프로토타이핑까지 진행해보는 값진 시간이었습니다.
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[5월 4주차-5/27]ChatGPT와 뉴스 검색 챗봇 만들기: 자연어 처리 실전 프로젝트 (2) 2025.05.27 [5월 3주차-5/22]🧠 LangChain과 GPT-4o를 활용한 대화형 AI 시스템 구축 실습 (2) 2025.05.22 [5월 3주차-5/21]📈 GPT + Streamlit + yfinance로 주식 정보 챗봇 만들기 (2) 2025.05.21 [5월 3주차-5/20(2)]🎙️ Whisper + GPT-4로 회의록 자동 생성 시스템 만들기 (요약부터 교정, 워드 저장까지) (1) 2025.05.20 [5월 3주차-5/20(1)]AI 기반 문서 요약 및 회의록 자동화 시스템 (1) 2025.05.20