一个由人工智能驱动的个人可识别信息(PII)扫描工具

⠀⠀⠀⠀⠀⠀⠀⣤⣤⣄⣀⡀⠀⠀⠀⢀⣠⣤⣤⣄⡀⠀⠀⠀⢀⣀⣠⣤⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⣿⣿⡿⠿⢿⣷⡄⢠⣿⣿⣿⣿⣿⣿⡄⢀⣾⡿⠿⢿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣠⣤⡀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⣄⠀⠀⠀
⠸⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⢸⣿⡇⢸⣿⣿⣿⣿⣿⣿⡇⢸⣿⡇⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀
⠀⠉⠉⠁⠀⠀⠀⠀⣿⣿⠀⢸⣿⡇⠀⠉⣿⣿⣿⣿⠉⠀⢸⣿⡇⠀⣿⣿⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀                O C T O P I I
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣀⣈⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣁⣀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⠿⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⠿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀(c) Copyright 2022 RedHunt Labs Private Limited
⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣤⣤⣴⣿⣿⣿⡇⢸⣿⡿⣿⣦⣤⣤⣤⣤⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⣿⠋⠉⠉⠉⠉⠉⠉⢸⣿⡇⢸⣿⡇⠈⠉⠉⠉⠉⠉⠙⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢰⣿⣿⣦⠀⢰⣿⣿⣦⠀⢸⣿⡇⢸⣿⡇⠀⣰⣿⣿⡆⠀⣴⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠈⠻⠿⠋⠀⠘⣿⣿⠃⠀⢸⣿⡇⢸⣿⡇⠀⠘⣿⣿⠃⠀⠙⠿⠟⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣦⣤⣼⣿⠃⠘⣿⣧⣄⣤⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠁⠀⠀⠈⠛⠛⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

项目地址

https://github.com/redhuntlabs/Octopii

Octopii

Octopii 是一款由人工智能驱动的开源个人身份信息 (PII) 扫描工具,可以在目录中查找政府 ID护照照片签名等图像资产

正在进行的

Octopii 使用 Tesseract 的光学字符识别 (OCR) 和 Keras 的卷积神经网络 (CNN) 模型来检测可能在面向公众的位置泄漏的各种形式的个人身份信息。 这是通过以下步骤完成的:

  1. 导入和清理图像

图像通过 OpenCV 导入,并经过清理、校正和旋转以进行扫描。

  1. 执行图像分类

扫描图像的特征,例如 ISO/IEC 7810 卡规格、颜色、文本位置、照片、全息图等。这是通过传递图像并将其与经过训练的模型进行比较来完成的。

  1. 光学字符识别 (OCR)

作为最终的验证方法,扫描特定字符串的图像以验证模型的准确性。

扫描的准确性可以通过输出中的置信度分数来确定。 如果满足上述所有条件,则返回 100.0 分。

训练模型,也可以将数据输入到 model_generator.py 脚本中,可以使用新改进的h5文件。

用法

  1. 通过安装所有依赖项 pip install -r requirements.txt
  2. 通过(对于 Ubuntu/Debian)在本地安装 Tesseract 助手 sudo apt install tesseract-ocr -y
  3. python3 octopii.py <location name> 例如, 要运行 Octopii,请键入 python3 octopii.py pii_list/

python3 octopii.py <location to scan> <additional flags>

Octopii 目前支持本地扫描和扫描 S3 目录,并通过它们的 URL 打开目录列表。

例子

owais@artemis ~ $ python3 octopii.py pii_list

Not a valid image format: pii_list/aadhaar/aadhaar-8.gif

[
    {
        "asset_type": "Bank",
        "confidence": 100.0,
        "file_name": "passbook",
        "extension": "jpeg",
        "path": "pii_list/bank/passbook.jpeg"
    },
    {
        "asset_type": "Photo",
        "confidence": 99.98,
        "file_name": "IMG-20200331-WA0037",
        "extension": "jpg",
        "path": "pii_list/photos/IMG-20200331-WA0037.jpg"
    },
    {
        "asset_type": "PAN",
        "confidence": 100.0,
        "file_name": "pan-7",
        "extension": "jpg",
        "path": "pii_list/pan/pan-7.jpg"
    },
    {
        "asset_type": "Aadhaar",
        "confidence": 97.31,
        "file_name": "aadhaar-14",
        "extension": "jpg",
        "path": "pii_list/aadhaar/aadhaar-14.jpg"
    }
]

贡献

像这样的开源项目在社区支持下蓬勃发展。 由于 Octopii 严重依赖机器学习和光学字符识别,因此非常感谢您的贡献。 贡献方式如下:

1.Fork

在https://github.com/redhuntlabs/octopii fork官方存储库

2. 解释

目录中有3个文件 models/

  • keras_models.h5 文件是 Keras h5 模型,可以从 Google 的 Teachable Machine 或通过 Python 中的 Keras 获得。
  • labels.txt 文件包含与模型返回的索引对应的标签列表。
  • ocr_list.json 文件包含在 OCR 扫描期间要搜索的关键字,以及其他杂项信息,例如原产国、正则表达式等。

通过 Teachable Machine 生成模型

由于我们当前的数据集非常小,我们可以从该项目的国际 PII 的大型 Keras 模型中获益。 如果您不具备 Keras 方面的专业知识,Google 提供了一个非常易于使用的模型生成器,称为 Teachable Machine。 使用它:

  • 访问 https://teachablemachine.withgoogle.com/train 并选择“Image Project”→“Standard Image Model”。
  • 一些类是可见的。 将类重命名为您想要上传的资产类型,例如“德国护照”或“加利福尼亚驾照”。
  • 通过单击“上传”按钮添加图像并上传一些图像资源。 注意:图片必须是方形的

提示:将您的图像资产隔离到文件夹中,文件夹名称与类名称相同。 然后,您可以将文件夹拖放到上传对话框中。

注意:只上传与班级名称相同的,例如德国护照班级必须有德国护照照片。 将错误的数据上传到错误的类会混淆机器学习算法。

  • 单击页面底部的“+ 添加类”以添加更多包含数据的类并重复。 您可以使类更具体,例如“Goa Driver License Old Format”。
  • 最后一次验证类和图像。 准备就绪后,单击“训练模型”按钮。 您可以增加 epoch 大小(例如 5000)以提高模型准确性。
  • 要进行测试,您可以通过单击“输入”下拉菜单并选择“文件”来测试模型,然后上传示例图像。
  • 准备就绪后,单击“导出模型”按钮。 在弹出的对话框中,选择“Tensorflow”选项卡(不是 Tensorflow.js)并选择“Keras”单选按钮,然后单击“下载我的模型”以导出新生成的模型。 解压下载的zip文件,将 keras_model.h5 文件和 labels.txt 文件粘贴到 models/ Octopii中的目录中。

我们看不到用于上述模型的图像,因为它们采用专有格式。 您可以同时使用虚拟 PII 和实际 PII。 确保它们的图像大小是方形的。

更新 OCR 列表

使用 Teachable Machine 生成模型后,您可以通过 OCR 提高 Octopii 的准确性。 去做这个:

  • 打开现有 ocr_list.json 文件。 使用与资产类同名的键创建一个 JSONObject。 注意:密钥名称必须与 Teachable Machine 中的资产类别名称完全相同。
  • 对于 keywords ,请尽可能多地使用资产中的独特术语,例如“所得税部门”。 将它们存储在 JSONArray 中。
  • (高级) 您还可以为护照上的身份证号码和机读区等内容添加正则表达式,如果它们足够独特的话。 在添加之前使用 https://regex101.com 测试您的正则表达式。
  • 保存/覆盖现有 ocr_list.json 文件。

  1. models/ 通过上述方法创建或编辑后, 您可以替换目录中修改的每个文件。
  2. 从您的分叉回购中提交拉取请求,我们将提取它并将其添加到我们当前的模型中。

注意: 请采取以下步骤以确保质量

  • 首先在本地进行测试,确保模型返回极其准确的结果。
  • 在 Keras 模型和 ocr_list.json .
  • 确保所有 JSON 都有效,并使用适当的字符转义,没有重复的键、正则表达式或关键字。
  • 对于国家名称,请使用国家的 ISO 3166-1 alpha-2 代码。

请登录后发表评论

    没有回复内容