自建服务 · 2022年4月5日 1

为Nextcloud配置人脸识别

现在的智能手机或者云相册很多都有人脸相册功能,即识别照片中的人脸将照片按照其中的人进行分类。在Nextcloud上部署人脸识别能够降低隐私泄露风险,帮助用户更好的整理私人照片。本篇文章来讲述如何用NextCloud“应用”中“Face Recognition”进行本地化部署的人脸识别。

进行本操作需要您能够使用服务器的命令行,阅读本文章需要一些基础的Linux命令行使用知识。

官方提供的预览图片

这里以笔者服务器的Ubuntu 20.04.4系统为例,其他系统可做参考。

0.环境需求

  • 硬件需求(至少满足其一)
    • 需要有支持CUDA的GPU(常见于NVIDIA的显卡)
    • 至少有1GB以上的可用RAM(最低要求而非推荐值)
  • CPU支持amd64(x86_64)和arm64
  • 软件需求
    • Nextcloud版本在14以上
    • PHP版本为7.x及以上
    • php-bz2
    • php-pdlib安装(后续会说明如何安装)

有GPU会极大提高识别速度但并非必要。如果无GPU,人脸检测可能花费2~4GB的RAM花费40~120秒(取决于您的CPU)

1.安装php-pdlib

要配置人脸识别之前需要安装一个叫做pdlib的PHP库,以下是官方提供的安装方法。

对于Ubuntu 20.04(Ubuntu Focal Fossa),在root权限下依次执行以下命令来安装。(对应PHP版本应为7.4)

echo "deb https://repo.delellis.com.ar focal focal" > /etc/apt/sources.list.d/20-pdlib.list
wget -qO - https://repo.delellis.com.ar/repo.gpg.key | sudo apt-key add -
apt update
apt install php7.4-pdlib

对于Ubuntu 18.04(Ubuntu Bionic),在root权限下依次执行以下命令来安装。(对应PHP版本应为7.2,但系统中包名叫7.0)

echo "deb https://repo.delellis.com.ar bionic bionic" > /etc/apt/sources.list.d/20-pdlib.list
wget -qO - https://repo.delellis.com.ar/repo.gpg.key | sudo apt-key add -
apt update
apt install php7.0-pdlib

其他操作系统(Debian/Ubuntu/Fedora)或者Docker方法请见官方Wiki的installation部分

2.在PHP中启用php-pdlib

笔者按照以上方法安装php-pdlib是无法直接使用常规的phpenmod方式启用,需要先进入“/etc/php/7.4/mods-available”(因系统以及PHP版本不同路径不同)中新建一个pdlib.ini的文件并配置。

cd /etc/php/7.4/mods-available
sudo vim pdlib.ini

然后在文件中输入以下内容

; configuration for php xml module
; priority=15
extension=pdlib.so

:wq保存以后使用以下命令开启此模块

sudo phpenmod pdlib

这时php-pdlib就启用了。其他系统或者集成环境只需要按照对应的打开php模块的方式即可。

3.在NextCloud里安装Face Recognition应用

点击您的头像,再点击“应用”进入到应用网页。在其中的Multimedia中找到Face Recognition。点击“下载并启用”等待安装结束。(如果pdlib没有成功启用此处下载后不会安装会提示没有安装pdlib)

此时应用并不能进行任何操作,需要进行下面的配置。

4.命令行中配置

4.1 配置PHP

首先cd到Nextcloud根目录(笔者为/var/www/html/nextcloud)

给予occ可执行权限(如果没有)(命令:chmod +x occ)

首先获取php设置中的Memory Limit大小,输入以下命令“php -i | grep memory_limit”。若小于1024M则需要设置为1024M或以上。

然后如果需要修改的话,输入“php –ini | grep “Loaded Configuration File””获取文件位置,我这里在“/etc/php/7.4/cli/php.ini”那么我就是用vim来编辑它“sudo vim /etc/php/7.4/cli/php.ini”。在其中找到memory_limit,等号后边改为1024M。

4.2 选择一个预训练的人工智能模型

Face Recognition为我们提供了四种预训练的模型,详细信息见此。这里翻译其中的对比:

比较模型 1 (CNN5)模型 2 (CNN68)模型 3 (HOG)模型 4 (CNN5HOG)
面部识别可以在很小的图片里找到人脸.和模型1用的相同,所以结果一样.需要较大的图片才能识别.如果用模型1的面部识别那么结果和1一致.
内存消耗根据所用图像大小线性增加根据所用图像大小线性增加,基本和1一致无论图像如何占用基本在100Mb.根据所用图像大小线性增加,基本和1一致
处理时间处理时间根据图像面积线性增加基本上和模型1一致比1或者2略短此模型使用模型1和模型2扫描,所以耗时成倍增加
集群质量高 (只对于侧脸有一些小错误)低(可能在不是正脸上有更多错误.)非常高(基本只找正脸)非常高(和模型3相似但能识别更多脸)

备注:模型2已经discontinued,不再建议使用。

模型3具有消耗资源少,准确度高的特点,那么我采用模型3为例。

输入以下命令选择模型(位于NextCloud根目录下,以网站服务器使用的用户执行)

./occ face:setup --model 3

在Ubuntu上apache2默认用户为www-data,那么可以使用以下命令来用www-data用户执行

/bin/sudo -u www-data ./occ face:setup --model 3

(3可以替代为您想用的模型)

输入完毕以后会检查您的配置,如果配置不合格会提示您。若合格将会自动下载安装模型。

到此基本配置就完成了。

5.在NextCloud中尝试使用

5.1 开启用户的人脸识别

点击头像再点击“设置”,在左侧“个人”找到“面部识别”,勾选“分析我的图像,并用相似的面孔将我的亲友分组”。如果取消勾选就会删除已经是别的数据并关闭对于自己用户的人脸识别。此时刚刚开启这里不会显示任何面孔。

5.2 手动执行一次人脸识别

在左侧“管理”中找到“面部识别”,这里可以进行一些设置。稍后进行人脸识别时此处可以看到进度。

然后继续在命令行中输入(位于NextCloud根目录下,以网站服务器使用的用户执行)

./occ face:background_job -t 900

Ubuntu上用www-data用户权限来执行可使用

/bin/sudo -u www-data ./occ face:background_job -t 900

这个命令的作用是执行一次面部识别,如果有图片识别超过900s那么就放弃(可自行更改超时时间)。

刚才打开的浏览器页面中可以看到进度条和信息。

在识别完毕后在执行一次您会发现很快就结束,这是因为不会再对已经识别过的照片再进行一次识别。

5.3 查看人脸识别结果

回到“个人”中的“面部识别”,等待一会儿以后这里会出现提示让您对面孔进行操作(人脸命名、忽略等)。

官方提供的演示图片

设置以后就如本帖第一张图一样。点击一个人脸就可以看到关联的所有照片。

在您的“文件”中查看被识别的照片信息时会出现一个“身份”标签页,在此可以看到照片中出现的人,可以在此对其进行有关操作。(笔者截图)

笔者在文件里信息的截图

如果您想忽略某个文件夹,可以在文件夹信息里取消勾选相关内容。

忽略文件夹操作方法

以上就是基本的使用操作。但是程序不会自动进行面部识别,需要继续进行配置。

6.设置自动面部识别

这里使用到Linux系统中crontab来进行定时命令。请注意您在crontab中应当使用绝对路径。

您可以在root的crontab里使用网站服务器使用的用户执行(/bin/sudo -u www-data )或者直接使用网站服务器使用的用户(如默认www-data)的crontab。

编辑crontab命令为:crontab -e
(可以使用-u指定用户,如crontab -u www-data -e)

填入以下内容(笔者php路径为/bin/php,nextcloud的occ命令绝对路径/var/www/html/nextcloud/occ)

#如果您想每天早上8:05执行一次
05 8 * * * /bin/php /var/www/html/nextcloud/occ face:background_job -t 900
#如果您想每30分钟执行一次
*/30 * * * * /bin/php /var/www/html/nextcloud/occ face:background_job -t 900

您也可按照实际情况指定其他时间表达式或者命令参数。官方wiki还提供了systemed方式,其他您可查看官方wiki定时后台部分。

到此,设置就全部完成了。如果您有问题可以在评论区留言。

参考资料

心情表态
+1
1
+1
0
+1
0
+1
1
+1
0
+1
1