ClawKit Logo
ClawKitReliability Toolkit
Back to Registry
Official Verified

bizcard

Business card scanner + Google Contacts manager. Auto-detects business card images, extracts contact info via OCR (imageModel), confirms with user, saves to Google Contacts with configurable name format and card photo. Trigger: image that looks like a business card, or keywords "명함", "bizcard", "연락처 저장". Settings: /bizcard config

skill-install — Terminal

Install via CLI (Recommended)

clawhub install openclaw/skills/skills/project820/bizcard
Or

Bizcard — 명함 스캐너 + 연락처 관리

명함 이미지를 받으면 자동 감지 → 전처리 → OCR → 사용자 확인 → Google Contacts 저장까지 처리한다.

Pipeline Overview

이미지 수신 → 명함 자동 감지
→ Gemini Flash OCR → 필드 파싱 → Name 포맷 적용
→ 사용자 확인 → 중복 감지 → Nano Banana Pro 보정 → Google Contacts 저장 + 사진 첨부

1. 자동 감지 (Trigger Detection)

키워드 매칭 (API 호출 없음)

메시지에 다음 키워드가 포함되면 즉시 명함 처리 모드 진입:

  • 한국어: "명함", "연락처 저장", "연락처 추가"
  • 영어: "bizcard", "business card", "save contact"

이미지 분석 (키워드 없이 이미지만 올라왔을 때)

imageModel에 다음을 요청:

이 이미지가 명함(business card)인지 판단해.
명함이면 YES, 아니면 NO만 답해.
명함 = 사람의 이름, 회사명, 연락처 정보가 인쇄된 카드 형태.
음식, 풍경, 스크린샷, 메모, 영수증 등은 NO.
  • YES → 명함 처리 진행
  • NO → 무시 (다른 스킬에 넘기거나 일반 응답)

2. 이미지 전처리 (ImageMagick)

2-1. 품질 평가

imageModel에 요청:

이 명함 이미지의 품질을 평가해:
- 텍스트가 선명하게 읽히는가? (CLEAR / BLURRY)
- 기울어져 있는가? (STRAIGHT / TILTED)
- 전체적으로 전처리가 필요한가? (NEEDS_PROCESSING / SKIP)
JSON으로 답해: {"clarity": "...", "tilt": "...", "preprocessing": "..."}

2-2. 전처리 실행 (NEEDS_PROCESSING일 때만)

# 요청별 고유 디렉터리 생성
BIZCARD_TMP=$(mktemp -d /tmp/bizcard-XXXXXXXX)

# 1. Deskew (기울기 보정)
magick "$BIZCARD_TMP/raw.jpg" -deskew 40% "$BIZCARD_TMP/deskew.jpg"

# 2. 콘트라스트 개선 + 선명화
magick "$BIZCARD_TMP/deskew.jpg" -normalize -sharpen 0x1 "$BIZCARD_TMP/enhanced.jpg"

전처리된 이미지로 OCR 진행.

2-3. SKIP일 때

원본 그대로 OCR 진행. 전처리 건너뜀.


3. OCR 필드 추출

imageModel(Gemini Flash)에 다음 JSON 구조로 추출 요청:

이 명함 이미지에서 연락처 정보를 추출해. 다음 JSON 형식으로 답해.
읽을 수 없는 필드는 null로 남겨.

{
  "name_ko": "한글 이름",
  "name_en": "English name",
  "company_ko": "한글 회사명",
  "company_en": "English company name",
  "title_ko": "한글 직함",
  "title_en": "English title",
  "department": "부서",
  "mobile": ["개인 휴대폰 배열"],
  "email": ["이메일 배열"],
  "locations": [
    {
      "label": "본사",
      "phone": ["063-000-0000"],
      "fax": ["063-000-0001"],
      "address_ko": "서울특별시 강남구 테헤란로 123",
      "address_en": null
    },
    {
      "label": "영업부",
      "phone": ["02-000-0000"],
      "fax": ["02-000-0001"],
      "address_ko": "경기도 성남시 분당구 판교로 456",
      "address_en": null
    }
  ],
  "website": ["웹사이트 배열"],
  "notes": "기타 (SNS, 자격증 등)",
  "language": "명함의 주 언어 (ko / en / ja / zh / other)"
}

4. 전화번호 정규화

한국 번호를 국제 형식으로 변환:

원본변환
010-1234-5678+82-10-1234-5678
02-1234-5678+82-2-1234-5678
031-123-4567+82-31-123-4567

규칙:

  • 0으로 시작하는 한국 번호 → 앞의 0+82-로 교체
  • +로 시작하는 해외 번호 → 원본 유지
  • 숫자 사이 - 또는 공백은 -로 통일

5. 이름 처리 규칙

5-1. 한국식 명함 (config: koreanStyleName=true, 기본값)

한국에서는 성과 이름을 분리하지 않는다. 비즈니스에서 "홍길동 대표", "김갑돌 과장"처럼 풀네임이 하나의 단위다.

People API 저장 시:

  • familyName비움 (빈 문자열)
  • givenName풀네임 (예: 홍길동)
  • unstructuredName → config 포맷 적용된 이름 (예: #홍길동 과장)

5-2. 외국 명함 (config: koreanStyleName=false이거나, OCR language가 ko가 아닌 경우)

외국인은 first name / last name 분리가 기본:

  • givenName → first name (예: John)
  • familyName → last name (예: Smith)
  • unstructuredName → config 포맷 적용

Metadata

Stars1217
Views1
Updated2026-02-20
View Author Profile
AI Skill Finder

Not sure this is the right skill?

Describe what you want to build — we'll match you to the best skill from 16,000+ options.

Find the right skill
Add to Configuration

Paste this into your clawhub.json to enable this plugin.

{
  "plugins": {
    "official-project820-bizcard": {
      "enabled": true,
      "auto_update": true
    }
  }
}
Safety NoteClawKit audits metadata but not runtime behavior. Use with caution.