Apple的Photo应用程序具有面部识别功能。我想知道是否存在API来访问已由应用分类的照片的关联数据。
(用API标记,不确定哪个标签。)
谢谢!
答案 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_NAME
、FILENAME
和 DATECREATED
。结果日期被指定为以秒为单位的 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()
.