새로운 기능: 사진 탐색기 · 지도에 표시된 모든 여행 사진을 찾기

개발자 문서

'오늘의 추억', '과거와 현재', 그리고 '여권 스탬프'

'오늘의 추억', '과거와 현재', 그리고 '여권 스탬프'는 서로 다른 기술을 사용합니다. 캘린더 연결, 공간 분류, 그리고 OCR입니다. 이들은 모두 동일한 원칙을 따릅니다. 유용한 정보를 제공하고, 설명을 덧붙이며, 최종 결정은 사용자에게 맡깁니다.

에 의해. 11 분 읽기
Mapsake 여권: 여행 통계, 지도, 메모리 카드

과거를 되살릴 세 가지 방법

대부분의 여행 소프트웨어는 다음 여행에 최적화되어 있습니다. Mapsake도 5년, 10년 또는 20년 전의 여행으로 돌아가는 데 도움이 되도록 설계되었습니다.

이 업데이트는 과거로 가는 세 가지 다른 경로를 추가합니다. 오늘의 추억 캘린더와의 연결을 찾습니다. 과거와 현재 장소와의 연결을 찾습니다. 여권 스탬프 물리적인 자료를 보존하고 이를 사용하여 지도를 개선합니다.

이들은 공통된 설계 원칙을 공유합니다. 사용자가 이미 소유한 데이터부터 시작하고, 장치에서 흥미로운 작업을 수행하며, 추측이 틀릴 수 있는 경우 항상 확인을 요청합니다.

이번 릴리스에는 '더 많은 알림 보내기'가 아닌 '데이터 보존'이라는 개념이 있습니다. 라이프타임 아틀라스는 이전 데이터를 다시 방문할 수 있는 새로운 이유를 만들어 유용합니다. 가장 좋은 이유는 사용자가 수동으로 관리할 필요가 없는 진정한 연결을 만드는 것입니다.

'오늘의 추억', '과거와 현재', 그리고 '스탬프'는 모두 이러한 연결을 다른 방식으로 만듭니다. 이는 Mapsake의 다양한 기능이 사진 로딩, 장소 정보, 렌더링, 탐색, 그리고 개인 정보 보호 규칙을 공유하면서도 하나의 거대한 메모리 엔진으로 통합되지 않도록 테스트하는 데 도움이 되었습니다.

'오늘의 추억' 기능은 사진뿐만 아니라 날짜 정보도 사용합니다.

가장 기본적인 구현은 현재 달과 날짜의 사진을 사진 라이브러리에서 검색하는 것입니다. Mapsake는 한 걸음 더 나아가 사진은 여행 증거의 한 종류일 뿐이라는 점을 고려합니다.

지리 정보 데이터베이스의 각 장소는 수동 입력, 가져오기, 항공편 및 사진 기록에서 가져온 '방문 날짜'를 포함할 수 있습니다. '오늘의 추억' 기능은 이러한 날짜를 캐시된 사진 메타데이터와 결합하고, 결과를 연도별로 그룹화하여 가장 구체적인 장소부터 정렬합니다. 도시 또는 공항이 추억의 주요 내용이 되면서, 해당 지역 및 국가는 동일한 이야기의 일부로 유지됩니다.

사진 필터링은 메인 인터페이스에서 분리되어 있습니다. 이는 쿼리가 간단해 보이더라도 큰 라이브러리는 여전히 큰 라이브러리이기 때문입니다. 결과는 최신순으로 그룹화되어 연도별 카드 형태로 표시됩니다. 카드 하나를 열면 갤러리가 표시되고, 관련 장소 스토리로 연결됩니다.

또한, 조용한 날에는 가장 가까운 기억을 우선적으로 보여주는 기능이 있습니다. 만약 7월의 9에 데이터가 없다면, Mapsake는 데이터가 없는 대신 가장 가까운 날짜의 데이터를 보여줄 수 있습니다.

캘린더 매칭에는 예상보다 더 많은 복잡한 경우가 있습니다.

"같은 달과 같은 날짜"는 시간대와 불완전한 기록이 고려되면 단순한 조건이 아닙니다. 사진 날짜는 캡처된 미디어에서 가져오지만, 수동으로 입력하거나 가져온 장소 날짜는 정확한 순간이 아닌 하루 전체를 나타낼 수 있습니다. 따라서 이 기능은 타임스탬프가 정확히 365 일이 지났는지 확인하는 대신 캘린더 구성 요소 내에서 작동합니다.

장소는 표시 순서대로 정렬됩니다. 아틀라스가 특정 날짜에 공항, 도시, 지역 및 국가를 알고 있는 경우, 공항 또는 도시가 카드 제목으로 표시되어야 합니다. 모든 것을 개별적인 추억으로 나열하면 증거의 일부가 과장될 수 있습니다. 전체 계층 구조는 장소 칩으로 제공되며 주변 이야기에 기여합니다.

사진 사이드에서는 Mapsake가 가져오기 중에 이미 생성한 메타데이터 캐시를 사용합니다. Profile을 열 때마다 PhotoKit에 라이브러리 전체를 다시 스캔하도록 하지 않습니다. 1일 필터링은 백그라운드 작업으로 실행되며, 인터페이스는 나중에 로드할 수 있는 작은 자산 컬렉션을 받습니다.

첫 번째 진입점은 Atlas에 있었습니다. 테스트 결과, 캘린더 버튼은 기억이 없는 날에도 가장 중요한 화면을 복잡하게 만들었습니다. 진입점을 프로필로 이동하여 필요에 따라 표시하고, 다른 개인 기능과 자연스럽게 결합하며, 지도 컨트롤과 경쟁하지 않고 읽지 않은 상태를 표시할 수 있게 되었습니다.

알림은 자체적인 경로를 사용합니다. 로컬 알림은 일반적인 링크를 탭하는 것과 동일한 경로를 통해 전송되지 않습니다. Mapsake는 알림 페이로드에 딥 링크를 추가하고, 앱 대리인에서 응답을 수신하여 다른 딥 링크에서 사용하는 동일한 탐색 상태로 전달합니다. 표시되는 기능은 간단한 문장일 뿐이지만, 실제 작동을 위해서는 전체 경로가 필요합니다.

알림은 의도적으로 선택 사항입니다.

'오늘의 추억' 기능은 사용자가 활성화한 경우에만 부드러운 알림을 제공합니다. Mapsake는 로컬 데이터를 사용하여 예정된 추억 날짜를 준비하고, 알림을 탭하면 해당 화면으로 이동하도록 딥 링크를 연결합니다.

어떤 서버도 어떤 기억이 중요한지 결정하지 않으며, 알림이 작동하려면 사진이 장치를 떠날 필요가 없습니다. 프로필 타일은 오늘 실제로 표시할 내용이 있을 때만 나타나며, 열기 전에는 작은 읽지 않은 점이 표시됩니다.

알림은 로컬 계산에서 이미 그룹화된 결과를 알고 있으므로 1년 이상 또는 여러 장소에 대한 정보를 요약할 수 있습니다. 알림은 여행자가 특정 날짜에 여러 해 동안 레드먼드, 로마 및 도쿄에 있었다는 내용을 알려줄 수 있습니다. 텍스트는 장치에서 조립되고 앱의 다른 부분과 마찬가지로 현지화됩니다.

이 조건부 항목은 제품 결정일 뿐만 아니라 엔지니어링 결정이기도 했습니다. 영구적인 빈 카드는 해당 기능을 더 자주 광고하지만, 기능에 유용한 내용이 없을 때마다 프로필을 매일 소란스럽게 만들 것입니다.

'Then & Now'는 위치를 핵심 요소로 사용합니다.

'Then & Now'는 최소 2년 이상의 간격을 두고 같은 장소 근처에서 촬영된 사진을 찾습니다. 이 기능은 약 280 미터 폭의 작은 공간 격자를 사용하여 구현됩니다. 필터링된 사진 좌표는 각 셀에 배치되며, 각 셀은 가장 오래된 사진과 최신 사진만 저장하고 검색합니다.

충분히 긴 시간 범위를 가진 셀은 후보가 됩니다. 가장 긴 기간의 항목이 먼저 표시되며, 가까운 후보는 중복 제거되므로 하나의 장소가 전체 목록을 채울 수 없습니다. 또한, 번들된 지리 정보 데이터베이스는 도시와 국가 레이블을 제공합니다. 이 결과는 사진 인덱스가 변경될 때까지 메모리에 저장됩니다.

이것은 의도적으로 이미지 유사성을 평가하는 기능이 아닙니다. 사진이 동일한 구도나 피사체를 보여줄 필요는 없으며, 이는 Constellations라는 다른 기능의 역할입니다. Then & Now는 더 간단한 질문을 던집니다. 수년 후 다시 방문했을 때 이 장소는 어떤 모습이었을까요?

페어는 일반 사진 뷰어에서 열리고, 여권 카드와 동일한 방식으로 공유할 수 있습니다. 원본은 원래 라이브러리에 남아 있으며, Mapsake는 페어를 다시 찾기 위해 필요한 경량 메타데이터만 저장합니다.

왜 280 미터와 2년인가요?

공간 셀은 의도적으로 관대합니다. 전화 GPS는 오차가 발생할 수 있으며, 랜드마크는 광장의 반대편에서 촬영될 수 있으며, 오래된 카메라는 좌표 정확도가 낮을 수 있습니다. 정확한 좌표 일치는 많은 유효한 결과를 놓칠 수 있습니다. 도시 수준의 일치는 관련 없는 지역을 짝지을 수 있습니다.

약 280 미터는 제품의 기준이며, 두 사진이 동일한 물리적 위치를 나타낸다는 주장이 아닙니다. 이미지를 나란히 배치했을 때, 결과가 충분히 가깝게 느껴지는지 평가합니다. 2년의 최소 기간은 여행의 첫날과 마지막 날을 장기적인 변화로 인식하는 것을 방지합니다.

스캔 중에 각 셀에서 가장 오래된 사진과 최신 사진만 보존됩니다. 이렇게 하면 메모리 사용량이 총 이미지 수가 아닌 사용된 셀 수에 비례하며, 자연스럽게 시간 범위를 최대화합니다. 후보 쌍은 기간별로 정렬되고 공간적으로 중복 제거되므로, 한 장소 주변에 수백 장의 사진이 있는 경우에도 다양한 사진을 볼 수 있습니다.

메모화 키는 사진 메타데이터 생성 및 제외 횟수를 따릅니다. 새 라이브러리 일괄 처리를 가져오거나 지도에서 사진을 제거하면 쌍이 다시 계산됩니다. 화면을 다시 열어도 소스가 변경되지 않으므로 앱은 결과를 재사용합니다.

첫 번째 벤치마크 테스트에서 Then & Now도 근처 도시 검색에 상당한 시간을 소비하는 것으로 나타났습니다. 기능별 역지오코더 대신 공유 지리 정보를 사용하기 때문에, 가져오기 속도를 높이고 Constellations에도 사용된 지리 정보 작업 덕분에 이러한 레이블이 훨씬 저렴해졌습니다. 공유 기반은 공유 성공을 가져옵니다.

공유 기능은 Passport 파이프라인을 재사용합니다.

'Then & Now'는 연도, 장소, 기간이 포함된 2장의 사진이 필요합니다. 새로운 내보내기 기능을 만들면 기존의 밝고 어두운 렌더링, 소셜 비율, 이미지 미리 로딩, 사진 저장, 시스템 공유 기능 등이 중복됩니다.

대신, 이 쌍은 사용자 지정 Passport 카드에 래핑되어 기존 공유 화면에 전달됩니다. 원본 이미지는 SwiftUI의 오프스크린 ImageRenderer가 최종 렌더링 시 동기식으로 작동하기 때문에 미리 로드됩니다. 사용자는 지도 및 통계에 사용되는 동일한 미리보기 및 대상 흐름을 봅니다.

재사용은 단순한 코드 효율성 이상의 의미를 갖습니다. 공유 동작을 예측 가능하게 만듭니다. 자동 게시 기능은 없으며, 내보내기 결과는 미리보기와 동일하고, 접근성 및 색상 규칙도 동일하게 적용됩니다.

여권 스탬프는 부정확한 확신이 아닌, 도움이 필요합니다.

실제 여권 스탬프는 OCR로 처리하기 어려운 자료입니다. 흐릿하고, 회전되어 있으며, 배경 이미지 위에 겹쳐져 있고, 여러 언어로 작성되어 있으며, 때로는 서로 겹쳐 찍혀 있습니다. 완벽한 자동 인식을 주장하는 스캐너는 사용자에게 부정확한 여행 데이터를 제공할 수 있습니다.

Mapsake는 Apple의 Vision 프레임워크를 사용하여 기기에서 읽을 수 있는 텍스트를 추출하고, 가능한 일치 항목을 순위 매깁니다. IATA 공항 코드는 강력한 지표입니다. 2자리 국가 코드, 국가 이름, 로컬 고유 명칭, 도시, 입국 항구 또는 유럽 날짜는 추가 증거가 될 수 있습니다. 로컬 언어 공항 용어는 OCR이 단어의 끝부분을 읽지 못하는 경우에도 항목이 비행기로 이동했을 가능성을 인식하는 데 도움이 됩니다.

매처는 제안과 선호하는 장소 체인(국가, 지역, 도시, 사용 가능한 경우 공항)을 제시합니다. 추측을 자동으로 수행하지 않습니다. 검토 화면에서는 항상 다른 후보 또는 완전히 수동 선택이 가능합니다.

이 신중한 제안은 중요합니다. 제안을 놓치면 탭이 필요합니다. 확신이 있지만 잘못된 제안은 지도를 조용히 손상시킵니다.

색이 바랜 아이슬란드 우표가 매칭 알고리즘을 변경했습니다.

실제 스탬프 하나가 제한 사항을 구체적으로 보여주었습니다. 해당 공항 텍스트는 다음과 같이 표시되어야 했습니다. KEFLAVIKURFLUGVOLLUR,. 흐릿한 잉크와 줄 바꿈이 Vision에게는 더 가깝게 느껴졌습니다. KEFLAVIKURFLUGVOLI UR.. 아이슬란드 공항이라는 용어에 대한 완전 일치 확인이 실패했으므로 Mapsake는 항공편을 추론하거나 케플라비크 공항을 해결할 수 없었습니다.

이 수정 사항은 특정 여권에 대한 특별한 조치가 아니었습니다. 매칭 엔진은 이제 여러 언어에서 일반적인 공항 단어의 어근을 인식합니다. 아이슬란드어, 독일어, 스페인어, 포르투갈어, 네덜란드어, 스칸디나비아어 등 다양한 언어의 공항에 해당하는 단편이 포함되어 있습니다. 손상된 어미는 여전히 입국 방법을 나타내고 위치 해결을 공항 쪽으로 편향시킬 수 있습니다.

EU 및 Schengen 지역 스탬프가 추가되어 두 가지 추가 레슨이 제공됩니다. 두 글자로 된 ISO 국가 코드는 모서리 타원 안에 표시될 때만 유용합니다. 모든 두 글자 단어를 국가로 취급하면 부적절한 매칭이 발생합니다. 유럽 날짜 형식은 로케일 관련 일반 감지기가 월 먼저 읽기 전에 일 먼저 파싱해야 합니다.

진입 지점 해독은 동일한 이유로 접두사 허용 기능을 갖습니다. 긴 현지 언어 복합어는 도시 또는 공항 이름을 포함할 수 있습니다. 내장된 지리 정보는 짧은 영어 형태를 저장하는 경우에도 해독 프로그램은 의미 있는 선행 부분을 시도한 다음 확인된 결과 주변에 국가, 지역, 도시 및 공항 체인을 구축합니다.

체인은 저장하기 전에 표시됩니다. 특정 공항을 선택하면 해당 도시, 지역, 국가를 함께 표시할 수 있지만, 추론된 각 수준은 표시되고 편집 가능합니다. UI는 강력한 제안을 제공하고, 사용자가 최종 결정을 내릴 수 있도록 설계되었습니다.

복사본이 아닌 원본 아티팩트를 보관합니다.

여권 스탬프 기록은 메타데이터와 원본 사진에 대한 참조를 저장하며, 전체 이미지 데이터는 저장하지 않습니다. Mapsake는 스탬프 월을 위한 작은 재 생성 가능한 썸네일을 만들고, 필요에 따라 원본 이미지를 로드합니다. Photos에서 가져온 원본 이미지가 완전히 삭제된 경우, 짝을 이루지 못하는 스탬프를 삭제할 수 있으며, 이미지가 더 이상 존재하지 않는 것처럼 보이게 하지 않습니다.

그 문장에서 ‘실제로’라는 표현이 중요합니다. 제한된 사진 권한으로는 보이지 않는 항목이 삭제되었다고 증명할 수 없습니다. 단지 허용된 선택 범위 밖에 있을 수 있기 때문입니다. 라이브러리 권한이 충분하고 로컬 식별자와 클라우드 식별자가 모두 확인되지 않을 때만 조정 과정에서 스탬프를 제거합니다. 모호한 경우에는 기록을 유지합니다.

이 참조 기반 모델은 CloudKit과 호환되는 데이터 크기를 유지합니다. 스탬프는 국가, 날짜, 책, 등록 방법, 페이지, 즐겨찾기 상태, 메모 및 식별자를 동기화할 수 있습니다. 여권 사진과 같은 데이터를 데이터베이스 행에 저장하려고 할 필요가 없습니다. 256 픽셀의 로컬 썸네일은 캐시이며, 진실의 원본이 아닙니다.

우표는 명명된 여권 책에 정리하거나, 도착 또는 출발로 표시하거나, 날짜와 입국 방법을 지정하고, 국가별로 볼 수 있습니다. 트리밍, 보정, 회전 및 검열 흐림 도구를 사용하여 국가 또는 대륙 콜라주를 공유하기 전에 유용한 이미지를 준비할 수 있습니다.

동일한 기능을 사용하여 여권의 신분증 페이지를 책에 스캔할 수 있습니다. 기계 판독 영역 분석은 가능한 경우 구조화된 필드를 제공하며, 이미지는 사용자의 자체 라이브러리에 대한 참조입니다.

MRZ(기계 판독 영역) 인식은 언어 교정 기능을 비활성화합니다. 기계 판독 영역은 문자, 숫자, 각괄호로 구성된 고정된 문자열입니다. OCR(광학 문자 인식)을 사용하여 자연스러운 단어로 변환하면 가독성이 향상될 수 있지만, 파싱된 필드의 정확도가 떨어질 수 있습니다. 출생지와 같은 인쇄된 필드는 별도의 최선을 다하는 방식으로 처리되며, 결과는 편집 가능한 형식으로 표시됩니다.

카메라 및 선택 기능은 인식 처리를 하기 전에 자르기 및 회전 단계를 공유합니다. 이후, 이미지 보정 기능이 추가되었으며, 기울기 보정 다이얼, 확대/축소, 이동, 그리고 민감한 정보를 흐리게 처리하는 브러시가 추가되었습니다. 편집기는 흐림 브러시가 활성화되어 있을 때 충돌하는 제스처를 비활성화하고, 사용자가 선택한 저장 방식에 따라 편집 내용을 원본 이미지에 합성합니다.

스탬프 갤러리는 아티팩트를 대륙과 국가별로 그룹화하며, 단순히 여권 책 순서대로 분류하지 않습니다. 팬 모양으로 펼쳐진 국가 목록을 탭하면 개별 스탬프가 표시됩니다. 도착, 출발, 즐겨찾기를 필터링할 수 있으며, 대륙 및 국가 헤더는 Passport 공유 기능을 통해 콜라주 형태로 표시할 수 있습니다. 국가는 유용한 메타데이터이지만, 여행 지도에서는 지리적 순서가 더 자연스럽습니다.

신뢰할 수 있는 기술력

이러한 기능은 세 가지 다른 기술을 사용합니다. 캘린더 조인, 공간 버킷팅, OCR입니다. 사용자 경험은 동일한 패턴을 따릅니다.

  1. 기존의 지역 데이터를 기반으로 후보 항목을 생성합니다.
  2. 복잡한 기능은 주요 인터페이스에서 분리합니다.
  3. 무엇이 발견되었는지 설명하십시오.
  4. 사용자가 열고, 수정하고, 공유하거나, 무시할 수 있도록 합니다.

이것이 제가 Mapsake에 원하는 지능입니다. 개인 기록을 쉽게 다시 찾을 수 있도록 해야 하지만, 알고리즘이 삶을 그 사람이 경험한 것보다 더 잘 이해한다는 것처럼 행동해서는 안 됩니다.

이러한 기능은 겉보기보다 훨씬 더 많은 기술적인 노력이 필요하지만, 그 어떤 것도 사용자가 학습해야 할 과제가 되어서는 안 됩니다. 기술적인 작업은 '오늘의 사진'이 올바른 연도로 열리고, 'Then & Now'가 놀라운 결과를 보여주며, 어려운 스탬프가 유용한 후보를 제공하지만 지나치게 확신하지 않을 때 성공합니다.

Mapsake 앱 아이콘

Mapsake의 독립 개발자가 작성했으며, 앱 뒤에 있는 제품, 지도, 개인 정보 보호 및 Apple 플랫폼 작업에 대한 정보를 제공합니다.

나만의 여행 지도를 만드세요.

이미 가지고 있는 여행 기록부터 시작하세요.

Mapsake은 무료이며, 핵심 기능 사용을 위해 Mapsake 계정이 필요하지 않으며, 지원되는 사진 매칭 기능은 장치 내에서 작동합니다.

Mapsake 무료 다운로드