Apple Photos: правильно читайте лица / людей из photos.db - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь прочитать базу данных SQLite photos.db, созданную приложением Photos.app, включенным в Mac OS, в личном проекте.

Однако я борюсь со структурой, возможно,вы, ребята, можете мне помочь?Я не нашел официального руководства, поэтому я начал с просмотра структур таблиц и сравнения данных с тем, что я вижу в Photos.app.

Чтение альбомов: Это кажетсябыть довольно простым и более или менее о запросах к таблице RKAlbums.

SELECT * FROM RKAlbum WHERE RKAlbum.albumSubclass = 3 AND RKAlbum.isInTrash = 0

Чтение фотографий из альбома: Кажется также простым, все более или менее включено в таблицыRKMaster (фотографии) и с небольшим копанием на стековом потоке был управляем*

Объединение лиц и фотографий: Это то, когда все начинает сбивать меня с толку.У меня есть фотография, которую я вижу в Photos.app и запрос als в таблице RKMaster.На этой фотографии есть лицо с лицом, которое я также вижу в Photos.app.Однако я не могу найти RKMaster.modelId в RKFace.imageModelId.То же самое происходит и наоборот: в RKFace.imageModelId есть записи, но многие из них (не все) отсутствуют в RKMaster.modelId.

Есть идеи, как хранятся данные? Я уверен, что мне не хватает нескольких таблиц для объединения данных или чего-то еще.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 01 июля 2019

Это сработало для меня.

-- find people in a photo. specify photo name in where clause
select versions.*, persons.displayName, masters.imagePath from RKMaster masters
inner join RKVersion versions on versions.masterUuid = masters.uuid
inner join RKFace faces on faces.imageModelId = versions.modelId
inner join RKPerson persons on persons.modelId = faces.personId
where imagePath like '%P7251558.JPG';
...