群晖6.x系统中主要是用Moments来管理相册,之前有个用老版本的Moments来做补丁,可以让群晖支持人脸识别。其实这个有点风险,如果Moments升级多了,可能这个补丁就不好用了而导致程序调用出错。
群晖7.0以上系统新出现的Synology Photos出来后,这个补丁就不起作用了。一方面用的老Moments的so库文件,本来就是碰运气能用。另外一方面,Synology Photos是另外一种软件了,代码和库都有些不一样了。
经过研究,Synology Photos应该使用了OpenCv的DNN神经网络来识别人脸。这个OpenCv库可根据群晖的型号调用不同的神经网络模型,并调用显卡的GPU来加速计算。如果硬件和库代码不匹配,那就无法人脸识别了。所以人脸识别主要是显卡的GPU调用的问题,跟洗白没关系。技术上可以打个补丁解决。
这里的补丁主要是针对黑群晖的,白群晖厂家已经做好了适配,对应的CPU和GPU运行都没问题。如果无法人脸识别,那是Photos套件自身有Bug,等着Photos出新版本修复即可。黑裙由于建于虚拟机或者直接硬件运行群晖,使用的CPU和GPU都不一定是官方群晖用过的,比较容易出问题。 其实神经网络对CPU的兼容性比较高,不容易兼容的是显卡的GPU。
工具
IDA Pro 破解工具
- 之前提供的地址挂了,这个东西也是个破解版,有需要自行搜索下载吧。
Unraid虚拟机教程
Unraid上如何建虚拟机并启用人脸识别
建议
以下是说明的打补丁的技术过程,如果没兴趣可以直接去文章最下面的下载地址下载。
个人建议没特殊需要的话,可以装DS3615xs的群晖,对GPU没要求,不用打如下补丁,可以直接人脸识别。
除非特别想用DS918+的系统,那显卡能支持,已经有人脸识别的话,也不用打补丁。
此补丁主要是为了用了DS918+的系统,显卡又不支持,而没有人脸识别的用户。
如果Synlology Photos升级,版本更新了,补丁可能会失效,需要重新破解。 所以为了省事,最好用DS3615xs,或者能够让显卡支持人脸识别。
提示:
用虚拟机装群晖,最少分4个CPU核心给群晖,在群晖里面要能看到4个核心。如果CPU核心没分够,这个人脸识别的代码库也容易出问题。
获取需修改破解的文件
- 装好群晖7.0以上系统。
- 装好Synology Photos套件
- 在群晖控制面版开启SSH访问。
- 使用如下步骤将文件拷贝出来。
- 拷贝出来的文件出现在群晖的Homes目录的home目录下,群晖文件浏览器可以直接看到,看到后下载到本地用IDA分析。
a. Win10电脑,打开命令行,输入 ssh [email protected]
其中 jinlife是群晖的管理员,后面的ip是群晖的地址。输入密码登录群晖SSH。 第一次登录需要输入一个yes。
b. 登陆后继续输入 sudo -i 并再次输入密码进入管理员权限。
c. 输入如下命令将 libsynophoto-plugin-model.so 拷贝到homes的jinlife目录下。
cp /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so /volume1/homes/jinlife/
破解Synology Photos,让其不调用GPU显卡,只用CPU
用IDA打开libsynophoto-plugin-model.so, 自动分析完后打开输出函数页面 Exports
找到 __int64 __fastcall synophoto::plugin::network::IeNetwork::IsSupported(synophoto::plugin::network::IeNetwork *this)
双击这个函数,进入IDA View,按F5键生成伪代码。进入函数后,找到返回值为1的地方,都改成返回为0. 即强制让所有调用GPU是不是支持的地方都回复不支持。
这里将v8都赋值为0即可。改的时候需要进入 Hex View,右键有个同步选项,将Hex View和伪代码Pseudocode窗口Sync同步。再进入伪代码选择V8=1的地方,点开HexView就可以看到BB 01 00 00 00的代码了。把这个01改成00即可。 两个v8赋值成1的地方都要改。
只有两个字节要改。
改完后,使用IDA的Apply Patch功能,生成破解文件。 保存的时候记得勾上生成备份文件bak。
至此,已经生成了无视GPU的Photos补丁文件。DS918+和DS3615xs一样都不需要GPU就可以人脸识别了。
用群晖的文件浏览器将补丁 libsynophoto-plugin-model.so 拷贝回群晖的homes的jinlife目录。覆盖之前的文件。
如果之前ssh没退出,继续用。退出了就再次登录到管理员权限下。
使用如下的命令将补丁覆盖回原始位置。
cp /volume1/homes/jinlife/libsynophoto-plugin-model.so /var/packages/SynologyPhotos/target/usr/lib/
拷贝完后,重启一下Synology Photos套件。 或者重启群晖也行。
再次备份照片看看情况,正常需要等待一段时间,建议去喝杯茶,群晖需要索引照片后,人脸识别才能正常运行完毕。
补丁下载地址
https://github.com/jinlife/Synology_Photos_Face_Patch/releases
Github认为Readme里面的链接到这个博客是在打广告,没啥征兆就封掉账号了。还真没想到是这个原因,Github太牛了。我只是放了个双向链接,一个是代码库,一个是技术文档,互相引用。结果是打广告。就这小技术博客能有啥广告,都是免费分享的东西,玩玩而已。看来Github不是啥稳定放代码的地方,不靠谱,动不动就封号,这也太不保险了,还是自建的Git库靠谱。最近查了下Github,因为美国制裁还封掉过伊朗的所有个人账号。。。这是个开源的地方吗,太政治了。国内建gitee还是有必要的,有代码还是得多处备份,只放Github的风险太高了。
经过跟Github的Support沟通,终于要回账号了,这帮人瞎搞,没啥正当理由继续封账号,应该是机器人出错了,乱封的账号。这跟杀毒软件误杀似得,做机器人的水平也一般啊,还直接用封账号的方式处理,真不靠谱。
放个执行文件在这,有需求自己patch吧。
链接: https://pan.baidu.com/s/1sjeAbWxNAsc49CODE-31Mw?pwd=d97s
把这个文件用FileStation上传到群晖,在ssh界面用chmod +x PatchELFSharp 加上执行权限,然后运行如下命令即可。可以做成任务计划,升级了Photos之后,运行一下计划就行了。
./PatchELFSharp "/var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so" "_ZN9synophoto6plugin7network9IeNetwork11IsSupportedEv" "B8 00 00 00 00 C3"
从V1.6.0-0629版本开始,群晖把相关代码移到 libsynophoto-plugin-platform.so 文件里面去了,需要用下面的命令改这个文件。之前的文件libsynophoto-plugin-model.so已经没有相关代码了。
# support face and concept
./PatchELFSharp "/var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-platform.so" "_ZN9synophoto6plugin8platform20IsSupportedIENetworkEv" "B8 00 00 00 00 C3"
# force to support concept
./PatchELFSharp "/var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-platform.so" "_ZN9synophoto6plugin8platform18IsSupportedConceptEv" "B8 01 00 00 00 C3"
# force no Gpu
./PatchELFSharp "/var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-platform.so" "_ZN9synophoto6plugin8platform23IsSupportedIENetworkGpuEv" "B8 00 00 00 00 C3"
libsynosdk.so.7 支持NFS和CIFS远程目录。VideoStation或AudioStation可用。
./PatchELFSharp "/usr/lib/libsynosdk.so.7" "SYNOFSIsRemoteFS" "B8 00 00 00 00 C3"
本文作者:jinlife
本文链接:群晖7.0系统中的Synology Photos支持人脸识别的补丁 - https://blog.jinlife.com/index.php/archives/49/
版权声明:本博客内容遵守 “署名-非商业性使用-禁止演绎 4.0 国际”协议(CC BY-NC-ND 4.0),除特别说明外内容皆为原创,可以自由转载与传播,但请署名及注明文章出处。
Gosh · 2022-10-16 02:33
大佬您好,Synology drive使用挂载的文件夹无法创建文件夹 请问能去一下限制吗? 万谢
jinlife · 2022-10-16 09:55 作者
这个貌似是权限问题。
如果是NFS挂载远程目录,挂载权限需要映射好。 先试试CIFS共享目录挂载看看,如果CIFS也不行,那就是群晖内部的权限控制了。这个目前没找到办法弄,跟Photos里面家目录的权限一样比较复杂。
Gosh · 2022-10-18 02:39
是CIFS的,权限全开了,除了这个其他都拜读您的文章完美解决了。
Martin · 2022-11-06 17:01
大佬,请教下,unraid 6.10.2 安装的 7.1-42661 3617xs,人脸识别是可以用的,还有必要去path这个补丁吗,谢谢!
jinlife · 2022-11-08 16:37 作者
都已经可以用了,当然不用patch了。
涉世未深的小白 · 2022-11-28 13:54
大佬你好 想问下黑裙7.1 N5095打完人脸补丁后 硬盘导入照片视频 (多数为IOS备份的)人脸识别一直卡在还有一个照照片待发现
jinlife · 2022-12-02 20:44 作者
可能是别的原因,可以试试在Photos里面上传10来张照片看看情况。
超级小可爱 · 2023-01-13 16:23
大佬有个小问题,使用了libsynosdk.so.7挂载的NFS和CIFS远程目录,jellyfin和NAStools能够识别了但是fellyfin实时刷新影视库会失效,需要手动刷新。nastools目录同步 也不能自动同步,需要手动运行。 这是什么原因呢?
jinlife · 2023-02-06 12:35 作者
这个我没碰到过,我这边用VideoStation,自己写了个脚本定时去索引目录是OK的。
你这个情况建议改改目录的权限,或者可能要写脚本去索引目录。
rxmn · 2023-05-04 13:52
请教一下,索引目录的脚本怎么写,或者网上搜索什么关键字可以找到教程?
yanyisio · 2023-02-04 13:36
大佬您好!想问一下,我有独立显卡,显卡是 telsa P4 ,如何做才能让photos调用独立显卡呢? 系统是 7.1.1 42962 U3
jinlife · 2023-02-06 12:42 作者
你这个首先的群辉里面得有 telsa P4的显卡驱动才行。可以试试,如果驱动不了就是没驱动了。另外,我们只能极其微小的改一下群辉的文件,群辉自身硬件没这个显卡,如果系统和软件不支持,能不能用也是个问题。
建议最好还是往群辉的原生硬件靠近,用 J4125,intel的6到8代的CPU,能用核显,问题少点。群辉系统太老,都不能正常支持比较新的CPU。
zid · 2023-02-17 16:41
感谢大佬,请问用PVE装DS3615xs和DS3617xs、DS3622xs有什么区别吗?这几个都没有GPU,是不是说都可以用。物理机CPU是5代酷睿i5,多谢
jinlife · 2023-02-20 09:05 作者
这些系统都可以用,补丁都不用打,具体看别的需求吧。
大雄 · 2023-03-08 15:32
大佬牛逼啊,用这个方法确实可以识别到了照片了,但是有一个问题就是在照片套件里面删除了图片的话,挂载目录里面删除不了,请问这个请怎么搞.
jinlife · 2023-03-31 17:48 作者
这个没办法,权限问题。
或者不要用家目录,用DS File上传的photo目录。
chen · 2023-04-27 10:06
大佬,我这边用虚拟机配置也够,按前面教程修改后索引照片,开始CPU占用20-30,十几分钟后感觉就停止了 CPU占用上不去了最后也不能识别人物,想问下人物识别的日志在那个路径,我找来看看是什么原因停止的。感谢!
chen · 2023-04-27 10:10
虚拟机I5-6500,给了4核心4G内存,photo目录下面建了子目录 使用NFS挂载到子目录的。
jinlife · 2023-04-28 18:41 作者
看起来像NFS挂载的权限问题。你先用群晖本地目录上传几个图片看看情况吧。
六代的CPU默认支持GPU解码,貌似不需要打补丁就能直接用。
chen · 2023-05-25 16:59
测了下非nfs存储目录的照片也不行
pkids · 2023-06-14 09:12
大佬请教下,群晖的Synology photo已经打了人脸识别补丁,能识别homes/user/文件夹里的照片。
但是我做了细分,分别把照片存到了homes/user/我 homes/user/家人 homes/user/宠物 这几个文件夹里。
刚才试了下,自拍了2张,一张存在“homes/user/”目录里,一张存在“homes/user/我/”目录里,只能识别第一张(根目录那张),这个能怎么修改,让Synology photo识别homes下面所有子文件夹的图吗?
jinlife · 2023-06-25 18:02 作者
这个没碰到过,可以重新索引一下看看。
也有可能是权限问题。
skill7899 · 2023-06-28 19:39
可以让sa6400有核显的时候,修改photos调用核显做人脸吗?
jinlife · 2023-07-02 19:47 作者
硬解后不能核显人脸吗? 这个是系统的问题。
CPU足够人脸识别了,就Photos这点一次性的计算量,用核显也没啥用。而且集成在CPU里面的核显,只能加快一点点计算而已,效果一般般。这个核显或CPU,对于人脸识别的结果没什么区别,区别只是计算得稍微快一点。没什么人用核显做机器学习的研究的,除非用英伟达之类的专业显卡,才会快很多。不过再快也就一次性。有钱的用高级显卡做NAS的人才有用,这种几百瓦的显卡,24小时运行,电费杠杠滴,这种人估计很少。
moments · 2023-08-31 11:05
video和音乐支持nfs smb了,能否让moments也支持,最喜欢moments这个相册了,7.0相册砍了好多功能,ui也不好看,我在虚拟机安装的,文件我想全部放在win来管理,能支持moments识别 smb和nfs就好了
jinlife · 2023-09-03 09:38 作者
moments是改libsynosdk.so.6文件,同样的改法就行。不过Moments跟Photos一样,权限管理比较复杂,改了有一堆问题,特别是无法删文件。不推荐用这个办法。
普通青年 · 2023-10-20 11:20
大佬你好~,
我用了补丁后人脸识别从1万多张开始最后卡在了5868张不动了,好几天了,可以指导一下这个要怎么处理吗?
普通青年 · 2023-10-20 11:23
系统版本是DSM 7.2.1-69057 Update 1
synology Photos版本是1.6.0-0629
黑群晖 DS920+ 虚拟机给了4核心4G内存
jinlife · 2023-10-22 18:42 作者
这个估计图片多了,群晖自身出问题了。只能多试几次了。或者降级到1.5版本再试试。
普通青年 · 2023-10-23 21:56
多谢大佬指导,降级到1.5版本好了。
大好河山 · 2023-10-26 20:01
我的情况跟这个类似。6W张照片慢慢识别到剩下15000张然后数字不减少了。反复重建索引也不行。
jinlife · 2023-10-29 20:51 作者
群晖的Photos V1.6.0版本改动比较大,目前看来不是个稳定的版本。建议降级到1.5用着先,等1.6迭代几次之后估计才会稳定一点。
jeff · 2023-10-21 08:39
7.2正常升级到7.2.1怎么又要人脸重新识别迁移啊。这个有规律么
正在等待人脸识别结果迁移 ,CPU计算好慢啊,又要跑几天
jeff · 2023-10-21 08:40
或者正好升级photos1.6 的原因?
jinlife · 2023-10-22 18:43 作者
升级系统或者重装photos都有可能导致之前的数据库丢失的,这样只能重新识别了。
vogala · 2023-11-04 20:38
今天升级了1.6.1-0141,升级后个人相册不显示了,只有新传的照片能识别并显示,有救吗,大佬?
vogala · 2023-11-04 20:43
重新索引后也只有新上传的,之前的都不见了
jinlife · 2023-11-06 18:48 作者
重新索引也不管用,卸载重装看看。
kasimu · 2023-11-20 18:17
博主你好,请问i5 8600T安装DS920+ 开启人脸识别CPU占用率很高是怎么回事? 核显已经驱动的。
jinlife · 2023-12-13 18:18 作者
这个问题我可能也不知道咋回事,8600T不需要补丁的,原生支持群晖的功能。
seven7th · 2023-12-13 03:37
大佬,1.6.1-0641 按照您的github上的方法替换了两个SO文件,都还是不行,是什么状况?
蜗牛星际的J1900 电子垃圾黑裙
seven7th · 2023-12-13 03:40
另外部分论坛引用了您的代码,他仅更换 1.0.so的那个文件,两个SO文件有什么不同呢
jinlife · 2023-12-13 18:20 作者
这个有人说是链接文件,不过我这边改so也能用,全部替换应该没问题的。可能是替换过程出了问题。
可以在目录下用 ll 命令看看文件是不是真的修改了,可以看到修改日期的。
huangda1982 · 2023-12-13 12:17
您好。
用PatchELFSharp的时候出现了“failed to find function _ZN9synophoto6plugin7network9IeNetwork11IsSupportedEv”,请问怎么办?
另外,photos如何降级到1.5?
jinlife · 2023-12-13 18:28 作者
上面的命令适合1.5版本之前的,1.6开始是改别的文件了。 我更新在上面了。
装1.5 需要卸载掉当前的photos,然后到群晖下载1.5的spk安装包,上传安装就行了。
https://archive.synology.com/download/Package/SynologyPhotos
oaksharks · 2023-12-24 19:13
sa6400,N100 处理器,可以硬解。 今天把photo重装升级到 1.6.1-0141 人脸识别失效了,之前是可以用的。
一个负责迁移的systemd unit 的日志里有 Dependency Failed , 降级回去也不好使了。
jinlife · 2023-12-25 16:32 作者
你用了SA6400,有比较新的kernel,装了最新的GPU驱动吗,N100如果用GPU能驱动,能硬解和人脸识别,那应该用什么版本都没区别,也不用打补丁。
如果驱动不管用,并且打了我这的人脸补丁,那就跟系统没关系了,注意1.5和1.6修改的文件不一样了,别打错补丁了。
oaksharks · 2023-12-25 19:06
核显gpu确认是驱动的,我用jellyfin转码播放时,查看GPU的使用率是非常高的。
照片创建索引时候不管是否大模型,GPU使用率都是0,CPU的使用率也不高。
jinlife · 2023-12-25 20:19 作者
硬解不一定能人脸识别。 如果不行就打补丁吧。如果你一定要核显人脸识别,我这可能提供不了啥帮助。这个是核显驱动或配置的问题。
oaksharks · 2023-12-28 10:11
大佬回复真及时。我在虚拟机里测试,这个补丁是好用的,在那个N100主机上打补丁也试过,还是显示人脸重新识别迁移 。 最后N100主机删除系统分区重装系统了,数据没有丢失。重装完成后没有打补丁就好了。
seven7th · 2023-12-31 12:43
博主您好,有空的时候能测试下1.6.1-0641,我蜗牛星际j1900+DSM7.2,尝试卸载photo套件,还ssh删除了photo的缓存,人脸识别还是失败。 我cd /var/packages/SynologyPhotos/target/usr/lib/ 用ll 命令看了下,从文件修改时间上来看,好像只有libsynophoto-plugin-platform.so.1.0这个文件替换成功了。
其他的文件修改时间都是群晖套件安装的时间。
另外1.6.1-0641 我看文件夹里同时也有libsynophoto-plugin-model.so 文件?
如下:
-rwxr-xr-x 1 SynologyPhotos SynologyPhotos 41258 Dec 31 12:00 libsynophoto-plugin-platform.so.1.0
-rwx------ 1 root root 41258 Dec 31 11:52 libsynophoto-plugin-platform.so.1.0-bak
-rwx------ 1 root root 41258 Dec 31 11:52 libsynophoto-plugin-platform.so-bak
降级到 1.5.0-0489 版本,然后执行您的命令行人脸识别就正常了。
jinlife · 2023-12-31 17:20 作者
博文写得挺清楚啊,1.5.0是给model打补丁,1.6.1之后是改platform文件了。1.6.1里面的model在是在,群晖把里面的补丁相关代码移到platform里面去了。
分清楚文件吧,另外记得重启,我这边试过没问题的。
seven7th · 2024-01-01 08:49
感谢大佬回复,之前试了很多次在套件中心下载 的photo,用您的补丁怎么都不行。
昨天我在https://archive.synology.com/download/Package/SynologyPhotos 手动下载安装,然后应用您的补丁,现在待发现的人脸数量在减少了,而且任务管理器 synofoto-face-extraction 里CPU占用也起来了,谢谢