返回顶部
b

bizcard名片识别

|

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.2
安全检测
已通过
535
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

bizcard

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

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

Pipeline Overview

CODEBLOCK0



1. 자동 감지 (Trigger Detection)

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

메시지에 다음 키워드가 포함되면 즉시 명함 처리 모드 진입:
  • - 한국어: "명함", "연락처 저장", "연락처 추가"
  • 영어: "bizcard", "business card", "save contact"

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

imageModel에 다음을 요청:

CODEBLOCK1

  • - YES → 명함 처리 진행
  • NO → 무시 (다른 스킬에 넘기거나 일반 응답)

2. 이미지 전처리 (ImageMagick)

2-1. 품질 평가

imageModel에 요청:

CODEBLOCK2

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

CODEBLOCK3

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

2-3. SKIP일 때

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



3. OCR 필드 추출

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

CODEBLOCK4



4. 전화번호 정규화

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

원본변환
INLINECODE0INLINECODE1
INLINECODE2
+82-2-1234-5678 |
| 031-123-4567 | +82-31-123-4567 |

규칙:

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



5. 이름 처리 규칙

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

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

People API 저장 시:

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

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

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

  • - givenName → first name (예: John)
  • INLINECODE21 → last name (예: Smith)
  • INLINECODE23 → config 포맷 적용

5-3. Korean Reading (config: koreanReading=true)

외국어 명함일 때, 이름과 회사명을 한국어로 독음(transliteration)하여 기록:

원본독음
John Smith존 스미스
Google LLC
구글 |
| Toyota Motor | 토요타 모터 |
| François Dupont | 프랑수아 뒤퐁 |

적용 방법:

  • - imageModel에 "이 이름/회사명을 한국어 외래어 표기법으로 독음해줘" 요청
  • 이름 독음 → People API phoneticName 필드에 저장 (검색 가능!)
  • 회사명 독음 → biographies에 기록

People API 저장:
CODEBLOCK5

규칙: 독음은 성/이름 분리하지 않는다. 풀네임 독음을 phoneticGivenName에 통째로 넣는다.

예시: Kweh Hoong Wayne → phoneticGivenName=퀘 훙 웨인
예시: François Dupont → phoneticGivenName=INLINECODE31

효과: Google Contacts에서 "퀘 훙 웨인"으로 검색해도 해당 연락처를 찾을 수 있다.

INLINECODE32이면 독음 생략.



6. Name 포맷 적용

config 설정을 읽어 unstructuredName (displayName)을 생성한다.

적용 순서

CODEBLOCK6

조합 예시

hashtagappendTitleappendCompany결과
offoffoffINLINECODE34
on
off | off | #홍길동 | | off | on | off | 홍길동 과장 | | off | off | on | 홍길동 (ABC주식회사) | | on | on | on | #홍길동 과장 (ABC주식회사) |

People API 저장 시 (한국식)

  • - names[].unstructuredName → 포맷된 displayName (예: #홍길동 과장)
  • INLINECODE41 → 풀네임 (예: 홍길동)
  • INLINECODE43 → 비움

People API 저장 시 (외국식)

  • - names[].unstructuredName → 포맷된 displayName (예: #John Smith, VP)
  • INLINECODE46 → first name (예: John)
  • INLINECODE48 → last name (예: Smith)

7. 사용자 확인 플로우

OCR + 포맷 결과를 아래 템플릿 그대로 출력한다. 포맷 변경 금지.

한국 명함 템플릿 (이 포맷 그대로 사용):
CODEBLOCK7

거점이 1개뿐이면 📍 label 없이 한 줄로:
CODEBLOCK8

외국 명함 템플릿 (koreanReading=true, 이 포맷 그대로 사용):
CODEBLOCK9

규칙:

  • - 이모지 순서 고정: 👤🏢💼📱📞📠📧🌐📍🖼️
  • 없는 필드는 해당 줄 자체를 생략 (빈 줄 금지)
  • 부가 설명이나 "20년차 전문가" 같은 OCR 잡데이터를 이름에 넣지 마라. 타이틀 필드에만 표시.
  • 이름 라인(👤)에는 config 포맷만 적용: INLINECODE50
  • 직함은 💼 줄에 별도 표시. 👤 줄의 직함은 config appendTitle 적용 시에만, 짧게. ALL CAPS 금지.

- ✅ 👤 #Kweh Hoong Wayne + 💼 Technical Service Manager
- ❌ 👤 #Kweh Hoong Wayne TECHNICAL SERVICE MANAGER
  • - 하단은 반드시 1. 저장 / 2. 수정 / 3. 취소 번호 선택. "저장할까?" 같은 서술형 금지.
  • 복수 거점: 명함에 주소가 2개 이상이면 거점(location) 단위로 그룹핑하여 출력.

각 거점은 📍 label + 해당 거점의 📞/📠/주소를 묶어서 표시.
명함에서 전화/팩스/주소가 시각적으로 분리되어 있으면 반드시 별도 거점으로 분리. 절대 병합하지 마라.
  • - 거점 label(본사/공장/영업부 등)은 명함에서 추출. 없으면 "거점1", "거점2"로 표시.

응답 처리

입력동작
INLINECODE55저장 진행
INLINECODE56
"뭘 수정할까?" 물은 뒤, 수정 후 다시 1/2/3 선택 | | 3 | 취소 |

번호 외 텍스트 입력도 허용: "ㅇㅇ", "ok" → 1번 처리, "취소" → 3번 처리.
하지만 번호 입력을 우선 유도한다.



8. 명함 이미지 보정 + 사진 업로드 (항상 실행)

INLINECODE58이면 무조건 실행한다. 모든 명함을 일관되게 보정한다.
말로만 "적용했어" 하지 말고 실제로 exec 도구로 명령어를 실행해라.

8-1. 원본 이미지를 /tmp에 복사

CODEBLOCK10

8-2. Nano Banana Pro로 이미지 보정 (핵심!)

원본 이미지를 Nano Banana Pro에 보내서 배경 제거 + 정면 보정 + 1:1 정사각형으로 변환.

CODEBLOCK11

결과: $BIZCARD_TMP/clean.jpg — 1024x1024, 배경 제거, 정면 보정, 1:1 정사각형.

8-3. 보정된 이미지를 Google Contacts에 업로드

clean.jpg를 업로드한다. raw.jpg가 아니다.

CODEBLOCK12

8-4. 임시 파일 삭제

CODEBLOCK13

절대 금지:

  • - 보정을 "실행했다"고 말만 하고 실제 exec를 안 하는 것
  • clean.jpg 대신 raw.jpg(원본)를 업로드하는 것
  • ImageMagick -deskew-distort Perspective 사용 (Nano Banana Pro가 전부 처리)

Nano Banana Pro API 실패 시: 원본(raw.jpg)을 그대로 업로드하고 "이미지 보정 실패: 원본으로 저장" 알림.



9. 중복 감지 (자동 2필드 매칭)

저장 전 반드시 이름 + 휴대폰 번호 2개 필드로 기존 연락처를 자동 검색한다. 사용자가 요청하지 않아도 항상 실행.

검색 로직

CODEBLOCK14

번호 검색 시 정규화된 +82 포맷과 원본(010) 포맷 모두로 검색하여 누락을 방지한다.

매칭 판정

이름 일치번호 일치판정동작
확정 중복사용자에게 옵션 제시
❌ | 동명이인 가능 | 사용자에게 알림 후 진행 | | ❌ | ✅ | 번호 재사용 가능 | 사용자에게 알림 후 진행 | | ❌ | ❌ | 신규 | 바로 저장 |

확정 중복 시 출력 (이름+번호 모두 일치)

아래 템플릿을 그대로 출력한다. 포맷 변경 금지.

CODEBLOCK15

부분 일치 시 출력 (이름만 또는 번호만 일치)

아래 템플릿을 그대로 출력한다. 포맷 변경 금지.

CODEBLOCK16

신규 (중복 없음)

중복 없으면 중복 관련 메시지 자체를 출력하지 않는다. 바로 사용자 확인으로 넘어간다.



10. Google Contacts 저장

Maton API Gateway (People API)를 사용. 전체 필드 + 커스텀 Name + 사진 지원.

연락처 생성

CODEBLOCK17

명함 사진을 연락처 사진으로 저장 (cardAsPhoto=true)

Section 8의 파이프라인을 따른다. 보정 + 업로드는 Section 8에서 일괄 처리.

파이프라인 종료 시 (성공, 취소, 에러 무관) $BIZCARD_TMP 디렉터리 전체 삭제 (rm -rf "$BIZCARD_TMP").
다른 세션의 파일을 건드리지 않는다.



11. 설정 관리 — /bizcard config

설정 조회

사용자가 /bizcard config 또는 "명함 설정"을 입력하면, 아래 템플릿을 그대로 복사해서 출력한다. 절대 다른 포맷으로 바꾸지 마라. on/off 값만 config.json 실제 상태에 맞춰 교체.

출력 템플릿 (이 포맷 그대로 사용):
CODEBLOCK18

이모지 규칙: on🟢, off. 값 바로 뒤에 이모지 붙인다.

규칙:

  • - 번호, 항목명, 설명은 고정. 변경 금지.
  • INLINECODE71 / off 값만 config.json 실제 상태에 맞춰 출력.
  • 불릿 리스트(•)나 다른 포맷으로 변환 금지.
  • 부가 설명이나 "원하면 바꿔줄게" 같은 멘트 추가 금지.

설정 변경 — 번호 토글

번호만 입력하면 현재 상태의 반대로 자동 전환된다. config.json 파일을 실제로 수정하고, 아래 응답 포맷 그대로 출력.

세션 규칙: /bizcard config 실행 후 다음 1회 입력만 설정 변경으로 처리한다. 그 이후의 숫자 입력은 일반 대화로 취급. 설정을 연속 변경하려면 /bizcard config를 다시 입력.

예시 1: 현재 3. Append company : off 상태에서 사용자가 3 입력

응답 (이 포맷 그대로):
CODEBLOCK19

예시 2: 현재 1. Hashtag : on 상태에서 사용자가 1 입력

응답 (이 포맷 그대로):
CODEBLOCK20

규칙: 변경된 항목만 한 줄 출력 + "All set now." 그 외 추가 멘트 금지.

특수 명령

코드동작설명
INLINECODE79Reset기본값으로 초기화
INLINECODE80
All on | 전체 설정 켜기 | | 49 | All off | 전체 설정 끄기 |

입력: 49
응답:
CODEBLOCK21

입력: 00
응답:
CODEBLOCK22

번호-키 매핑 (고정)

#config key설명
1INLINECODE84이름 앞에 # 추가 (카카오톡 자동추가 방지)
2
appendTitle | 이름 뒤에 직함 추가 | | 3 | appendCompany | 이름 뒤에 (회사명) 추가 | | 4 | cardAsPhoto | 명함 이미지를 연락처 사진으로 저장 | | 5 | koreanReading | 외국 명함 이름/회사를 한국어 독음으로 기록 | | 6 | koreanStyleName | 한국 명함: familyName 비우고 givenName에 풀네임 |

기본값 (00 Reset 시 적용)

CODEBLOCK23



12. 첫 사용 온보딩

사용자가 처음 명함을 보낼 때 (bizcard-log.jsonl이 없거나 비어있을 때):

CODEBLOCK24

이후에는 온보딩 없이 바로 처리.



13. 메모리 로깅

저장 성공 시 memory/bizcard-log.jsonl최소한의 정보만 기록한다. 이메일, 전화번호 등 민감한 PII는 저장하지 않는다. 상세 정보는 Google Contacts에서 resourceName으로 조회.

CODEBLOCK25

PII 최소화 원칙: 로그에는 이름과 회사명(검색용)만 남기고, 전화번호/이메일/주소는 저장하지 않는다.



14. 검색 & 조회


명령동작
"명함 검색 홍길동" / "bizcard search 홍길동"People API searchContacts 실행
"최근 명함" / "recent bizcards"
bizcard-log.jsonl에서 최근 10건 표시 |


15. 에러 처리


에러 상황사용자 메시지
OCR 실패 / 빈 결과"텍스트를 인식하지 못했어. 더 선명한 사진으로 다시 보내줘"
Maton API 실패
"Google Contacts 연결을 확인해줘. API 키나 OAuth가 만료됐을 수 있어" |
| 빈 명함 (정보 없음) | "연락처 정보를 못 찾았어. 명함이 맞는지 확인해줘" |
| 네트워크 오류 | "네트워크 연결을 확인해줘" |
| 사진 업로드 실패 (연락처는 저장됨) | "연락처는 저장됐는데 사진 업로드가 실패했어. 다시 시도할까?" |
| config.json 파싱 오류 | 기본값으로 자동 복구 후 "설정 파일이 손상돼서 기본값으로 복구했어" |


Config Reference

설정 파일: skills/bizcard/config.json

#key기본값설명
1INLINECODE96INLINECODE97이름 앞에 # 추가 (카카오톡 자동추가 방지)
2
appendTitle | true | 이름 뒤에 직함 추가 |
| 3 | appendCompany | false | 이름 뒤에 (회사명) 추가 |
| 4 | cardAsPhoto | true | 명함 이미지를 연락처 사진으로 저장 |
| 5 | koreanReading | true | 외국 명함 이름/회사를 한국어 독음으로 기록 |
| 6 | koreanStyleName | true | 한국 명함: familyName 비우고 givenName에 풀네임 |

Dependencies

ToolPurposeInstall
INLINECODE110Maton API Gateway auth (People API proxy)maton.ai/settings
INLINECODE111
Google Gemini API key (used by Nano Banana Pro for image correction) | aistudio.google.com |

References

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 bizcard-1776419958 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 bizcard-1776419958 技能

通过命令行安装

skillhub install bizcard-1776419958

下载

⬇ 下载 bizcard v0.1.2(免费)

文件大小: 16.92 KB | 发布时间: 2026-4-17 20:02

v0.1.2 最新 2026-4-17 20:02
v0.1.2: Added templates/ folder with SOUL.md and AGENTS.md templates for dedicated bizcard agent setup. No personal data — ready to copy and use.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部