用多维表格和n8n,做了个没啥用的人脸识别应用 | 详细教程解读

最近写了不少多维表格和自动化工作流的教程和文章,今天突发奇想到能不能用多维表格做一个人脸识别的小功能。起因是朋友聊到说,他们公司搞活动拍了几百张照片,然后她需要在里面找出来某领导的照片,只能一个一个找。

我心想自己又何尝不是,平时看电影想知道里面的演员是谁,也不知道如何做。

比如这样,你知道她是谁吗?

其实办法有很多,但作为经常搞多维表格和自动化工作流的人来说,就不免想用这些工具来试试看。虽然麻烦,但也算有点乐趣。

所以今天就介绍下,如何用多维表格+n8n工作流+百度人脸识别,做一个自己的人脸识别小应用。

比如我们上面的照片上传到多维表格里,就可以自动识别到她是谁。

实现流程

如果我们要用手头上的工具来实现的话,首先要考虑整个的实现流程

大概的逻辑是:在多维表格上传照片 —定时触发工作流 — 获取照片链接 — 调用百度人脸识别API — 获取识别结果 — 将结果同步到多维表格

接下来我们详细说说配置方法。

配置方法

(一)准备工作

工具:n8n+多维表格+百度云人脸识别(都是免费或基础版够用)

n8n和多维表格就不说了

这里说下百度云人脸识别的准备工作

我们需要注册人脸识别的服务

①访问百度AI开放平台https://ai.baidu.com/并注册

②进入控制台,创建应用,选择”人脸识别”服务

③记录 API KeySecret Key

④最后我们就需要创建人脸库了

它这个结构是人脸库 – 用户组 – 用户 ,然后在用户底下去上传照片。

比如我建了001和002两个用户,分别在里面去上传他们各自的照片。

这个很重要,因为我们去识别人脸,首先一定要有一个库,你上传的照片,是去这个库里进行对比,找出最匹配的人返回给你。

所以我们要把这个库维护好。

比如这样:

我们还可以再多找找,丰富丰富人脸库,比如这样。

准备工作做完后,我们说下接下来的配置方法和步骤。

(一) 新建多维表格

我们希望把照片上传到多维表格里,然后把识别结果也展示在多维表格中。

所以我们要先创建一个表格。

表格不用太复杂,配置一个附件字段,然后给一个识别分数和对应的用户id字段即可。

比如这样,先简单一点。

第一行就是我识别出来的结果,照片就是我上传到多维表格的照片,userid是识别到百度人脸库里匹配的用户组的id,score就是匹配的分数。

用大白话说就是,我上传的这个照片,应该就是001这个人,相似度有79.28%。

(二)创建n8n流程

这一步,主要是对我们在多维表格上传的图片,通过百度人脸识别API去进行识别,最后把识别结果返回到多维表格里。

这里我想了一下,最好的方式其实是我把照片上传到表格,然后点一个按钮或什么动作,自动触发工作流来获取。

但是在这里我没有找到这种触发的办法,所以就试着用n8n定时跑流程来运行吧。

大概的逻辑就是:定时触发工作流 — 找到多维表格中识别结果为空的行 — 循环这些空行 — 获取照片字段信息,得到照片链接 — 下载照片 — 将照片转为base64格式 — 调用百度1:N搜索API — 获取识别结果 — 将结果同步到多维表格 –结束

1、获取多维表格记录

首先我们要获取到多维表格的记录,使用查询记录的接口。

在查询前,先获取飞书token

获取token的方式之前讲过不少次,这次就不细说了。

接着我们调用查询记录接口(官方接口文档:https://open.feishu.cn/document/docs/bitable-v1/app-table-record/search)

这里的几个配置字段说明下:

①Method:post

②URL:https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/search 注意把:app_token和:table_id换成表格的token和id值

③header

  • Authorization:Bearer {{ $json.tenant_access_token }} 也就是我们上个节点获取的token值。
  • Content-Type:application/json; charset=utf-8

④body:选择json格式


{
  "view_id": "vewnTTowMW",
  "field_names": [
    "识别结果" , 
    "照片"
  ],
  "sort": [
    {
      "field_name": "识别结果",
      "desc": true
    }
  ],
  "filter": {
    "conjunction": "and",
    "conditions": [
      {
        "field_name": "识别结果",
        "operator": "isEmpty",
                 "value": [
          
        ]
      }
    ]
  },
  "automatic_fields": false
}

简单来说这个意思就是获取到表格vewnTTowMW这个视图下识别结果为空的记录里的识别结果和照片两个字段的值。

通过这个节点,我们就获取到了表格里的url字段值。

(就是它了)

2、循环

因为可能有多个行,所以我们加一个循环节点,每个行依次去识别照片

3、获取字段

这个步骤的目的,是为了把图片链接和record_id这两个字段提取出来给后面用

4、下载图片

这个步骤,就是根据图片链接,用http节点,把图片下载下来。

这个下载不是下载到电脑里,你可以理解为是下到你的服务器里。

URL就是我们上个节点的url字段。

header里注意把飞书的token值加上

最后的Response这里说明下,要选择file的格式

5、图片转为base64格式

我们给到人脸识别的图片,一定是要转成base64的格式才行。

所以,这个步骤,我们用一个code节点,用个简单的脚本进行转化

// 简化版 - 直接从binary读取并转换
const imageBinary = items[0].binary.imageFile;

// 转换为base64
const base64Image = imageBinary.data;

// 如果已经是data URL格式,去掉前缀
let finalBase64 = base64Image;
if (base64Image.startsWith('data:')) {
  finalBase64 = base64Image.split(',')[1];
}

return [{
  json: {
    ...items[0].json,
    base64Image: finalBase64,
    imageInfo: {
      fileName: imageBinary.fileName,
      mimeType: imageBinary.mimeType,
      fileSize: imageBinary.fileSize
    }
  }
}];

6、调用百度人脸识别API

好了,终于到关键的步骤了。

我们要去进行人脸识别了。

这一步也需要两个节点:获取token和调用识别接口(类似之前飞书多维表格的对接)

(1)获取token

①Method:post

②URL:https://aip.baidubce.com/oauth/2.0/token

③Query Parameters

  • grant_type:client_credentials
  • client_id:申请的应用的id值
  • client_secret:申请的应用的secret值

④header

Content-Type:application/x-www-form-urlencoded

(2)调用人脸1:N搜索接口(https://cloud.baidu.com/doc/FACE/s/Gk37c1uzc)

①Method:post

②URL:https://aip.baidubce.com/rest/2.0/face/v3/search

③Query Parameters

  • access_token:上个节点获取到的token值

④Header

Content-Type:application/json

⑤body

josn格式

{
  "image": "{{ $node['图片转Base64'].json['base64Image'] }}",
  "image_type": "BASE64",
  "group_id_list": "1",
  "quality_control": "NORMAL",
  "liveness_control": "NORMAL",
  "max_user_num": 5,
  "max_face_num": 10
}

运行,红框里就是输出的结果

人脸识别接口用我们上传的照片,在人脸库里进行查找,同时输出了和库里照片的匹配值。值越大就说明越相似。

7、获取结果并同步到多维表格

好了,我们需要把结果中,score最大的值拿到并同步到多维表格里

首先我们先把值提取出来

这里用一个code节点

主要就是把id值和score拿到

const apiResult = items[0].json;

// 检查API是否成功
if (apiResult.error_code !== 0) {
  throw new Error(`百度API错误: ${apiResult.error_msg}`);
}

// 获取用户列表
const userList = apiResult.result.user_list;

if (!userList || userList.length === 0) {
  // 没有匹配结果
  return [{
    json: {
      topUserId: "未识别",
      topScore: 0,
      topSimilarity: "0%",
      hasMatch: false,
      matchCount: 0
    }
  }];
}

// 找到score最高的用户
const topUser = userList.reduce((max, user) => 
  user.score > max.score ? user : max
);

return [{
  json: {
    topUserId: topUser.user_id,
    topScore: topUser.score,
    topSimilarity: `${topUser.score.toFixed(2)}%`,
    groupId: topUser.group_id,
    hasMatch: true,
    matchCount: userList.length,
    faceToken: apiResult.result.face_token
  }
}];

接着我们就调用多维表格的更新记录接口(https://open.feishu.cn/document/server-docs/docs/bitable-v1/app-table-record/update),把userid和score同步回多维表格

运行后,你就会获取到图片的匹配值和对应的id值了。

一开始我们说了,在人脸库建了001和002两个用户,虽然都对应着人,但是只看id也不知道是谁

我上传个照片,识别完,说这是001,那和没识别也没啥区别。

所以我们就在多维表格再建一个信息表,把id值和真实姓名维护上。

然后在表单查找引用字段自动匹配就好。

我们还可以在表里加上AI字段, 当匹配到人脸时,除了展示人名,还可以把这个人的基础信息都用AI进行总结。

但是…好吧,似乎豆包帮你18禁了,并不能输出你需要的内容。

好了,讲到这,你就可以完成全流程的跑通了。

虽然最后做完,我发现看起来好像没什么卵用,很多搜索引擎其实可以通过人脸直接搜他的相关资料。

不过,如果是需要维护自己公司或者内部团队的人脸库呢?

所以,其实这个需求还可以再拓展一下。

举个简单的例子,比如我们在公司经常会拍一些活动照片,有时候照片非常多,但你还需要在里面找到有XXX姓名的照片,这就非常费时费力了。

这种场景下,我们就可以考虑用简单的自动化来提效。

比如我们只需把照片拖进云盘,然后自动触发人脸识别动作流,最后在多维表格生成带人脸标签的照片库。你只需要搜XXX姓名,就能看到所有包含他的照片。

这么看来 ,多维表格+自动化工作流+AI,其实大大降低了我们实现需求的成本,也提高了实现的效率。

6人评论了“用多维表格和n8n,做了个没啥用的人脸识别应用 | 详细教程解读”

  1. I cherished up to you will receive carried out right here. The comic strip is attractive, your authored subject matter stylish. nevertheless, you command get got an impatience over that you would like be turning in the following. sick without a doubt come more in the past again since exactly the similar nearly very steadily within case you defend this increase.

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部