超高效!手把手教你实现智能 OCR 图片识别并插入到多维表格 - 飞书官网
解决方案

超高效!手把手教你实现智能OCR图片识别并插入到多维表格

飞书

2024-12-23

推荐理由​
一、需求分析​
二、方案调研​
三、开发流程(推荐有)​
四、更多相关开发心得​
作者:谢博文​
推荐理由​
解决图片识别难题就用OCR图片识别,自动创建字段导入数据!​
一、需求分析​
日常工作中会存在各类附件如:发票、付款回执、报销凭证、检验单等等。填写人员在将附件进行导入到多维表格时需要手动填写大量的文字信息以供后续人员阅读,而每一张票据类型所需的字段都是不一样的,故这将会造成数据填写的繁琐,而如若不填写对应字段数据,财务或管理人员在核对信息时则需每张图片点开进行阅读,此方式阅读性是非常差的。​
​
二、方案调研​
  1. 通过飞书集成流AI了解到,有OCR图片识别可进行数据填写,但目前AI能力有限且数据回显,仍需要大量的代码来进行特殊处理,并不能非常好解决问题。​
  1. 飞书AI能力中的智能文档处理目前也存在大量的图片识别api,但这都属于分散的,当然可以在附件提交时,选配好票据类型,再进行AI调用对应的票据类型api,但若想要表格适配则需要将数据特殊处理,依然存在一定的弊端。​
  1. 最终解决方案:使用第三方OCR图片识别的智能文档api接口进行图片识别,接口会返回一定格式的数据,当集成流使用http调用返回数据后,只需要将票据的key进行抓取当作表格字段,再批量新增后,即可直接适配对应的字段数据。​
​
三、开发流程 (推荐有)​
  1. 获取多维表格填写的附件token。​
  1. 使用集成流云文档控件对文件进行下载并获取base64编码。​
  1. 调用第三方图片识别api获取识别结果。​
  1. 使用动态脚本抓取key值当作表格字段,并循环新增表格字段。​
  1. 获取更新后的表字段对数据进行匹配并插入。​
  1. (若是发票票据则可增加一部发票核验操作,一次判定发票真实性。​
准备“飞书应用授权”凭证​
使用企业自建应用创建“飞书应用授权”凭证,为集成平台中的飞书系连接器和对应的飞书应用建立访问关系,具体步骤可参考配置应用凭证。​
使用的企业自建应用需要开通查看、评论、编辑和管理多维表格(bitable.app) 的权限。​
​
250px|700px|reset
​
​
集成流分享⬇️​
多维表格如若开通高级权限设置使用云文档下载时,需要填写extra拓展信息。​
​
​
​
function handler(input) {​
let { recordId, fileToken, tableId, fieldList } = input;​
let records = {};​
let fieldId = '';​
fieldList.forEach((obj) => {​
if (obj.ui_type == 'Attachment') {​
fieldId = obj.field_id;​
}​
});​
​
let extra = {​
bitablePerm: {​
tableId: tableId, // 你需要设置合适的值​
attachments: {​
[fieldId]: {​
[recordId]: [fileToken],​
},​
},​
},​
};​
​
let jsonString = JSON.stringify(extra);​
​
let finaUrl = encodeURIComponent(jsonString);​
​
return finaUrl;​
}​
集成流核心代码⬇️​
​
​
let kvPairs = {};​
​
// Assuming data.result is an array with only one element​
const kvBlockList = kvResult.kv_result.kv_block_list;​
​
// Iterate through kv_block_list​
kvBlockList.forEach((kvBlock) => {​
const key = kvBlock.key.trim(); // Remove leading/trailing whitespaces​
const value = kvBlock.value.trim(); // Remove leading/trailing whitespaces​
kvPairs[key] = value;​
});​
let { kvResult } = input;​
let kvPairs = {};​
​
// 键值对数据​
const kvBlockList = kvResult.kv_result.kv_block_list;​
​
// 提取识别kv值​
kvBlockList.forEach((kvBlock) => {​
const key = kvBlock.key.trim(); // Remove leading/trailing whitespaces​
const value = kvBlock.value.trim(); // Remove leading/trailing whitespaces​
kvPairs[key] = value;​
});​
​
// 删除key 和value中指定的符号​
const removeUnwantedCharacters = (str) => str.replace(/[()¥]/g, '');​
​
// Applying the function to each key and value in the invoiceData object​
const newKvPairs = {};​
Object.entries(kvPairs).forEach(([key, value]) => {​
const cleanedKey = removeUnwantedCharacters(key);​
newKvPairs[cleanedKey] = removeUnwantedCharacters(value);​
});​
​
const invoiceCode = [];​
const seenNumericWords = [];​
​
多维表格触发方式⬇️​
​
四、更多相关开发心得​
集成流并不繁琐核心在于js代码的构建,此方案可根据业务场景进行延伸如:​
  • 审批完成附件自动同步表格 -> 触发该集成流​
  • 附件填写后 -> 自动上传到云空间​
​
​
​
​
​
​
预约飞书企业效能顾问 深度诊断企业痛点,定制专属 AI 办公方案

先进团队,先用飞书

欢迎联系我们,飞书效能顾问将为您提供全力支持
分享先进工作方式
输送行业最佳实践
全面协助组织提效
标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题

字节跳动旗下 AI 工作平台

联系我们立即试用