Table of Contents
看起来修好了
我有一台intel macbook pro. 升级到Ventura以后,我开始逐渐察觉到photos.app的不对劲:不仅是那些新导入的照片无法搜索到,连半年前导入的照片也找不到。
根据网友的说法,我需要:
1:把macbook插上电
2:把photos.app打开并挂在后台
3:在photos.app -> Library底部应该会出现这样的动画:
4:然后就是无尽的等待。你也不知道photos.app到底出了多少力,你也不知道索引究竟进行到哪一步了。
我大概挂过几周的photos.app,结果发现那些照片还是一张都不索引,索引的进度条也是卡在这个30%的位置万年不变,每天就看这个索引的动画反复播放但并没有任何索引的进展。我知道intel芯片会热,索引会慢,但不至于一张都不处理吧,那肯定是macOS的问题,很生气,然后就忘记这件事了。
直到我换了macbook m3,重新把photos.app挂在后台,过了几天发现这个万年不动的进度条居然变了:
最后再过了几天,发现照片居然真的被索引完毕了:
原因推测:可能之前真的是一张照片都没有索引。下面用另一个例子来推测macOS可能存在的这个机制:
在intel macbook迁移到m3时,为了迁移iMessages,我临时买了一个月的icloud订阅,然后在intel macbook上面开启iMessages同步到icloud,结果还没过多久就发现同步停了,而且无论我怎么开关同步按钮,它都拒绝再次同步:
Syncing with iCloud Paused
网上看到的类似问题一般都是附带明确信息的,比如没插电,比如没连wifi,比如当前模式为low power mode,等等。但我这个情况有点特别,它就是不告诉你为什么。
后来我在网上找到一个icloud同步mac photos.app暂停的例子,原因大概是macOS认为当前系统状况(比如cpu温度和占用率)不支持运行这个任务:🔗 [Syncing with iCloud Paused - Mac Needs to… - Apple Community] https://discussions.apple.com/thread/255241912?sortBy=best
根据上面的说法,我直接把intel macbook重启了,然后关掉了所有能关的程序,只留下一个messages.app(此时cpu温度大概是40度),然后把macbook放在那里挂了一夜(我估计cpu温度后续应该降到了40度以下),第二天就发现同步完成了。
这可能正是我的photos.app长期以来(在intel macbook上)无法更新索引的原因:并不是intel芯片索引得慢,而是photos.app就拒绝开始工作。最近2年,只要intel macbook开机以后随便打开几个程序,哪怕什么也不做,cpu温度也是55度起步。由于这台intel macbook我每天都要用,我的确没什么条件单开一个photos.app让它挂在那里索引个好几天。说到cpu温度,这不巧了吗:
事件 | 时间 |
photos.app新加进来的照片都不索引 | 基本都是升级Ventura以后新导入的照片没有被索引 |
cpu普遍55度往上 | 差不多就是从Ventura开始的 |
但m3就完全不同了,即使我正常工作+外挂photos.app在后台索引,cpu温度也基本上不会超过40度,所以photos.app很快就索引好了。
但其实没修好
m3在手里还没超过一个月,我就已经开始察觉到了不对:很多后续导入的照片都没有建立索引。
照片 | 索引 |
m3激活系统时直接导入的上万张照片 | 全都索引了 |
m3激活10天后新导入的照片(导入时间超过一个月) | 只有少部分(大约30%)被索引,而且被索引的照片不连续 |
我基本上把google搜索类似问题的前两页方法试了个遍,包括且不限于:关闭外置显示器并让macbook在唤醒状态下闲置几个小时,打印photoanalysisd进程日志并分析原因,关闭几乎所有程序并让macbook在唤醒状态下闲置几个小时,... 等等。(除了一个需要关闭SIP的方法暂时没有尝试,reddit链接)
photosanalysisd的进程日志我也看过了,由于这是m3 macbook,理所当然地在日志里也不会出现类似这样的内容:
// 类似这样的thermalpolicy日志可以在google上找到一些相似案例,但在我这里并没有出现这种日志
// 来自https://discussions.apple.com/thread/253031497?sortBy=best
501:com.apple.photoanalysisd.backgroundanalysis:C474F8:[
{name: ThermalPolicy, policyWeight: 5.000, response: {Decision: Absolutely Must Not Proceed, Score: 0.00, Rationale: [{thermalLevel >= 2}]}}
], FinalDecision: Absolutely Must Not Proceed}
总之,根据 /System/Library/LaunchAgents/com.apple.photoanalysisd.plist 的设置,在不关闭SIP修改它的前提下,photosanalysisd进程基本上就是每2个小时启动一次,进行1~2分钟的分析工作然后就停手了。我也不知道它具体分析了什么,只是我知道有大量后续导入的照片没有被分析。
目前就是这个情况。ONLY APPLE CAN DO.
在Sequoia新发现的手动索引大法
总之,在2024年4月使用macbook m3以后一直到9月份Sequoia发布,我的photos.app图片的索引都处在一个混沌的阶段:
上面这张图里最让我恼火的就是有几张顽固的不给索引的图片。这几张图片就是普通的图片,文字清晰可见,但就是不给文字索引,而且完全摸不着photos.app不给它索引的原因:它的前后一堆图片都给了索引,唯独它没给。而且我盯着这几张顽固图片好几个月了,时不时就跑去检查一下有没有被索引,结果测到9月份Sequoia更新一周了发现还是没有给出索引,非常生气。
9月24日我突然发现了这样一个操作:
- 搜索一张顽固的不给索引的图片(文字搜索OCR),像往常一样没有结果
- 点开这张图片(双击或者空格键),等待~1秒钟,直到右下角出现了这样的ocr索引标识(不同图片的等待时间不同,但在我这里一般都是秒出)
- 不需要继续点击那个ocr索引标识,直接返回photos.app的主界面
- 直接重新搜索,发现这张图片刚刚被加入了索引
上面这个操作(点开图片强行OCR)实际上我过去几个月绝对尝试过不止一次,每次都没有任何效果,唯独这次(升级Sequoia以后)奏效了。所以我猜测这个功能应该是Sequoia新加的。
又尝试了几张经典的顽固图片,发现都成功被索引了。所以这个方法应该是可行的。
但我不可能一张一张图片去手动添加OCR,所以在思考更简便的方法:
尝试1:点开photos.app的最后一张图片(双击或者空格键),然后按住左键(←)快速往前翻阅图片,不停顿,一直翻到2024年4月的图片为止(因为我知道2024年4月之前的图片是100%索引的)。结果:做了一遍,然后随便找了张图片,发现没有被索引。这个方法应该还是太快了,photos.app反应不过来。
于是我直接写了一个简单的AppleScript,在photos.app界面每隔3秒钟按一下左键(←):
注意:要先在photos.app里面把最后一张图片点开(双击或者空格键),然后才能启动下面这个applescript.
此外这个applescript不会自动停止,要手动退出。更合理的写法应该是写一个x小时定时器,时间到了就自动停止,而不是当前的无限循环。
activate application "Photos"
tell application "System Events"
repeat
key code 123 -- left arrow key
delay 3 -- give 3 seconds for each picture to be recognized and indexed
end repeat
end tell
选择3秒按一下的原因是有些长截图/文字特别多的照片可能要1~2秒才能OCR完毕,为了保险起见使用3秒,确保每张图片都能被索引进去,这样AppleScript只需要跑一遍就可以了。
2024年4月到现在的图片有4000多张(2024年4月之前的图片是100%索引的),3秒钟处理一张,差不多要4个小时,这个AppleScript挂一夜应该就可以了。
跑完了,随机抽了几张(貌似也是以前的顽固不索引图片)测试了一下,发现都被搜索到了,这个问题目前看来应该是解决了(虽然解决方法有点丑陋)。
我的也是Intel Mac而且我常年CPU70度以上,我的没有任何问题,刚才看了下昨天刚拍的照片,人脸也被识别了。不过我开了iCloud Photos。但我看我Mac本地的一些jpg文件的文本识别也没什么问题,用Finder自带的搜索功能搜索关键词能把这些jpg里的文字给搜出来。