TL;DR
GeoCloak — агентная система из трёх ролей. Первая (ClueAgent) находит на фото всё, что выдаёт место съёмки, и ранжирует подсказки по точности. Вторая (EditAgent) правит самые опасные из них: заменяет текст на вывеске, меняет объект, стирает деталь. Третья (Orchestrator) в цикле проверяет два условия: модель уже не угадывает место, и фото не испортилось. Правка идёт точечно, а не шумом по всей картинке.
Главная находка: подсказки, которые выдают место, обычно мелкие и на периферии кадра. Это табличка с названием улицы, вывеска магазина, номер машины, почтовый ящик нужной формы. Человек их почти не замечает, а модель, понимающая картинки (LVLM), по ним определяет город по одному фото без метаданных. Размытие и удаление метаданных почти не помогают. Защитный «шум» поверх всей картинки портит снимок и всё равно защищает хуже.
Метод решает это так: находи подсказки → правь самую «дорогую» → проверяй, что модель ошибается, а фото осталось прежним. В цикле три шага, пока модель не перестанет угадывать место или не кончится лимит попыток. Точность определения города упала с 41% до 10%. Одной семантической правки уже хватает для сильной защиты, шум нужен только для остатков.
Схема метода
ШАГ 0: ClueAgent смотрит на исходное фото и пытается угадать место
→ если угадал: режим «стандарт»
→ если не угадал: режим «с подсказкой» (ему сообщают реальное место,
чтобы он нашёл скрытые улики, которые заметит более сильный атакующий)
ЦИКЛ (до N попыток):
ШАГ 1: ClueAgent.analyze(фото) → список подсказок:
тип (достопримечательность / текст и вывески / культура / пространство),
описание, область на фото, оценка точности 0–1
ШАГ 2: EditAgent.plan(подсказки) → план: какую подсказку правим,
одна из 5 стратегий, текстовый запрос для редактора, обоснование
ШАГ 3: EditAgent.execute → новое фото
ШАГ 4: Orchestrator.utility_check → главные объекты на месте? фото не уехало?
→ нет: откат, EditAgent переделывает план
ШАГ 5: Orchestrator.protection_check → ClueAgent.geopredict(новое фото)
→ угадал верно: новая итерация
→ не угадал: СТОП
В статье шаги идут в разных вызовах модели под управлением кода-оркестратора. В чате это несколько сообщений подряд.
5 стратегий правки:
- ReplaceText — заменить текст на вывеске, номере, названии магазина на текст из похожего, но другого региона.
- ReplaceObject — заменить объект (почтовый ящик, трамвай, дорожный знак) на правдоподобный из соседней страны.
- EraseObject — стереть деталь, которую нельзя заменить, но можно аккуратно закрасить.
- AddDecoy — добавить рядом ложную подсказку, если главная улика слишком большая.
- StyleTransfer — сменить стиль дальних зданий или растительности, не трогая главный объект.
5 принципов выбора, по порядку: 1. Начни с малого: бери подсказку с лучшим отношением «точность / площадь». 2. Вписывай естественно: свет, перспектива и стиль не должны меняться. 3. Оставайся культурно близко: замены только из соседнего региона. 4. Не трогай главный объект. 5. Упорствуй и эскалируй: при неудаче перепиши запрос, потом смени стратегию.
Пример применения
Задача: Блогер из Казани хочет выложить сторис из кофейни с видом из окна, но не хочет, чтобы подписчики (и случайные люди) вычислили район. В кадре его латте на подоконнике. Во дворе видна табличка с названием улицы, вывеска местной пекарни и машина с кодом региона 116. Башни Сююмбике или других узнаваемых достопримечательностей нет, они были бы сознательным раскрытием места.
Промпт:
Ты работаешь как система из трёх ролей. Я загружаю фото и сообщаю реальное место съёмки: Казань, Россия, район Старо-Татарская слобода. Твоя цель: чтобы по отредактированному фото место нельзя было определить, а фото осталось тем же по смыслу.
Задача 1. Найди все подсказки о месте на фото. Для каждой дай:
- тип: достопримечательность / текст и вывески / культура / пространство
- описание и почему она выдаёт место
- область на фото (где находится)
- оценка точности от 0 до 1 (1 = однозначно указывает на место)
Задача 2. Как атакующий: по этим подсказкам назови лучшую догадку «город, страна».
Выбери одну подсказку с лучшим отношением «оценка точности / площадь на фото».
Выбери стратегию: ReplaceText, ReplaceObject, EraseObject, AddDecoy, StyleTransfer.
Принципы по порядку:
1. Начни с малого.
2. Вписывай естественно: свет, перспектива, стиль.
3. Замены только из соседнего региона, чтобы выглядело правдоподобно.
4. Не трогай главный объект (латте, подоконник).
5. При неудаче перепиши запрос, затем смени стратегию.
Выдай план: подсказка, стратегия, обоснование и готовый запрос для редактора изображений на английском.
Я вставлю запрос в редактор изображений и пришлю результат. Тогда проверь:
- utility_check: главные объекты на месте, фото выглядит естественно, артефактов нет? Если нет, откат и новый план.
- protection_check: повтори роль ClueAgent на новом фото. Если ты всё ещё называешь Казань, начинай новую итерацию. Если нет, остановись.
Максимум 5 итераций. В конце перечисли, какие подсказки остались видимыми.
Начни с шага 0: проанализируй фото и назови догадку.
Результат: Модель сначала выдаст таблицу подсказок с типами, областями и оценками. Скорее всего, сверху окажутся табличка с улицей и номер региона на машине. Затем она предложит план: стратегию, обоснование и готовый запрос для редактора изображений (например, Nano Banana или встроенный редактор ChatGPT). Вы вставляете запрос в редактор, возвращаете картинку, и модель проверяет её и повторно угадывает место. Цикл идёт, пока модель не перестанет называть Казань или не кончатся 5 попыток. В финале будет список подсказок, которые ещё остались.
Почему это работает
Слабость: защита «в лоб» плохо работает. Размытие и очистка метаданных не мешают модели читать вывески и узнавать архитектуру. Шум поверх всего кадра портит снимок и действует одинаково на все фото, хотя у каждого фото свои улики.
Сильная сторона LLM: модель, понимающая картинки, умеет находить и классифицировать улики, как это делает атакующий. Она же умеет описывать правки словами и выбирать стратегию под конкретную подсказку. Один и тот же инструмент служит и атакующим, и защитником, и проверяющим.
Как метод это использует: ClueAgent сам играет роль атакующего, поэтому условие остановки честное: «модель больше не угадывает». Правка идёт в первую очередь по самым информативным и самым мелким подсказкам, так что фото почти не меняется, а место становится нечитаемым. Жёсткий utility_check не даёт правке задеть главный объект.
Рычаги управления:
- Число итераций N → меньше для беглой проверки, больше для чувствительных фото.
- Целевой уровень защиты → «страна» сильнее, чем «город»: нужно убрать больше улик.
- Режим «с подсказкой» (вы называете реальное место) → модель находит скрытые улики, которые пропустила бы без подсказки.
- Набор стратегий → уберите AddDecoy, если ложные объекты неприемлемы.
- Порядок принципов → поставьте «не трогай главный объект» выше всего, если снимок критичен.
Шаблон промпта
Ты работаешь как система из трёх ролей. Я загружаю фото и сообщаю реальное место съёмки: {реальное_место}. Цель: чтобы по отредактированному фото {уровень_защиты} нельзя было определить, а фото осталось тем же по смыслу.
Задача 1. Найди все подсказки о месте на фото. Для каждой дай:
- тип: достопримечательность / текст и вывески / культура / пространство
- описание и почему она выдаёт место
- область на фото
- оценка точности от 0 до 1 (1 = однозначно указывает на место)
Задача 2. Как атакующий: по этим подсказкам назови лучшую догадку «{формат_догадки}».
Выбери одну подсказку с лучшим отношением «оценка точности / площадь на фото».
Выбери стратегию: ReplaceText, ReplaceObject, EraseObject, AddDecoy, StyleTransfer.
Принципы по порядку:
1. Начни с малого.
2. Вписывай естественно: свет, перспектива, стиль.
3. Замены только из соседнего региона.
4. Не трогай главный объект: {главный_объект}.
5. При неудаче перепиши запрос, затем смени стратегию.
Выдай план: подсказка, стратегия, обоснование и готовый запрос для редактора изображений на английском.
Я вставлю запрос в редактор изображений и пришлю результат. Тогда проверь:
- utility_check: главные объекты на месте, фото естественное, артефактов нет? Если нет, откат и новый план.
- protection_check: повтори роль ClueAgent на новом фото. Если ты всё ещё называешь {реальное_место}, начинай новую итерацию. Иначе остановись.
Максимум {число_итераций} итераций. В конце перечисли, какие подсказки остались.
Начни с шага 0: проанализируй фото и назови догадку.
Что подставлять: {реальное_место} — где сделан снимок на самом деле; {уровень_защиты} — город, регион или страну; {формат_догадки} — например, «город, страна»; {главный_объект} — то, что должно остаться нетронутым; {число_итераций} — обычно 3–5.
🚀 Быстрый старт — вставь в чат:
Вот шаблон GeoCloak для защиты геолокации фото. Адаптируй под мою задачу: [опиши, какое фото и что хочешь скрыть].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит реальное место съёмки, нужный уровень защиты и что в кадре главное. Реальное место нужно, чтобы остановка цикла была честной: «модель больше не называет именно это место». Главный объект нужен, чтобы правки его не задели. Остальное модель возьмёт из шаблона.
Ограничения
⚠️ Ручной вариант в чате — это адаптация: в статье цикл исполняет код-оркестратор. Он считает метрики (CLIP-сходство, проверка главных объектов) и запускает правки сам. Шаблон выше — упрощённый перенос идеи, его эффективность авторы не проверяли.
⚠️ Нужно знать реальное место: оно служит условием остановки. Фото и место при этом уходят облачной модели, то есть вы передаёте приватные данные провайдеру. Статья отмечает этот риск и предлагает открытые модели на своём железе.
⚠️ Остановка по одной модели — не гарантия: цикл заканчивается, когда ваша модель перестала угадывать место. Это не значит, что убраны все улики. Более сильный атакующий может справиться. Поэтому в оригинале есть режим «с подсказкой» и внешняя проверка.
⚠️ Крупные улики плохо поддаются правке: целую архитектуру или скайлайн стереть нельзя. Для таких случаев в оригинале используется шум, который требует кода и GPU. Это вне чата.
⚠️ Узнаваемые достопримечательности исключены: если в кадре Эйфелева башня, метод не для вас. Авторы считают, что такое фото обычно выкладывают сознательно.
⚠️ Качество редактора изображений: правка должна выглядеть естественно. Плохо вписанная вывеска сама бросается в глаза и портит снимок.
⚠️ Цена и время: оригинал тратит в среднем около $0.32 и 8 минут на фото при максимальной защите. В ручном режиме это ваше время.
Как исследовали
Команда собрала четыре набора фото из 108 стран и 576 городов. Убрали снимки с узнаваемыми достопримечательностями, потому что их выкладывают намеренно и модели угадывают их по памяти, а не по уликам. Атаковали 5 разными LVLM тремя способами: простой запрос, двухэтапный разбор подсказок и агент с инструментами. Получилось 11 конфигураций атакующих. Проверяли и на поисковом GeoCLIP, и на коммерческом GeoSeer. Базой для сравнения были два метода шума, M-Attack и GeoShield.
Точность определения города упала с 41,2% до 9,9%, у M-Attack — 24,5%, у GeoShield — 19,7%. Против сильнейшего атакующего (Gemini 3.1 Pro) — с 51,3% до 13,8%, а у конкурентов 33,2% и 37,3%. Сама система работала на Gemini-2.5-Pro, но защищала и от более сильных моделей.
Люди оценили качество правленых фото на 4,43 из 5, у конкурентов 2,63 и 2,53. Сходство по CLIP составило 0,92 против 0,77 и 0,42. Удивительно, что одной семантической правки уже достаточно для сильной защиты, а шум добавляет лишь часть эффекта. Авторы проверили и адаптивных атакующих: промпты, учитывающие правки, предобработку и дообучение на защищённых фото. Защита держалась.
Практический вывод: защита фото — это работа с конкретными уликами, а не с картинкой целиком. Модель, которая нашла улики, может сама подсказать, что править.
Адаптации и экстраполяции
🔧 Техника: убрать «реальное место» → режим аудита без правок
Для быстрой проверки перед публикацией оставьте только роль ClueAgent. Уберите EditAgent и Orchestrator и замените финал:
Найди все подсказки о месте на фото (тип, область, оценка точности 0–1).
Назови догадку «город, страна» и уверенность. Дай топ-3 улики, которые я должен убрать первыми.
Вы получите быстрый аудит: знаете, что стоит закрыть, и правите вручную в любом редакторе.
Экстраполяция (не из статьи): тот же принцип «ранжируй улики по информативности к размеру» можно применить к скриншотам и документам перед публикацией. Попросите модель найти мелкие утечки: номера, имена в вкладках, названия внутренних систем. Это моя идея, статья такого не проверяла.
Ресурсы
- Название: GeoCloak: An Agentic Framework for Semantics-Preserving Geolocation Privacy via Peripheral Clue Manipulation
- Авторы: Yixin Wu (HKUST Guangzhou / HKUST), Mingjie Li, Michael Backes, Yang Zhang (CISPA Helmholtz Center for Information Security), Yun Shen (HPE)
- Связанные работы из статьи: GeoMiner (двухэтапный разбор улик, Li et al.), GeoVista (агент-геолокатор), M-Attack, GeoShield, GeoCLIP, GeoSeer
- Полные промпты EditAgent находятся в Appendix B, примеры стратегий в Appendix C, многошаговый пример в Appendix A (в присланном фрагменте их нет)
