如何访问Apple的照片应用中使用的人物相册

时间:2017-03-18 01:55:09

标签: ios api ios10 apple-photos

Apple的Photo应用程序具有面部识别功能。我想知道是否存在API来访问已由应用分类的照片的关联数据。

(用API标记,不确定哪个标签。)

谢谢!

2 个答案:

答案 0 :(得分:1)

Apple发布了用于访问Apple Photos的SDK,名为Photo Kit。在文档中,您将找到对照片应用程序和照片云的API访问。但是,如果您正在寻找一种HTTP API,我相信不会公开宣布该API。

如果您只需要访问Photos MacOS应用程序上的数据,建议您浏览照片库数据库目录中的SQLite photos.db。

/Users/[yourUserName]/Pictures/Photos Library.photoslibrary/database/photos.db

我这个周末正在研究一个项目,该项目需要类似的人脸数据,并将记录我的进度。这是一个示例SQLite查询,可用于获取所有面孔,照片和对应的人:

SELECT *, RKFace.modelId AS fId
FROM RKFace
JOIN RKMaster ON RKMaster.modelId = RKFace.imageModelId
LEFT JOIN RKFaceGroup ON RKFaceGroup.modelId = RKFace.faceGroupId
LEFT JOIN RKFaceCrop ON RKFaceCrop.faceId = RKFace.imageModelId
LEFT JOIN RKFacePrint ON RKFacePrint.faceId = RKFace.imageModelId
LEFT JOIN RKPerson ON RKPerson.modelId = RKFace.personId;

我希望这会有所帮助。 :-)

答案 1 :(得分:0)

很遗憾,Adrian 提到的文件 photos.db 在 2021 年不再包含数据。但是,我发现了一个名为 /Users/[yourUserName]/Pictures/Photos Library.photoslibrary/database/Photos.sqlite 的大文件,看起来很有希望。这是一个 SQL 查询,它将返回我自己的所有照片作为示例:

SELECT DISTINCT ZPERSON.ZFULLNAME AS FULL_NAME, ZGENERICASSET.ZFILENAME AS FILENAME, ZGENERICASSET.ZDATECREATED + 978307200 AS DATECREATED
FROM ZPERSON
INNER JOIN ZDETECTEDFACE ON ZPERSON.Z_PK=ZDETECTEDFACE.ZPERSON
INNER JOIN ZGENERICASSET ON ZDETECTEDFACE.ZASSET=ZGENERICASSET.Z_PK
WHERE ZPERSON.ZFULLNAME LIKE "Christian%"
ORDER BY ZGENERICASSET.ZDATECREATED DESC

返回的列是 FULL_NAMEFILENAMEDATECREATED。结果日期被指定为以秒为单位的 Unix 时间戳,但它也可能包含一个分数。例如,1618068987.64944 指的是 3:36:27 pm UTC | Saturday, April 10, 2021

作为参考,978307200 是 Apple epoch 和 Unix epoch 之间以秒为单位的差异。我通过这个表达式在 Python 中获得了它:(datetime(2001, 1, 1, 0, 0) - datetime(1970, 1, 1, 0, 0)).total_seconds().