Nuevo: Explorador de fotos · Encuentre cualquier foto de viaje cartografiada.

Diario del desarrollador

"En este día", "Then & Now" y "Passport Stamps"

"En este día", "Then & Now" y "Passport Stamps" utilizan diferentes técnicas: combinaciones de calendario, agrupación espacial y reconocimiento óptico de caracteres (OCR). Siguen la misma regla: encontrar algo útil, explicarlo y dejar la decisión final al viajero.

Por. 11 minuto de lectura
Pasaporte de Mapsake con estadísticas de viaje, mapas y tarjetas de memoria.

Tres formas de traer el pasado de vuelta.

La mayoría de los programas de seguimiento de viajes están optimizados para el próximo viaje. Mapsake también debe ser bueno para llevar a alguien de vuelta a un viaje que tuvo lugar hace cinco, diez o veinte años.

Esta actualización agrega tres caminos diferentes al pasado. En este día encuentra una conexión con el calendario. Antes y ahora encuentra una conexión de ubicación. Sellos de pasaporte conserva un artefacto físico y lo utiliza para mejorar el atlas.

Comparten un principio de diseño: comience con los datos que el usuario ya posee, realice el trabajo interesante en el dispositivo y solicite una confirmación siempre que una inferencia pueda ser incorrecta.

Hay una idea de conservación detrás del lanzamiento, pero no es "enviar más notificaciones". Un atlas de por vida se vuelve útil cuando crea nuevas razones para revisar datos antiguos. La mejor razón es una conexión real que el usuario no tuvo que curar manualmente.

"En este día", "Then & Now" y "Stamps" crean esas conexiones de manera diferente. Esto los convirtió en una buena prueba de si el conjunto de funciones en crecimiento de Mapsake podía compartir la carga de fotos, la resolución de ubicaciones, la representación, la navegación y las reglas de privacidad sin colapsar en un solo motor de memoria gigante.

"En este día" utiliza fechas de más que solo fotos.

La implementación obvia buscaría en la biblioteca de fotos el mes y el día actuales. Mapsake va un paso más allá porque las fotos son solo un tipo de evidencia de viaje.

Cada lugar en el atlas puede contener días de presencia de entradas manuales, importaciones, vuelos y el historial de fotos. "En este día" combina estas fechas con metadatos de fotos almacenados en caché, agrupa el resultado por año y ordena los lugares más específicos primero. Una ciudad o un aeropuerto pueden ser el encabezado del recuerdo, mientras que su región y país siguen siendo parte de la misma historia.

El filtrado de fotos se separa de la interfaz principal porque una biblioteca grande sigue siendo una biblioteca grande, incluso cuando la consulta parece simple. Los resultados se agrupan por orden cronológico inverso y se muestran como tarjetas de año claras. Al abrir una, se revela su galería y enlaces a las historias de lugares relevantes.

También hay una función de respaldo de "memoria más cercana" para los días tranquilos. Si julio 9 no tiene nada, Mapsake puede señalar la fecha más cercana que sí tiene, en lugar de mostrar un callejón sin salida.

La función de coincidencia de calendario tiene más detalles de los que aparenta.

"Mismo mes y día" puede parecer un predicado trivial hasta que las zonas horarias y los registros incompletos entran en juego. Las fechas de las fotos provienen de los medios capturados, mientras que las fechas de lugares manuales e importados pueden representar un día en lugar de un instante exacto. Por lo tanto, esta función funciona en los componentes del calendario en lugar de preguntar si las marcas de tiempo están exactamente 365 días separadas.

Los lugares se ordenan de mejor a peor para su presentación. Si el atlas conoce el aeropuerto, la ciudad, la región y el país durante un día, el aeropuerto o la ciudad deben destacarse en la tarjeta; enumerar los cuatro como recuerdos separados exageraría una pieza de evidencia. La jerarquía completa está disponible como chips de ubicación y contribuye a la historia circundante.

La vista de fotos utiliza la caché de metadatos que Mapsake creó durante la importación. No solicita que PhotoKit escanee toda la biblioteca cada vez que se abre el perfil. El filtro diario se ejecuta en una tarea separada, y luego la interfaz recibe una pequeña colección de referencias de activos que puede cargar de forma diferida.

El primer punto de entrada se encontraba en el Atlas. Las pruebas mostraron que un botón de calendario hacía que la pantalla visualmente más importante fuera más confusa, incluso en los días sin recuerdos. Mover el punto de entrada al Perfil permitió que apareciera de forma condicional, que se combinara de forma natural con otras funciones personales y que mostrara un estado de no leído sin competir con los controles del mapa.

Las notificaciones requieren su propio trabajo de enrutamiento. Una notificación local no llega a través del mismo camino que al tocar un enlace universal ordinario. Mapsake escribe un enlace profundo en la carga de la notificación, captura la respuesta en el delegado de la aplicación y la redirige al mismo estado de navegación que utilizan otros enlaces profundos. La función visible es una oración; el toque confiable requiere toda la ruta.

El recordatorio es intencionalmente opcional.

"En este día" puede programar una notificación suave, pero solo después de que el usuario la habilite. Mapsake prepara fechas de memoria futuras a partir de datos locales y adjunta un enlace profundo para que al tocar la notificación se abra la vista correcta.

Ningún servidor decide qué recuerdo es importante, y ninguna foto tiene que salir del dispositivo para que funcione el recordatorio. La ficha de Perfil solo aparece cuando realmente hay algo que mostrar, con un pequeño punto no leído que desaparece al abrirla.

La descripción puede resumir más de un año o lugar porque el cálculo local ya conoce el resultado agrupado. Un recordatorio podría indicar que el viajero estuvo en Redmond, Roma y Tokio en este día a lo largo de varios años. La redacción se ensambla en el dispositivo y se localiza junto con el resto de la aplicación.

Esa entrada condicional fue una decisión tanto de producto como de ingeniería. Una tarjeta permanentemente vacía anunciaría la función con más frecuencia, pero haría que el Perfil fuera más ruidoso cada día que la función no tuviera nada útil que decir.

"Then & Now" considera la ubicación como el hilo común.

"Then & Now" busca fotos tomadas cerca del mismo lugar con una diferencia de al menos dos años. La implementación utiliza una cuadrícula espacial compacta: las coordenadas de las fotos filtradas se colocan en celdas de aproximadamente 280 metros de ancho, y cada celda solo almacena la foto más antigua y la más reciente mientras se escanea.

Las celdas con un período de tiempo suficientemente largo se convierten en candidatas. Los períodos más largos se muestran primero, los candidatos cercanos se eliminan para que un solo lugar no ocupe toda la lista, y el gazetario agrupado proporciona una etiqueta de ciudad y país. El resultado se guarda en caché hasta que el índice de fotos cambia.

Esto no es intencionalmente similitud de imágenes. Las fotos no tienen que mostrar la misma composición o sujeto; eso es un trabajo diferente para Constellations. ¿Cómo se veía este lugar cuando regresaste años después?

Los pares se abren en el visor de fotos normal y se pueden compartir a través de la misma ruta de renderizado que las tarjetas de Passport. Los originales permanecen en su biblioteca de origen, mientras que Mapsake conserva los metadatos ligeros necesarios para encontrar el par nuevamente.

¿Por qué 280 metros y dos años?

La celda espacial es deliberadamente tolerante. El GPS del teléfono puede desviarse, un punto de referencia puede ser fotografiado desde los lados opuestos de una plaza, y una cámara más antigua puede tener coordenadas menos precisas. Una coincidencia exacta de coordenadas perdería muchos resultados válidos. Una coincidencia a nivel de ciudad sería demasiado amplia y emparejaría vecindarios no relacionados.

Aproximadamente 280 metros es un umbral de producto, no una afirmación de que dos fotos muestren el mismo punto físico. Pregunta si la coincidencia es lo suficientemente cercana como para sentirse conectada cuando las imágenes se colocan una al lado de la otra. El mínimo de dos años evita que el primer y último día de unas vacaciones se presenten como un cambio a largo plazo.

Solo se conservan la foto más antigua y la más reciente de cada celda durante el escaneo. Esto hace que el uso de la memoria sea proporcional al número de celdas ocupadas en lugar del número total de imágenes y maximiza naturalmente el período de tiempo. Los pares candidatos se ordenan luego por duración y se eliminan duplicados espacialmente, por lo que una persona con cientos de fotos alrededor de una sola celda aún ve variedad.

La clave de memorización sigue la generación de metadatos de la foto y la cuenta de exclusiones. Importa un nuevo lote de bibliotecas o elimina una foto del mapa, y los pares se recalculan; vuelve a abrir la pantalla sin cambiar la fuente y la aplicación reutiliza el resultado.

Una primera prueba de rendimiento mostró que "Then & Now" también dedicaba un tiempo considerable a las búsquedas de ciudades cercanas. Debido a que utiliza el Gazetteer compartido en lugar de un decodificador inverso específico de funciones, el trabajo de indexación geográfica que aceleró las importaciones y "Constellations" también hizo que estas etiquetas fueran mucho más económicas. Las bases compartidas crean victorias compartidas.

Compartir reutiliza la canalización de Passport.

"Then & Now" necesitaba una tarjeta con dos fotos, años, lugar y período. Construir un nuevo exportador habría duplicado el renderizado de luz y oscuridad, las relaciones de aspecto sociales, la precarga de imágenes, el guardado de fotos y la hoja de compartir del sistema.

En su lugar, el par se envuelve como una tarjeta Passport personalizada y se entrega a la pantalla de uso compartido existente. Las imágenes de origen se precargan porque el ImageRenderer fuera de pantalla de SwiftUI es sincrónico en el punto de renderizado final. El usuario ve el mismo flujo de vista previa y destino que se usa para mapas y estadísticas.

Esa reutilización es más que economía de código. Hace que el comportamiento de compartir sea predecible: nada se publica automáticamente, la exportación se ve como la vista previa, y las mismas reglas de accesibilidad y color se aplican.

Los sellos de Passport necesitan una ayuda, no una falsa certeza.

Los sellos de pasaporte reales son un material difícil de OCR. Están descoloridos, rotados, superpuestos a ilustraciones, escritos en muchos idiomas y, a veces, estampados directamente unos sobre otros. Cualquier escáner que afirme una reconocimiento automático perfecto está engañando al usuario con datos de viaje inexactos.

Mapsake utiliza el marco de trabajo Vision de Apple en el dispositivo para extraer el texto que puede leer, y luego clasifica las posibles coincidencias. Un código de aeropuerto IATA es una señal fuerte. Un código de país de dos letras, el nombre del país, un endónimo local, una ciudad, un puerto de entrada o una fecha europea pueden proporcionar evidencia adicional. Los nombres de aeropuerto en el idioma local ayudan a reconocer que una entrada probablemente fue en avión, incluso cuando la OCR falla al final de la palabra.

El motor de coincidencia presenta una sugerencia y una cadena de lugares preferidos: país, región, ciudad y aeropuerto, cuando estén disponibles. Nunca realiza la suposición por sí solo. La pantalla de revisión siempre permite otro candidato o una selección completamente manual.

Esa entrega conservadora es importante. Una sugerencia perdida cuesta un toque. Una sugerencia incorrecta y segura corrompe silenciosamente el atlas.

Un sello de Islandia descolorido cambió el algoritmo de coincidencia.

Un sello real hizo que los límites fueran concretos. El texto del aeropuerto debería haber dicho KEFLAVIKURFLUGVOLLUR, pero la tinta descolorida y el salto de línea fueron interpretados por Vision como algo más cercano a KEFLAVIKURFLUGVOLI UR. Una verificación de palabras completas falló para el término de aeropuerto islandés, por lo que Mapsake no infirió un vuelo ni resolvió el aeropuerto de Keflavik.

La corrección no fue un caso especial para un solo pasaporte. El comparador ahora reconoce los prefijos de palabras comunes de nombres de aeropuertos en varios idiomas: fragmentos correspondientes a "aeropuerto" en islandés, alemán, español, portugués, holandés, idiomas escandinavos y otros. Un final dañado aún puede sugerir el modo de entrada y sesgar la resolución de ubicación hacia un aeropuerto.

Se agregaron dos lecciones más sobre sellos de la UE y el Espacio Schengen. Un código de país ISO de dos letras en el óvalo es útil solo cuando aparece solo; tratar cada palabra de dos letras como un país crearía coincidencias absurdas. Las fechas europeas también deben analizarse primero según el día antes de que un detector general sensible a la configuración regional tenga la oportunidad de leerlas según el mes.

La resolución del punto de entrada es tolerante a prefijos por la misma razón. Las palabras compuestas largas en el idioma local pueden contener un nombre de ciudad o aeropuerto, incluso cuando el glosario incluido almacena la forma más corta en inglés. El resolvedor intenta usar fragmentos iniciales significativos y luego construye la cadena de país, región, ciudad y aeropuerto alrededor del resultado confirmado.

La cadena se muestra antes de guardar. La selección de un aeropuerto con un nivel de detalle fino puede marcar su ciudad, región y país juntos, pero cada nivel inferido permanece visible y editable. La interfaz de usuario está diseñada en torno a una sugerencia sólida seguida de una decisión humana.

Mantén el artefacto, no otra copia.

Un registro de sello de pasaporte almacena metadatos y una referencia a la foto de origen, no a los bytes completos de la imagen. Mapsake crea una miniatura pequeña y regenerable para la pared de sellos y carga la imagen original bajo demanda. Si una imagen original de Fotos se elimina por completo, la reconciliación puede eliminar su sello huérfano sin pretender que la imagen todavía existe.

La palabra "verdaderamente" en esa oración es importante. Un permiso limitado de Fotos no puede probar que un activo no visible fue eliminado; simplemente puede estar fuera de la selección permitida. La reconciliación elimina una marca solo cuando el permiso de la biblioteca es suficiente y ni el identificador local ni el de la nube se resuelven. La ambigüedad mantiene el registro.

Este modelo basado en referencias también mantiene los datos compatibles con CloudKit pequeños. Un sello puede sincronizar su país, fecha, libro, método de entrada, página, estado favorito, nota y identificadores sin intentar almacenar una fotografía de pasaporte dentro de una fila de la base de datos. Una miniatura local de 256 píxel es una caché, no la fuente de la verdad.

Los sellos se pueden organizar en libros de pasaporte con nombres, marcarse como llegadas o salidas, asignar fechas y métodos de entrada, y verlos por país. Recortar, enderezar, rotar y un pincel de desenfoque ayudan a preparar una imagen útil antes de compartir una collage de un país o continente.

El mismo flujo puede escanear una página de identificación de pasaporte en un libro. El análisis de zonas de lectura de máquina proporciona campos estructurados siempre que sea posible, mientras que la imagen permanece como una referencia a la propia biblioteca del usuario.

El reconocimiento de MRZ deshabilita la corrección de idioma. La zona de lectura automática es una secuencia rígida de letras, números y corchetes; pedir al OCR que la convierta en palabras naturales puede hacer que parezca más legible, pero que los campos analizados sean menos precisos. Los campos impresos, como el lugar de nacimiento, utilizan un proceso separado de mejor esfuerzo, y cada resultado se muestra en un formato de libro editable.

Los flujos de cámara y selector comparten un paso de recorte y rotación antes del reconocimiento. Posteriormente, se añadió un dial de enderezamiento, zoom y desplazamiento, y un pincel de desenfoque para detalles sensibles. El editor deshabilita los gestos conflictivos mientras el pincel de desenfoque está activo, y luego combina las ediciones en la imagen de origen guardada según el comportamiento de almacenamiento elegido por el usuario.

La galería de sellos agrupa los artefactos por continente y país, en lugar de solo por pasaporte. Tocar una pila de países expandida abre los sellos individuales; las llegadas, salidas y los favoritos se pueden filtrar; los encabezados de continente y país pueden mostrar un collage a través de la canalización de compartir Passport. Los pasaportes siguen siendo metadatos útiles, pero la geografía es la ruta de navegación más natural en un atlas de viajes.

Técnicamente sólido para generar confianza

Estas funciones utilizan tres técnicas diferentes: uniones de calendario, agrupación espacial y reconocimiento óptico de caracteres (OCR). La experiencia del usuario sigue el mismo patrón:

  1. Deriva un candidato a partir de datos locales existentes.
  2. Mantén el trabajo complejo fuera de la interfaz principal.
  3. Explique qué se encontró.
  4. Permita que el usuario abra, corrija, comparta o ignore esto.

Ese es el tipo de inteligencia que quiero en Mapsake. Debe facilitar el redescubrimiento del registro privado sin fingir que un algoritmo entiende una vida mejor que quien la vivió.

Hay más ingeniería en estas funciones de lo que sugieren sus superficies tranquilas, pero ninguna de ellas debe convertirse en tarea para el usuario. El trabajo técnico tiene éxito cuando "On This Day" se abre al año correcto, "Then & Now" muestra un regreso sorprendente, y una marca difícil ofrece un candidato útil sin exagerar la certeza.

Ícono de la aplicación Mapsake

Desarrollador independiente de Mapsake, que escribe sobre el producto, el mapeo, la privacidad y el trabajo de la plataforma Apple detrás de la aplicación.

Crea tu propio atlas.

Comience con el historial de viajes que ya tiene.

Mapsake es gratuito, no requiere una cuenta de Mapsake para su uso principal y mantiene el reconocimiento de fotos admitido en su dispositivo.

Obtén Mapsake gratis