基于 OpenDR 的人脸识别 CLI 应用
项目描述
pyfron
基于 OpenDR 的人脸识别 CLI 应用
为什么选择 pyfron
因为它有一个很酷的名字,将Python和人脸识别这两个术语组合成一个字谜。此外,因为 pyfron 提供了一种易于使用的方法:
- 创建 OpenDR 人脸识别器
- 使用环境操作多个图像数据库
- 在漂亮的降价中报告识别器的整体性能
安装
- 手动安装 OpenDR
- 跑
pip install pyfron
用法
pyfron [options]您可以通过运行或来调用 pyfron python -m pyfron [options]。虽然第一种方式更优雅,但后一种方式被认为更稳定。有关选项的更多信息,请运行pyfron --help.
目录结构
为了促进图像发现的过程并缓解目录模式带来的混淆,pyfron 引入了两个基本概念,ImageDir 和 ImageBase。
图像目录
ImageDir 是一个仅包含受支持类型的图像的目录(当前仅包含 IMAGE/JPEG)。从语义上讲,ImageDir 应该只包含同一个人的图片。有效的 ImageDir 如下所示:
i_am_an_image_dir/
|--- image1.jpg
|--- image2.jpg
|--- arbitrary_name.jpg
|--- ...
|--- imageN.jpg
图像库
ImageBase 只是一个存储许多 ImageDirs 的目录。从语义上讲,这些 ImageDirs 分别代表一个人。ImageBase 的一个有效示例是 LFW 本身。一般来说,一个 ImageBase 应该是这样的:
i_am_an_image_base/
|--- and_i_am_an_image_dir/
| |--- 1.jpg
| |--- ...
| |--- N.jpg
|--- image_dir_2/
|--- ...
|--- last_image_dir/
快速开始
设置您的工作区
假设您从官方但速度较慢的站点或从这个更快的镜像下载了 LFW 数据集。此外,在您的桌面目录中,您已经收集了三个“跟踪”子目录。它们中的每一个都包含不同名人的图像。最后,您在“图片”下拥有自己的目录,其中包含您的照片。总而言之,您的工作站包含以下内容:
~/Downloads/lfw/~/Downloads/lfw/Aaron_Eckhart/~/Downloads/lfw/Aaron_Guiel/...~/Downloads/lfw/Zydrunas_Ilgauskas/
~/Desktop/Stalking/~/Desktop/Stalking/Bradley Cooper/~/Desktop/Stalking/Jennifer Lawrence/~/Desktop/Stalking/Jim Carrey/
~/Pictures/Me/
实验一
现在,假设您要确保您的个人数据没有被泄露。让我们首先检查是否可以在 LFW 数据库中识别您的面部。
参考 ImageBase 应该包含整个 LFW ImageBase。您可以创建一个新环境并将所需的图像附加到其参考 ImageBase。
参考 ImageBase指的是经过训练后识别器将知道的图片。另一方面,测试 ImageBase是指将用作训练识别器输入的图片。
您可以通过运行:
$ pyfron --env am_i_in_lfw populate-reference --from-dir ~/Downloads/lfw
这应该将 LFW 图像复制到新环境中的特殊位置。然后,您可以配置测试 ImageBase。在这种情况下,测试 ImageBase 应该只包含您自己的图片。
$ pyfron --env am_i_in_lfw populate-test --from-dir ~/Pictures/Me
请注意,虽然引用 ImageBase 的来源是一个有效的ImageBase(因为它包含许多 ImageDirs),但测试 ImageBase 的来源实际上是一个ImageDir。然而,pyfron 足够聪明,可以理解你的意图,它会按预期自动处理给定的路径。
随着新环境准备就绪,您现在可以测试输入图像并报告结果。
由于 LFW 由 5749 个 ImageDirs 组成,因此预计此步骤实际上会持续很长时间。从参考 ImageBase 中手动删除相当大量的 ImageDirs 是相当合理的举动。例如,在这种情况下,仅保留和使用了 LFW 的 300 个 ImageDirs。
你可以运行:
$ pyfron --env am_i_in_lfw run
此命令加载在测试 ImageBase 中找到的每个图像,并将其与参考 ImageBase 进行比较。生成的降价按降序汇总具有最大相似度置信度的图像。因此,仅通过检查降价报告,您可能会发现,幸运的是,该数据库中没有您自己的图像。
实验二
现在,假设您想查看每个您最喜欢的名人的脸与 LFW 的相似程度。
您可以创建一个新环境并训练一个新模型,但由于参考 ImageBase 将相同,因此无需这样做。相反,您可以简单地将名人的图像附加到测试 ImageBase 中:
$ pyfron --env am_i_in_lfw populate-test --from-dir ~/Desktop/Stalking
然后,通过执行以下命令运行测试过程:
$ pyfron --env am_i_in_lfw run
实验三
如果您想使用不同的识别器配置运行之前的实验怎么办?这实际上可以毫不费力地完成。
首先查询 pyfron 已知哪些模型:
$ pyfron --list-models
这将显示注册模型的类似 json 的表示形式,以及可以编辑以注册您的自定义模型的文件。然后,您可以通过指定--model选项来选择所需的一个。这看起来像:
$ pyfron --env am_i_in_lfw populate-test --from-dir ~/Desktop/Stalking --model ir_50
在这里,模型ir_50是一个内置模型,您可以按原样使用它。尽管包含电池,但我们鼓励您在 OpenDR 的文档中探索如何创建自定义模型。
未来的功能 - 需要帮助:D
- 对环境进行更多控制(删除、克隆、重用模型、利用符号链接来共享文件)
- 改进的 CLI 选项。模块使用
argparse太幼稚 - 填充命令的随机选择/例外选项(例如,在填充
--keep-max N时保留第一个N对象) - 支持创建和训练完整模型(骨干+头部)