如何使面部识别技术为公民所用?- 开源情报方法

  • 将看起来可怕的技术用于公民事业是有可能的

分析照片和社交关系是社交工程攻击中的重要组成部分。(在这里看到 “社交工程” 专栏)。

了解一个人是谁、以及他们认识谁,至关重要 —— 可以使用此信息来执行精心设计的社交工程攻击。

开源情报是一个术语,用于指代对一切公开来源数据进行的收集、评估和应用。

引用中央情报局的话那就是:“信息不一定必须机密才有价值。无论是在浏览的博客中、在观看的广播中、还是在阅读的专业期刊中,都有无穷无尽的信息可以帮助我们了解世界……”。

听着有点吓人吗?你的一举一动都是情报?是的,它就是如此 —— 在有目的的人眼中。这就是为什么说你应该小心,要非常小心。

在互联网上找到此类信息的最常见形式之一并不是纯文本,而是以照片形式存储的。

传统上,这些图像必须由观看者手动过滤以确定和评估其内容,但是由于有了面部识别软件,整个过程可以完全自动化。

面部识别已经引起了许多有关生物识别技术伦理问题的新闻和讨论,以及该技术对数据收集和隐私的影响。(参见 “生物识别及对抗方法” 栏目)

尽管该技术经常在 Facebook 等平台上使用,并在全球范围内的执法中得到广泛使用,但是,允许人们根据自己的目的使用面部识别的后端技术现在已经很容易获得,并可以在开源自由软件项目中实现

这是一种民主化均权的方法。

将看起来可怕的技术用于公民事业是有可能的,还记得我们介绍过的使用AI作为调查记者工作的辅助吗?在这里《如何迎接更多的“巴拿马文件”?

在本教程中,我们将使用 Face Recognition Python 库基于其中的图像来分析和发现目标人。

并且将研究如何搜寻和发现成批的图像,以及如何生成有关目标人或网站的统计信息和结论。

马上开始。

第一步:安装

这里将使用的 Python 库 Face Recognition 可通过 Linux 和 macOS 上的 Pip 包管理器直接获得。

虽然 Windows 上没有正式支持这个包,但可以提供安装指南以及预配置的虚拟机映像

在开始安装之前,请确保您的操作系统是最新的。

在基于 Debian 的 Linux 发行版(如 Ubuntu 和 Kali)上,可以通过运行以下命令来更新存储库并安装新软件。

sudo apt-get update && apt-get upgrade

虽然在某些发行版中默认包含了 Pip,但也可以通过运行以下命令来安装它。此命令将获取软件包的最新版本并进行安装。

sudo apt-get install python-pip

安装Pip后,可以通过运行以下命令使用它来安装 Face Recognition 库:

sudo pip install face_recognition

一旦 Pip 安装完成,该库就可以使用了!

第二步:组织数据进行分析

用 Python 实现的用于面部识别的库意味着可以相对轻松地将其实现到其他应用程序中。

也就是说可以更简单地将面部识别功能添加到网络监视摄像头实时流、网络爬虫、或其他以数字方式显示包含面部的图像或视频的格式

但是,这需要编写额外的原始代码。

相反,本教程将使用随附的命令行工具,并将其与其他系统实用程序结合起来,以执行类似的任务,而无需编写新的脚本。

随附的命令行工具旨在处理两批文件。一个文件夹包含一组可识别的面孔,另一文件夹包含用户希望进行识别的一组图像。

要创建一组图像以过滤出特定的个人面孔,可以使用Wget递归下载一个网站,例如下面的网站。当然,研究人员可以尝试下载尽可能多的潜在相关图像。

Wget 可以从命令行进行操作,并且可以用于下载任何内容,从单个页面或图像到整个网站。如下所示的命令将跟随给定域中的每个链接,并下载该页面上所有可用的内容。

可以随时按 Ctrl + C 退出此命令,否则它将一直运行到给定请求完成为止。

wget -p -r -E -e robots=off — convert-links -U mozilla — level 1 whitehouse.gov

  • -p 指定该工具还将下载其他内容,例如图像、样式表和脚本。
  • -E 要求每个下载的文件都以其完整文件扩展保存,这将使您更容易过滤图像。
  • -r 用于递归,因此也可以下载链接和其他目录。
  • 在字符串的后面,递归级别指定为 -level1。这可以确保索引页面中的链接被跟踪一次。1可以改为其他想要的数字,也可以删除该标志以尝试无限递归。
  • 如果希望确保不从其他网站下载任何文件,则可以使用 -domain,后接该命令应限制到的域。
  • 递归请求可能会被阻止或在某些服务器上引起问题,因此您可能需要通过使用 -w 在请求之间创建延迟来限制递归或限制请求速度。
  • 使用 -e robots=off 可以避免将请求作为不受欢迎的Web爬网程序而被拒绝或阻止。
  • 出于相同的原因,-U mozilla 用于指定应使用 Mozilla用户代理,以便该工具看起来像是Web浏览器。
  • -convert-links 为了重新格式化链接,以便可以更轻松地离线使用该页面。虽然这对于筛选从站点下载的图像来说不是必需的,但它可以更便于追溯以确定图像在网页上的位置。

一旦让程序运行了所需的时间,就可以在新目录中复制所有图像文件,以便更轻松地使用它们。首先,通过运行以下命令创建一个新目录。

mkdir unknown_faces

接下来,通过运行以下两个命令将所有从 Wget 请求中检索到的图像文件复制到此新目录中,第一个用于JPG文件,第二个用于PNG文件。urlfolder 应替换为Wget创建的文件夹的名称,通常对应于初始命令中使用的URL或域。

cp urlfolder**/*.jpg unknown_faces/
cp urlfolder**/*.png unknown_faces/

cp 命令将复制所有匹配的文件,后跟目录参数,在本例中为 whitehouse.gov。此目录后的**(双星号)指定递归,对于任何JPG或PNG图像,后跟一个*(通配符)。最后一个参数指定应将文件复制到 unknown_faces 目录。

这些图像移到新目录后,可以使用 ls 来查看此文件夹中的文件。下面的命令将列出 unknown_faces 文件夹的内容。

ls unknown_faces/

还可以使用|重定向运算符来转发此命令的输出,为了统计发现了多少个图像文件;稍后在识别一组图像中给定面部的频率时会很有用。

可以通过运行以下命令来完成:

ls unknown_faces/ | wc -l

此命令的输出显示 Wget 保存了178个图像文件。一旦准备好使用这些图像,就可以为要在该数据集中找到的面孔创建一个肯定的识别列表。

第三步:准备识别列表

要开始准备已知身份和面孔的列表,请在要解析的图像目录之外创建一个新文件夹。

在Wget创建的目录中,可以通过运行 cd ../ 向上移动一个目录,通过运行 mkdir known_faces 创建一个名为 known_faces 的新目录,最后通过运行 cd known_faces 进入该目录。

创建此目录后,可以将希望用作肯定鉴定列表的所有文件保存到此文件夹。

任何人的清晰照片都是面部识别的理想选择,例如经常用作“联系人”页面上的个人资料照片。确保在任何已知的脸部照片中只看到一张脸

可能还需要为文件命名一个与照片中的人相对应的名称,因为这样就可以在做出任何肯定的标识时返回照片的文件名。

准备好这些目录后,即可运行 face_recognition 命令行实用程序。

第四步:使用面部识别来识别个人

Python Face Recognition 库附带的命令行实用程序相对简单,只需两个参数即可运行。第一个是已知面孔的目录,第二个是尝试识别的面孔的目录。

这些文件夹按照前面的步骤命名,下面的命令将运行该工具。

face_recognition known_faces/ unknown_faces/

程序运行时,它将返回文件名,后跟一个特定人的肯定标识,一个未知人的否定标识,或者如果图像中没有面孔,则标记为找不到任何人。

为了使这些结果对自动数据处理更加有用,可以运行相同的命令后跟 > 重定向器,将程序的输出发送到文本文件,例如下面的示例。

face_recognition known_faces/ unknown_faces/ > results.txt

可以使用此文本文件作为参考,以分析和利用面部识别的匹配结果。

第五步:分析面部识别匹配

从面部识别工具了解数据结果的一种可能方法是查找与特定识别的面部匹配的所有文件。

可以使用 grepresults.txt 文本文件来查看使用给定面孔进行的每次匹配。下面的命令将返回文本文件中用 Donald Trump 标识的每一行。

grep “Donald Trump” results.txt

还可以结合使用其他系统实用程序,通过运行以下命令来确定程序每个结果的频率。

cat results.txt | sed ‘s/.*,//’ | sort | uniq -c

首先,运行 cat results.txt 会将 results.txt 的内容作为标准输入读取。这被发送到 sed,在此删除每行之前(包括逗号)的所有内容。然后结果列表发送到 sort。最后它用作 uniq 的输入, -c 参数的结果是计算每行的出现次数。

这将产生一个列表,其中每个结果均以其相应的频率列出,从而允许对较大的数据集进行简单分析

如果希望查看由面部识别工具识别的特定图像,则可以使用类似的技术。可以使用下面的命令来生成一个新的文本文件,是文件名的列表,由程序用给定的结果标记并保存在先前的输出文件中。

grep “Donald Trump” results.txt | sed ‘s/,.*$//’ > identified.txt

在这种情况下,将使用 result.txt 文本文件中的 grep 搜索所有标识为 Donald Trump 的图像。 这些结果作为标准输入发送到 sed,在其中包括逗号在内的所有内容均从每一行中删除。最后,重定向运算符 > 将输出发送到名为 Identification.txt 的文本文件。

如果运行诸如 head Identification.txt 之类的命令,将看到该文件仅包含文件名。可以将此文件名列表用作简短脚本的输入,以将这些文件中的每个文件复制到新文件夹中。

可以通过运行以下命令来使用 Nano 创建一个新的脚本文件。

#!/bin/bash
mkdir identified
while read line; do
filename=$(echo $line | sed ‘s/.*\///’)
cp $line identified/$filename
done < identified.txt

  • #!/bin/bash 声明该脚本用于Bash。
  • 第二行创建一个新目录,命名为 identified,所有肯定标识的图像都将移至该目录。
  • 第三行与最后一行结合使用,读取文本文件 identified.txt 作为输入,以便在 while 语句中单独修改文件的每一行。
  • 第四行创建一个名为 filename 的变量。将此变量分配给不带目录位置的文件的文件名,使用 sed 删除每行中斜杠之前的所有字符。
  • 最后一行使用此变量,将 identified.txt 文本文件中的每个文件复制到 identified 目录并分配其原始文件名。

通过按 Ctrl + O 进行保存,然后就可以使用 Ctrl + X 退出程序。将脚本另存为 identified.sh 后,可以通过运行以下命令来向文件添加执行特权。

chmod +x identified.sh

现在,只需输入 ./identified.sh 并按 Enter / return 键即可运行脚本本身。

脚本运行完成后,您可以导航到 “ identified” 目录,并查看发现的所有与您的特定查询相匹配的图像!

这种自动过滤的过程可以解决传统上耗时的问题 —— 需要大量的人工干预才能识别和分类图像的那种工作量。

防止面部识别

不幸的是,防止面部识别的唯一真正保护措施就是限制您的脸部的曝光 —— 不论是在线还是现实

这可能意味着对帐户使用更严格的隐私设置,选择不使用社交媒体,甚至尝试在公共场合隐藏自己的脸。显然这些预防措施中的许多都非常不方便。

通常,面部识别的危险更多是与附加到在线个人资料或照片的给定实例上的数据有关,而不是照片本身

比如,如果没有任何数据库中存在 Trump 的名字和简介,那么他的照片即便被读取也会显示为 “没有匹配”。但是,不幸的是,政府掌握的数据库中包含我们每个人的详细资料,而且我们无权对其进行删改。

⚠️请记住,无论何时选择在线保存任何图片或信息,你都无法完全确定这些信息最终会落在谁手里 —— 我们中没人能控制这点。

所以,切切谨慎!

关于如何抵制现实中的人脸识别监控

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据