群晖7.0系统中的Synology Photos支持人脸识别的补丁

由 jinlife 发布

群晖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。

工具

  1. IDA Pro 破解工具

    • 之前提供的地址挂了,这个东西也是个破解版,有需要自行搜索下载吧。

Unraid虚拟机教程

  1. Unraid上如何建虚拟机并启用人脸识别

建议

以下是说明的打补丁的技术过程,如果没兴趣可以直接去文章最下面的下载地址下载。
个人建议没特殊需要的话,可以装DS3615xs的群晖,对GPU没要求,不用打如下补丁,可以直接人脸识别。
除非特别想用DS918+的系统,那显卡能支持,已经有人脸识别的话,也不用打补丁。
此补丁主要是为了用了DS918+的系统,显卡又不支持,而没有人脸识别的用户。
如果Synlology Photos升级,版本更新了,补丁可能会失效,需要重新破解。 所以为了省事,最好用DS3615xs,或者能够让显卡支持人脸识别。

提示:

用虚拟机装群晖,最少分4个CPU核心给群晖,在群晖里面要能看到4个核心。如果CPU核心没分够,这个人脸识别的代码库也容易出问题。

获取需修改破解的文件

  1. 装好群晖7.0以上系统。
  2. 装好Synology Photos套件
  3. 在群晖控制面版开启SSH访问。
  4. 使用如下步骤将文件拷贝出来。
  5. 拷贝出来的文件出现在群晖的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)
Exports_1.png

双击这个函数,进入IDA View,按F5键生成伪代码。进入函数后,找到返回值为1的地方,都改成返回为0. 即强制让所有调用GPU是不是支持的地方都回复不支持。
Function1To0_2.png

这里将v8都赋值为0即可。改的时候需要进入 Hex View,右键有个同步选项,将Hex View和伪代码Pseudocode窗口Sync同步。再进入伪代码选择V8=1的地方,点开HexView就可以看到BB 01 00 00 00的代码了。把这个01改成00即可。 两个v8赋值成1的地方都要改。
ChangeByte_3.png

只有两个字节要改。
PatchedByte_4.png

改完后,使用IDA的Apply Patch功能,生成破解文件。 保存的时候记得勾上生成备份文件bak。
ApplyPatch_5.png

至此,已经生成了无视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"

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),除特别说明外内容皆为原创,可以自由转载与传播,但请署名及注明文章出处。

92 条评论

  1. Gosh
    Gosh · 2022-10-16 02:33

    大佬您好,Synology drive使用挂载的文件夹无法创建文件夹 请问能去一下限制吗? 万谢

    1. jinlife
      jinlife · 2022-10-16 09:55 作者

      这个貌似是权限问题。
      如果是NFS挂载远程目录,挂载权限需要映射好。 先试试CIFS共享目录挂载看看,如果CIFS也不行,那就是群晖内部的权限控制了。这个目前没找到办法弄,跟Photos里面家目录的权限一样比较复杂。

      1. Gosh
        Gosh · 2022-10-18 02:39

        是CIFS的,权限全开了,除了这个其他都拜读您的文章完美解决了。

  2. Martin
    Martin · 2022-11-06 17:01

    大佬,请教下,unraid 6.10.2 安装的 7.1-42661 3617xs,人脸识别是可以用的,还有必要去path这个补丁吗,谢谢!

    1. jinlife
      jinlife · 2022-11-08 16:37 作者

      都已经可以用了,当然不用patch了。

  3. 涉世未深的小白
    涉世未深的小白 · 2022-11-28 13:54

    大佬你好 想问下黑裙7.1 N5095打完人脸补丁后 硬盘导入照片视频 (多数为IOS备份的)人脸识别一直卡在还有一个照照片待发现

    1. jinlife
      jinlife · 2022-12-02 20:44 作者

      可能是别的原因,可以试试在Photos里面上传10来张照片看看情况。

  4. 超级小可爱
    超级小可爱 · 2023-01-13 16:23

    大佬有个小问题,使用了libsynosdk.so.7挂载的NFS和CIFS远程目录,jellyfin和NAStools能够识别了但是fellyfin实时刷新影视库会失效,需要手动刷新。nastools目录同步 也不能自动同步,需要手动运行。 这是什么原因呢?

    1. jinlife
      jinlife · 2023-02-06 12:35 作者

      这个我没碰到过,我这边用VideoStation,自己写了个脚本定时去索引目录是OK的。
      你这个情况建议改改目录的权限,或者可能要写脚本去索引目录。

      1. rxmn
        rxmn · 2023-05-04 13:52

        请教一下,索引目录的脚本怎么写,或者网上搜索什么关键字可以找到教程?

  5. yanyisio
    yanyisio · 2023-02-04 13:36

    大佬您好!想问一下,我有独立显卡,显卡是 telsa P4 ,如何做才能让photos调用独立显卡呢? 系统是 7.1.1 42962 U3

    1. jinlife
      jinlife · 2023-02-06 12:42 作者

      你这个首先的群辉里面得有 telsa P4的显卡驱动才行。可以试试,如果驱动不了就是没驱动了。另外,我们只能极其微小的改一下群辉的文件,群辉自身硬件没这个显卡,如果系统和软件不支持,能不能用也是个问题。
      建议最好还是往群辉的原生硬件靠近,用 J4125,intel的6到8代的CPU,能用核显,问题少点。群辉系统太老,都不能正常支持比较新的CPU。

  6. zid
    zid · 2023-02-17 16:41

    感谢大佬,请问用PVE装DS3615xs和DS3617xs、DS3622xs有什么区别吗?这几个都没有GPU,是不是说都可以用。物理机CPU是5代酷睿i5,多谢

    1. jinlife
      jinlife · 2023-02-20 09:05 作者

      这些系统都可以用,补丁都不用打,具体看别的需求吧。

  7. 大雄
    大雄 · 2023-03-08 15:32

    大佬牛逼啊,用这个方法确实可以识别到了照片了,但是有一个问题就是在照片套件里面删除了图片的话,挂载目录里面删除不了,请问这个请怎么搞.

    1. jinlife
      jinlife · 2023-03-31 17:48 作者

      这个没办法,权限问题。
      或者不要用家目录,用DS File上传的photo目录。

  8. chen
    chen · 2023-04-27 10:06

    大佬,我这边用虚拟机配置也够,按前面教程修改后索引照片,开始CPU占用20-30,十几分钟后感觉就停止了 CPU占用上不去了最后也不能识别人物,想问下人物识别的日志在那个路径,我找来看看是什么原因停止的。感谢!

    1. chen
      chen · 2023-04-27 10:10

      虚拟机I5-6500,给了4核心4G内存,photo目录下面建了子目录 使用NFS挂载到子目录的。

      1. jinlife
        jinlife · 2023-04-28 18:41 作者

        看起来像NFS挂载的权限问题。你先用群晖本地目录上传几个图片看看情况吧。
        六代的CPU默认支持GPU解码,貌似不需要打补丁就能直接用。

  9. chen
    chen · 2023-05-25 16:59

    测了下非nfs存储目录的照片也不行

  10. pkids
    pkids · 2023-06-14 09:12

    大佬请教下,群晖的Synology photo已经打了人脸识别补丁,能识别homes/user/文件夹里的照片。

    但是我做了细分,分别把照片存到了homes/user/我 homes/user/家人 homes/user/宠物 这几个文件夹里。

    刚才试了下,自拍了2张,一张存在“homes/user/”目录里,一张存在“homes/user/我/”目录里,只能识别第一张(根目录那张),这个能怎么修改,让Synology photo识别homes下面所有子文件夹的图吗?

    1. jinlife
      jinlife · 2023-06-25 18:02 作者

      这个没碰到过,可以重新索引一下看看。
      也有可能是权限问题。

  11. skill7899
    skill7899 · 2023-06-28 19:39

    可以让sa6400有核显的时候,修改photos调用核显做人脸吗?

    1. jinlife
      jinlife · 2023-07-02 19:47 作者

      硬解后不能核显人脸吗? 这个是系统的问题。
      CPU足够人脸识别了,就Photos这点一次性的计算量,用核显也没啥用。而且集成在CPU里面的核显,只能加快一点点计算而已,效果一般般。这个核显或CPU,对于人脸识别的结果没什么区别,区别只是计算得稍微快一点。没什么人用核显做机器学习的研究的,除非用英伟达之类的专业显卡,才会快很多。不过再快也就一次性。有钱的用高级显卡做NAS的人才有用,这种几百瓦的显卡,24小时运行,电费杠杠滴,这种人估计很少。

  12. moments
    moments · 2023-08-31 11:05

    video和音乐支持nfs smb了,能否让moments也支持,最喜欢moments这个相册了,7.0相册砍了好多功能,ui也不好看,我在虚拟机安装的,文件我想全部放在win来管理,能支持moments识别 smb和nfs就好了

    1. jinlife
      jinlife · 2023-09-03 09:38 作者

      moments是改libsynosdk.so.6文件,同样的改法就行。不过Moments跟Photos一样,权限管理比较复杂,改了有一堆问题,特别是无法删文件。不推荐用这个办法。

发表评论


captcha
请输入验证码