개발자

이미지

기억은 이미지을 담을 수 있습니다. 엔진이 이미지을 색인하므로, 캡션·제목·대체 텍스트가 없어도 어떤 언어의 글 질의로 찾힙니다.

Tablet 2 이상에서 지원합니다. 이미지을 구현하지 않은 엔진은 맨 404 대신 그 사실을 이름으로 알려주므로, 없는 기능인지 없는 기억인지 구분할 수 있습니다. JPEG·PNG·GIF·WebP 를 받습니다.

저장하기

평소의 add 호출에 image 객체를 넘깁니다. content 는 비어도 되며, 그때는 이미지만으로 검색됩니다.

mem.add("at the beach", image={"data": b64})   # caption + image
mem.add("", image={"data": b64})               # the image IS the memory
// the image rides in the 4th argument; the 3rd is metadata
await mem.add("at the beach", undefined, {}, { image: { data: b64 } });
await mem.add("", undefined, {}, { image: { data: b64 } });   // the image IS the memory
let img = json!({"image": {"data": b64}});
mem.add_with("at the beach", None, json!({}), img.clone()).await?;
mem.add_with("", None, json!({}), img).await?;
curl -X POST https://api.wontopos.com/api/v1/memory/store \
  -H "X-API-Key: $WOS_KEY" -H "Content-Type: application/json" \
  -d '{"user_id":"alice","content":"","image":{"data":"<base64>"}}'

data 는 필수입니다. data:image/jpeg;base64, 접두어와 base64·openssl 이 넣는 줄바꿈은 SDK 가 떼어냅니다.

필드하는 일
data이미지의 base64. 필수입니다. 크기 상한은 SDK 에 박힌 값이 아니라 서버 설정이며, /healthmemory.images.max_bytes 로 알려줍니다.
reference원본 사본이 어디 있는지. 문자열로 저장만 하고 저희가 가져가지 않습니다. 저희가 든 그림은 줄어든 것이므로, 원본이 있을 자리가 여기입니다.
taken_atRFC3339, 보통 EXIF 에서 옵니다. event_date 가 비어 있으면 이 값이 채워서, 올린 때가 아니라 찍은 때 기준으로 정렬됩니다.

찾기

이미지 전용 검색은 없습니다. searchrecall 이 글과 이미지을 함께 순위 매겨 돌려줍니다.

가지고 있는 이미지 다루기

data, mime = mem.get_image(memory_id=mid)
page       = mem.list_images(limit=50)      # page["count"] = store total
mem.forget_image(memory_id=mid, preview=True)
const { bytes, contentType } = await mem.getImage(undefined, mid);
const page = await mem.listImages(undefined, { limit: 50 });
await mem.forgetImage(undefined, mid, { preview: true });
let (bytes, mime) = mem.get_image(None, mid).await?;
let page = mem.list_images(None, 50, None, None).await?;
mem.forget_image(None, mid, true).await?;
# the picture we hold — the one call on this plane that is not JSON
curl -X POST   .../api/v1/memory/image  -d '{"user_id":"alice","memory_id":"m_1"}'
curl -X POST   .../api/v1/memory/images -d '{"user_id":"alice","limit":50}'
curl -X DELETE .../api/v1/memory/image  -d '{"user_id":"alice","memory_id":"m_1","preview":true}'
호출하는 일
get_image저희가 들고 있는 그림을 (bytes, content_type) 으로 돌려줍니다. 올리신 파일 그대로가 아닙니다. 긴 변이 1,568 px 를 넘었으면 줄여서 보관했고, JPEG 이 아닌 형식은 WebP 로 다시 쓰므로 PNG 를 올리셨어도 image/webp 로 돌아옵니다. 형식은 올릴 때 붙은 이름이 아니라 바이트에서 알아내니, 파일 이름은 content_type 을 보고 붙이십시오. 이미지가 없는 기억이면 빈 것을 주지 않고 오류를 냅니다.
list_images한 페이지를 최신순으로, 그리고 count 를 함께 줍니다. 페이지 크기가 아니라 저장소 전체 개수입니다. 페이징은 커서라 next_beforenext_skip_ids 를 되돌려주면 됩니다. 이미지이 같은 시각을 가질 수 있어서 둘 다 필요합니다.
forget_image이미지만 지우고 글은 남깁니다. 캡션 없이 저장한 이미지은 그 자체가 기억이라, 그 경우엔 기억도 함께 지워집니다.

forget_imagepreview=True 를 주면 아무것도 바꾸지 않고 memory_kept 만 돌려줍니다. iter_images 는 페이지를 대신 넘깁니다.

이미지 한 장의 값

이미지은 글과 같이 토큰으로 청구합니다. 토큰 = 픽셀 넓이 / 556.7. 긴 변이 1,568 px 을 넘으면 1,568 px 기준으로 세므로, 2,500 px 이미지과 1,568 px 이미지의 값이 같습니다.

이미지세는 크기토큰
700 × 700as sent881
1000 × 1000as sent1,797
1568 × 1568as sent4,417
1920 × 10801568 × 8822,485
2500 × 18751568 × 11763,313
2500 × 25001568 × 15684,417

이미지 한 장 상한은 4,417 토큰입니다. 호출 전에 상한을 잔액에서 잡고, 끝난 뒤 실측값으로 청구합니다. 실측값이 상한을 넘지 않습니다.

저희가 보관하는 것은 원본이 아니라 기억의 해상도로 줄인 그림입니다. 긴 변이 1,568 px 를 넘으면 들어오는 길에 1,568 로 줄이고, 색인도 보관도 돌려드리는 것도 전부 그 줄인 그림입니다. 줄이려면 다시 인코딩해야 하므로 무손실 형식은 WebP 로 씁니다. 2,500 px PNG 를 올리시면 1,568 px image/webp 로 돌아옵니다. JPEG 은 JPEG 그대로이고, 1,568 px 아래는 바이트를 손대지 않습니다. (다시 인코딩한 것이 원본보다 커지면 올리신 바이트를 그대로 둡니다.) 두 변 모두 700 px 이상, 긴 변 2,500 px 이하라는 조건은 그대로이고, 벗어나면 400 으로 거절합니다. 700 px 아래에서는 정액 최소가 적용되어 더 작은 이미지도 저장 원가가 같고, 2,500 px 위는 저희가 파일을 풀지 않습니다. 전체 해상도가 필요하시면 사본을 따로 두시거나 그 주소를 reference 에 넣으십시오.

몇 장이 돌아오는가

한 응답에 기본 1장, 최대 5장입니다. 5장이면 2만 토큰에 가깝습니다.

필드하는 일
max_images0에서 5. 한 응답이 실을 수 있는 이미지 수입니다. 기본 1. 0 이면 글만 돌아옵니다. 범위를 벗어나면 깎지 않고 거절합니다.
이미지에 붙인 영어 캡션은 영어 질의를 올리고 다른 언어 질의를 떨어뜨립니다. 14개 언어 평균 recall@5 11.4점입니다. 여러 언어로 검색한다면 캡션 없이 저장하십시오.