사내 AI 서비스 활용 POC
· 7 min read
커머스 플랫폼에 적용할만한 AI서비스들을 뽑아서 notebook으로 사업, 기획팀에 데모 발표 자료
개발 환경
- Package Manager : Poetry
- Python 3.11
- 엑셀 변환, sqlite3 : Pandas
- Jupyter Notebook
- 터미널 프로그레스 : tqdm
- lint & formatter : Ruff
- AI 오픈소스 모델
- openai-whisper : voice to text
- pyannote : 화자 분리
- paddleOCR : ocr
- langchain, langgraph, streamit : RAG 구현
- Ollama : 로컬 서빙(엑사원 3.5, 임베딩 모델)
- AI Driven 개발 : Cursor AI 활용, .cursorrules 작성
POC
OCR
- 이미지에서 텍스트 추출
- 텍스트 위치 정보 추출
# 프로토 타이핑 코드
import json
import os
from pprint import pprint
import cv2
import numpy as np
from paddleocr import PaddleOCR
from PIL import Image
def get_random_color():
c = tuple(np.random.randint(0, 256, 3).tolist())
return c
def draw_ocr_bbox(image, boxes, colors):
print(colors)
box_num = len(boxes)
for i in range(box_num):
box = np.reshape(np.array(boxes[i]), [-1, 1, 2]).astype(np.int64)
image = cv2.polylines(np.array(image), [box], True, colors[i], 2)
return image
def inference(
img: Image.Image, lang, confidence
): # -> tuple[Image, list[list[str | Any | tuple[Any, ...]]]]:
ocr = PaddleOCR(
use_angle_cls=True,
lang=lang,
rec_thresh=0.1,
use_gpu=False,
use_mp=True,
cls_thresh=0.1,
det_db_unclip_ratio=2.0,
det_box_thresh=0.5,
det_model_dir=f"./models/det/{lang}",
cls_model_dir=f"./models/cls/{lang}",
rec_model_dir=f"./models/rec/{lang}",
)
# img_path = img.name
img2np = np.array(img)
result = ocr.ocr(img2np, cls=True)[0]
pprint(result)
# rgb
image = img.convert("RGB")
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
final_result = [
dict(boxes=box, txt=txt, score=score, _c=get_random_color())
for box, txt, score in zip(boxes, txts, scores)
]
# score < 0.5 제거
final_result = [item for item in final_result if item["score"] > confidence]
im_show = draw_ocr_bbox(
image,
[item["boxes"] for item in final_result],
[item["_c"] for item in final_result],
)
im_show = Image.fromarray(im_show)
data = [
[json.dumps(item["boxes"]), round(item["score"], 3), item["txt"]]
for item in final_result
]
return im_show, data
import glob
import os
from IPython.display import display
from PIL import Image
# 맥에서 메모리 관련 이슈
os.environ["FLAGS_use_cuda_managed_memory"] = "false"
# jpg, jpeg 파일 찾기
image_files = glob.glob("*.jpg") + glob.glob("*.jpeg")
# 각 이미지 표시
for image_file in image_files:
print(image_file)
img = Image.open(image_file)
lang = "ch" # korean, en, ch, jp
confidence = 0.5
im_show, data = inference(img, lang, confidence)
display(im_show)
- 중국산 오픈소스인 paddleOCR를 활용하여 테스트 진행
- macbook m4 pro에서 2메가 이미지 ocr처리 속도 1초 이내 응답
- GPU 서버 없이 서비스 가능함
- 영어, 중국어는 품질이 굉장히 좋으나 한국어 처리가 부족함
이미지 인페인팅
- AI 지우개
- AI 영역 선택
이미지 배경제거
- 오픈소스 rembg로 구현
- 일반 서버에서 구동 가능
- macbook m4 pro에서 2메가 이미지 ocr처리 속도 1초 이내 응답
# https://m.childy.co.kr/goods/goods_view.php?goodsNo=1000039717
# https://www.jungoneshop.com/goods/goods_view.php?goodsNo=1000015457&mtn=1%5E%7C%5EBEST%5E%7C%5En
import glob
import PIL.Image
from IPython.display import display
from PIL import Image
from rembg import remove
jpg_files = glob.glob(pathname="*.jpg") + glob.glob("*.jpeg")
def remove_background(input_path: str):
return remove(Image.open(input_path))
removed_list = []
for jpg in jpg_files:
display(Image.open(jpg))
removed_background = remove_background(jpg)
print(removed_background.__class__)
removed_list.append(removed_background)
display(removed_background)
가상 피팅 : https://app.klingai.com/global/try-on/try-on/new
- 실제모델 + 가상 피팅
- 가상모델 생성 + 가상 피팅
- 영상 : 생성 시간이 매우 김(20분 이상), 고비용
케이스
- 휴먼 모델 이미지가 있을 경우 가상모델 생성 생략, 옷 이미지와 합성
- 생성시 프롬프트를 입력받아 모자를 생성, 뒤에 배경을 바다로, 카페로.. 또는 날씨가 화창, 흐린, 눈이 오는데 화창한 등등 샘플 예시
- 모델이 없을 경우 가상 모델을 프롬프트로 생성 : 자세한 프롬프트 예제를 제공해야함
- 모델을 N개 만들고 하나 선택
- 선택된 모델 이미지로 1번 실행
AI 상품 등록
- 상품등록 페이지 -> AI 상품등록
- 휴대폰으로 찍은 사진 업로드
- 배경 삭제
- (옵션) 이미지 필터링 (밝게, 뚜렷하게, 노이즈 제거, 특정 영역 inpainting)
- 상품 정보 추출
- 배경 교체
- 상품 임시 등록
쇼핑몰 AI 분석
- 판매통계 분석
- gemini 2.0 flash의 경우 multi model(이미지, 텍스트등) 을 지원함 -> 시각적인 막대그래프, 꺽은선등 지원
- 쇼핑몰의 니즈에 따라 프롬프트를 변경하여 몰에서 원하는 보고서 양식 생성 가능
- 좀 더 기능을 확장한다면?
- 어제 가장 많이 팔린 상품은?
- 한달간 반품이 가장 많았던 상품은?
AI 리뷰 요약(키워드)
상품 문의 AI 문의 대응
- 샘플
- 어드민
- AI아이콘 클릭 -> 자동 답변
- 상품 문의 발생시 이벤트 발행 -> AI 자동 답변 -> 어드민 웹푸시 or 모바일 어드민 앱푸시 -> 자동답변 승인
- 몰별, 상품별 답변 템플릿화
전화상담 TTS, 일대일문의_감정평가
- 전화상담 mp3 텍스트 추출 & 요약, AI 평가
- COS 1:1 문의 감정 평가
- OpenAI의 whisper를 활용하여 음성 -> 텍스트 변환
- macbook pro m4 에서 large모델 실행시 2분 29초 mp3음성파일은 50초 정도 소요됨
- 화자 분리의 경우 pyannote를 이용하여 분리 가능하며 최종 스크립트를 다시 llm에 요청하여 오타 수정 & 요약