Project

naiso

0.0
No release in over 3 years
긴 상세 이미지를 단색/그라데이션 배경 영역을 기준으로 자동 분할합니다.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

 Project Readme

Naiso

상품 상세 이미지 섹션 분할 도구

긴 세로형 상품 상세 이미지를 섹션별로 자동 분할하고, 텍스트 유무를 분석하는 Ruby gem입니다.

설치

시스템 요구사항

# macOS
brew install vips
brew install tesseract tesseract-lang

# Ubuntu/Debian
sudo apt-get install libvips-dev tesseract-ocr tesseract-ocr-kor

Gem 설치

gem install naiso

또는 Gemfile에 추가:

gem 'naiso'

버전 정보

  • Ruby 2.7+
  • libvips 8.10+
  • Tesseract 4.x / 5.x

기능

1. 이미지 분할

긴 상세 이미지를 다음 기준으로 자동 분할합니다:

감지 유형 설명
단색 영역 연속된 solid color 배경 (variance < threshold)
구분선 가로 방향 구분선 (위아래 여백이 단색)
배경색 전환 흰색→회색 등 배경색이 바뀌는 지점
복잡도 기반 최대 높이 초과 시 엣지 밀도가 낮은 지점

2. 텍스트 분석 (OCR)

분할된 섹션에서 텍스트 유무와 크기 정보를 분석합니다.

분석 정보:

  • 텍스트 유무 (has_text)
  • 글자 수 (text_length)
  • 단어별 위치/크기 (x, y, width, height)
  • 통계 (min/max/avg 높이, 단어 수)

3. 이미지 병합

분할된 섹션들을 다시 하나로 합칩니다.

CLI 사용법

# 기본 분할
naiso detail.jpg

# 옵션 지정
naiso detail.jpg -t 5 -g 100 -m 400

# 텍스트 분석 포함
naiso detail.jpg -c

# JSON 결과 저장
naiso detail.jpg -c -j result.json

# 분할 후 병합
naiso detail.jpg --merge

# 기존 섹션만 병합
naiso --merge-only sections/

CLI 옵션

옵션 설명 기본값
-t, --threshold FLOAT 단색 판정 임계값 10.0
-g, --gap INT 최소 단색 영역 높이 50px
-m, --min-height INT 최소 섹션 높이 너비 × 2/3
-M, --max-height INT 최대 섹션 높이 너비 × 1.5
-o, --output DIR 출력 디렉토리 sections/
-c, --check-text 텍스트 분석 수행 -
-j, --json FILE JSON 결과 저장 경로 자동 생성
--merge 분할 후 병합 -
--merge-only DIR 섹션 병합만 수행 -
-v, --version 버전 표시 -
-h, --help 도움말 표시 -

Ruby API

require 'naiso'

# 이미지 분할
config = Naiso::SplitConfig.new(
  variance_threshold: 5.0,
  min_gap_height: 100,
  min_section_height: 400
)
splitter = Naiso::ImageSplitter.new(config)
result = splitter.split('detail.jpg')

puts result.output_files      # 생성된 파일 목록
puts result.split_points      # 분할 위치
puts result.uniform_regions   # 감지된 단색 영역

# 텍스트 분석
detector = Naiso::TextDetector.new
analysis = detector.detect_with_size('section_01.jpg')

puts analysis[:has_text]      # true/false
puts analysis[:text]          # 검출된 텍스트
puts analysis[:stats]         # 통계 정보

# 여러 이미지 분석
detector.analyze_images(result.output_files, json_path: 'result.json')

# 이미지 병합
Naiso::ImageMerger.merge_sections('sections/')

# 개별 이미지 병합
Naiso::ImageMerger.merge(['img1.jpg', 'img2.jpg'], 'output.jpg')

출력 파일

sections/
├── detail_section_01.jpg
├── detail_section_02.jpg
├── ...
├── detail_text_analysis.json  # -c 옵션 시
└── detail_merged.jpg          # --merge 옵션 시

JSON 출력 형식

{
  "generated_at": "2025-12-10T18:00:00+09:00",
  "total_images": 11,
  "images_with_text": 10,
  "images_without_text": 1,
  "sections": [
    {
      "filename": "detail_section_01.jpg",
      "has_text": true,
      "text_length": 22,
      "text": "검출된 텍스트...",
      "stats": {
        "min_height": 15,
        "max_height": 48,
        "avg_height": 30.6,
        "word_count": 18,
        "filtered_count": 5
      },
      "words": [
        {
          "text": "단어",
          "x": 100,
          "y": 50,
          "width": 40,
          "height": 30,
          "conf": 92.5
        }
      ]
    }
  ]
}

의존성

라이선스

MIT License