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

本文作者:jinlife
本文链接:群晖7.0系统中的Synology Photos支持人脸识别的补丁 - https://blog.jinlife.com/index.php/archives/49/
版权声明:本博客内容遵守 “署名-非商业性使用-禁止演绎 4.0 国际”协议(CC BY-NC-ND 4.0),除特别说明外内容皆为原创,可以自由转载与传播,但请署名及注明文章出处。

43 条评论

  1. Roc
    Roc · 2021-11-17 09:01

    大佬,unraid破解那篇文章的密码是多少?能告知一下吗?谢谢

    1. jinlife
      jinlife · 2021-11-18 11:56 作者

      这个影响不好,自用的,免得后面要用忘了。不好意思。

  2. 雁翅翔
    雁翅翔 · 2021-11-17 15:49

    非常感谢您的分析,让我还了解到ida这个东西,我一直再找这个东西,可惜一直没找到,今天看了你的文章,发现这就是我想要的东西

  3. sewer
    sewer · 2021-11-18 05:24

    照着来了一遍成功了,不过修改那里卡了半天,我这个反编译后的伪代码好像不能直接修改,后来对着你截图的changebyte猜了一下,好在是这个改动比较明显,再复杂点就不好猜哪个地方是等于号右边的1了

    1. sewer
      sewer · 2021-11-18 05:29

      另外为了保险,我替换的是目录下的libsynophoto-plugin-model.so.1.0这个文件,.so那个只是一个软连接,当然不一定有啥影响

    2. jinlife
      jinlife · 2021-11-18 11:51 作者

      这个在伪代码选到了变量后, Hex View里面可以Sync同步位置。实际要在Hex View里面改的。

  4. zz
    zz · 2021-11-18 11:00

    试了下 好像识别不全

    1. jinlife
      jinlife · 2021-11-18 11:54 作者

      这个要么能识别,要么不能识别。 如果识别不全,那可能是Photos的问题了。DS3615xs可能都识别不出来。群晖的bug。
      另外所有的图片最好都是通过Photos上传的,不要用File的方式拷贝进去。这个群晖索引不到。

  5. Join
    Join · 2021-11-18 15:00

    请问博主调用核显和不调用核显识别率是一样的吗? 还是只是识别速度快慢而已?

    1. jinlife
      jinlife · 2021-11-19 13:40 作者

      神经网络调GPU核显速度会快一些。看核显的能力,如果是高端显卡。那速度快很多。
      识别正确率应该都一样。

  6. dull
    dull · 2021-11-20 02:36

    物件能夠識別嗎?

    1. jinlife
      jinlife · 2021-11-22 13:27 作者

      群晖本身好像就不支持。

  7. tt
    tt · 2021-11-22 09:48

    你好,大佬能不能出个DSM7部分套件(比如备份、photo)无法使用使用NFS挂载路径的补丁?
    这有个帖子是DSM6的,也是用IDA分析的。http://www.gebi1.com/thread-300043-1-1.html

    另外这个论坛转发了你的blog,有人提了个注入的方法,你看是否有参考价值?
    https://xpenology.com/forum/topic/45795-redpill-the-new-loader-for-624-discussion/?do=findComment&comment=226764

    1. jinlife
      jinlife · 2021-11-22 13:35 作者

      这个我试过了,没成功。 Photos里面的函数已经改了个地方。其实里面的根方法就是SYNOFSIsRemoteFS。 即使改了这个根方法,让所有判断远程目录的地方失效。我这边在Unraid上试了还是不行,有NFS权限的问题。 之前DSM6成功的也是Photo Station,好像Moments改得比较麻烦了,里面对权限的管理比较复杂。Photos类似。这个改起来改动的字节比较多,风险较高。不建议用这种方式做存储。
      其实这种改字节,打补丁的方式,玩玩还行,除非迫不得已。想稳定最好还是用原始的so文件。

    2. jinlife
      jinlife · 2021-11-22 13:51 作者

      注入的那个办法,还挺不错的方法,Photos升级也不用再改了,不过要点门槛。谢谢你的信息。
      其实我自己在用DS3615xs的虚拟机。如果918+能用GPU会更好,用了好显卡,神经网络计算的速度比CPU快不少。
      这种补丁的改动是给那些一定要用918+但是显卡又不兼容的朋友用的。

      1. Wave
        Wave · 2021-12-11 19:24

        which bootloader are you using for ds 3615?
        I have installed ESXI on intel xeon 2680 v2
        Then, I installed the DSM virtual machine according to this instruction https://11q.kr/www/bbs/board.php?bo_table=s11&wr_id=11230&#c_11467
        but AI functions do not work for me. Synology Photo does not recognize people in photos.
        How did you manage to make these functions work on ds 3615?

        1. jinlife
          jinlife · 2021-12-12 12:46 作者

          It has nothing to do with the bootloader. I have no idea why no one succeed in ESXI and I'm not interested in ESXI. It might be something wrong in ESXI with the CPU or GPU settings.
          Maybe you can try Unraid or PVE, or even baremetal.

    3. Etrock
      Etrock · 2021-11-30 12:35

      放弃吧。。。文件系统权限问题,mount是可以,但跑起来就...
      之前我试过docker目录mount到nfs用,然后docker跑nextcloud,个别版本可行,大部分版本php函数执行不过!
      后来一想,折腾啥NFS,需要NFS应该8成是本机Win系。。。还不如直接给群晖个盘~
      现在我做法是NAS上本机Win10,给一整块硬盘给vmware的黑裙,让黑裙对整盘使用,然后重要数据备份到cloudsync+密码网络留存(度盘2T,满了可以再注册个继续堆);
      本地只留1份文件,哪天硬盘真的挂掉了,多花点时间从度盘拖回来解密即可;

  8. qwert
    qwert · 2021-11-23 21:29

    大佬,你好。根据教程的演示一步一步做了,结果是人脸识别一直待发现(3张照片,40个小时了)。esxi6.7,dsm7.0。8代i5。

    1. jinlife
      jinlife · 2021-11-24 13:38 作者

      貌似ESXI虚拟出来都没有成功的,你在DSM里面能看到几个CPU核心?最好分4个核心给918+再看看。或者不要用ESXI了,用PVE或Unraid。这个ESXI带坑的,不要玩这个虚拟机了。
      识别结果十几二十分钟就能知道,不用等那么久。

      1. qwert
        qwert · 2021-11-24 15:25

        unraid的用了一年半,弃了。pve下的黑群ssd缓存总出问题。换到了esxi,扒了论坛谷歌。确定无解,想试试你的替换,谁知道还是不行,唉。

  9. beelink387
    beelink387 · 2021-11-24 12:33

    附件是的补丁可以直接下载使用吗?我自己修改和用附件的补丁都没有成功
    N3150 DS918+ DSM7
    /dev/dri 下能看到 card0 renderD128
    安装套件后直接识别一直卡在还有XX张照片等待发现
    所以用帖子的方式修改,貌似没生效,还是卡住了

    1. jinlife
      jinlife · 2021-11-24 13:46 作者

      Github上是改过直接能用的,Photos版本号别弄错了。
      等待发现就是不起作用,打补丁前也是这种提示的。你这个补丁没打好。或者用了ESXI虚拟?

      1. kikyou
        kikyou · 2021-12-06 03:04

        我也是ESXI 一直在发现不能用

    2. beelink387
      beelink387 · 2021-11-24 15:03

      刚才重新操作了一遍,并且ssh把moments的目录删除了
      发现已经可以识别人像了,感觉之前应该是卡在了迁移moments的历史数据环节了
      所以博主的方案应该确实是有效的

      1. mecal
        mecal · 2021-11-25 10:02

        如何删除moments的目录?

      2. xman
        xman · 2021-11-25 12:02

        同问,如何删除moments的目录,刚才翻了一下,没找到

        1. 小白白
          小白白 · 2021-12-08 17:26

          ssh root状态下,cd /volume1 进入目录,volume1根据你的硬盘位置可能是volume2
          然后用find -name *Moment*找到相关文件/文件夹
          最后用rm -rf ./文件名/ 删除
          ----
          停用photos套件,重新打补丁,启用photos套件,重新索引
          ----
          我刚刚删除了,现在cpu占用率挺高的,应该可以了

          1. 小白白
            小白白 · 2021-12-08 17:46

            还是卡住了,cpu占用只有3%了。

          2. 琳琳琳琳
            琳琳琳琳 · 2021-12-19 22:10

            我就是6.0直升的,成功了:
            要按照老哥的方式删除Moments的文件。然后暂停套件,重新打补丁,重启,搞定

  10. xman
    xman · 2021-11-25 12:42

    大佬,我用的是星际蜗牛,dsm7.0 synophoto0224最新版,打了so补丁之后,就一直显示正在等待人脸识别结果迁移,只有一张图片,识别起来也是出现这个提示,也就是没有人脸识别。

    1. jinlife
      jinlife · 2021-11-25 19:27 作者

      先试试Photos上传几张图片看看,从Moments升级到Photos,索引是个问题。老照片可能要重建索引。
      可以试试用命令重新索引指定目录
      `synofoto-bin-index-tool -t reindex -i /var/services/homes/admin/Photos/`

      1. xman
        xman · 2021-11-25 20:24

        现在用find搜索了关于moments的相关文件,都删除了,然后重启之后,就人物一栏里,终于不是那个等待迁移,而是无项目,等我传个文件夹进去看看如何,也不知道前面那个人说的注入补丁跟你这个有没有冲突,暂时是两个补丁都做了

    2. xman
      xman · 2021-11-25 20:37

      测试成功了,连ssh,用find -name *Moment* 找到相关的,然后将相关的内容删除,只要不出现等待人脸识别结果迁移,然后补丁打上就应该是正常使用的。
      星级蜗牛,dsm7.0 synophoto0224

      1. 度百岁
        度百岁 · 2021-12-30 10:19

        我也是星际蜗牛A ,也删了moments,现在也是无项目,15张照片测试好像该是不行。

  11. 雨帆
    雨帆 · 2021-12-03 14:50

    谢谢研究,终于开启了黑群晖的人脸识别。

  12. j
    j · 2021-12-12 01:05

    大佬,打了你的补丁还是没有效。
    有几个疑问想请大佬解答一下。

    是否只要将下载地址的libsynophoto-plugin-model.so 用root权限复制到/var/packages/SynologyPhotos/target/usr/lib/
    然后重启套件重建索引 即可?
    homes要留一份吗?套件安装在非卷1也没有问题吗?

    1. jinlife
      jinlife · 2021-12-12 12:58 作者

      这里面各种乱七八糟的情况,这个补丁可没办法解决。
      例如有的人装在ESXI里面,ESXI不知道哪根筋不对,就是无法支持。有人只分配了1个CPU核心给群晖,有人装了两个显卡,影响程序判断,有人从Moments升级上来的,权限都没理清楚。
      套件是装在哪应该没影响,不过照片放在哪比较麻烦,肯定不能放远程目录,群晖权限都管理不了的目录,更别说人脸识别了。

      人家群晖只是按照群晖自身官方硬件开发的,这些各种配置可不在他们开发考虑的范围里面。
      没出问题是幸运的,出了问题就具体问题具体分析,自行解决。
      搞不定就全新安装个新的,简单的,没那么多异常情况的。

      1. pzf
        pzf · 2021-12-23 10:11

        CPU J4205 在ESXI里的安装的黑群晖,补丁无效

        1. jackyzcc
          jackyzcc · 2021-12-31 16:13

          重命名文件为libsynophoto-plugin-model.so.1.0,然后替换这个文件试一下吧。vmware环境是有效的

  13. 009
    009 · 2021-12-15 09:47

    我的主机是J3160的CPU,虽然打了人脸补丁,但是在处理相片人脸的情况上有问题,经常无法激活使用CPU处理相片的人脸情况,平时正常情况下一天就只能处理100张以内的相片。试了好几天,只有一次不知道在什么情况下(我打开VIDEO STATION的时候)人脸处理情况非常快,十来分钟就处理好了人脸情况,但是之后的新相片还是非常慢,2天了200张相片都没有处理完。打开什么套件都无法加快人脸处理。求请教。

  14. jackyzcc
    jackyzcc · 2021-12-31 16:11

    libsynophoto-plugin-model.so这应该是一个软链文件,实测vmware虚拟机复制这个文件,识别速度很慢,最终也无法识别。试了直接替换libsynophoto-plugin-model.so.1.0这个源文件,在vmware环境是有效的

    1. jinlife
      jinlife · 2022-01-06 17:23 作者

      这个比较奇怪了,我这边是so就能用。这里面有linux的不同的版本管理的问题,貌似原始的 libsynophoto-plugin-model.so 和 libsynophoto-plugin-model.so.1.0 不一样的,字节码差很多。
      建议安全保险点,用上面文章里面的方式修改 libsynophoto-plugin-model.so.1.0 再去替换。

发表评论


captcha
请输入验证码