---
order: 45
navTitle: OCR识别
---
# SuperPage交互-OCR识别

SuperPage中提供了OCR识别交互，利用互联网上的OCR服务（使用OCR服务需要系统配置好外部服务信息，在**系统设置**>**更多**>**外部服务**>**文字识别**中启用相应服务并添加对应参数，可参考文档[文字识别](../../../../sys-settings/more/remote-services/ocr.md)）识别证件图片中的文字信息。如点击按钮上传身份证照片后获取身份证号码和姓名：

![OCR识别](./images/ocr.gif)

示例地址：[OCR识别](https://demo.succbi.com/v5/DEMO/app/ap.app?id=OCR%E8%AF%86%E5%88%AB)

## 使用OCR识别身份证{#start}

OCR识别交互执行过程中会依次执行如下流程：

1. 获取用户的证件图片，通过附件组件或者直接上传，具体见[支持的文件类型](#file-type)。
2. 压缩并上传图片给互联网OCR服务。
3. 获取互联网OCR服务返回的信息并设置给指定的参数，此时用户可以根据识别信息进行数据库查询以便校验识别结果的合法性，根据用户设置的校验公式进行校验，校验失败会提示用户并不再执行下面的步骤，具体见[对返回的信息做数据校验](#check)。
4. 设置识别结果和数据库查询结果给参数、输入组件、或者给指定数据集增加一行数据，可参考[将识别返回信息设置给参数或组件](#return-value)。
5. 完成识别。

如下是使用上传身份证按钮识别身份证信息的具体步骤：

![识别身份证](./images/ocr1.gif)

1. **添加上传身份证正面照按钮**：在**组件区**>**常用**分组下将**按钮**组件拖入到画布中，可参考文档[按钮](../../components/common/button.md)。
2. **添加OCR识别交互**：选中按钮，在**属性栏**>**交互**下点击**添加动作**，选择**OCR识别**。
3. **设置交互属性**：
   1. 设置识别的[文件类型](#file-type)为**上传图片**、设置[识别设备](#recognition-type)为**阿里云证照识别**，[场景](#recognition-type)为**身份证**。
   2. **将返回信息设置给参数或组件**：勾选[将返回内容设置给参数](#return-value)，并点击**组件设置**添加**目标组件**和**值**。

## 支持的文件类型{#file-type}

OCR识别的来源文件包括**上传图片**、**附件组件**，在OCR识别交互下的**文件**属性中选择对应的文件类型即可：

- 可以设置**图片质量**，即图片压缩后的大小质量，输入大于0的数字即可。当为0.1时，压缩比最大。
- 通过**附件组件**上传的图片，可以进行预览；通过按钮点击上传的图片直接进行信息识别。

:::tip
上传的图片会保存在[工作目录](../../../../devops/install/basic-install/workdir-and-defdb.md#set-workdir)workdir的`\clusters-share\upload-files`路径下
:::

## 支持的证照识别类型{#recognition-type}

OCR识别提供了2种证照识别设备，包括**阿里云证照识别**、**百度证照识别**。在**OCR识别**交互下的**设备**属性中选择即可，证照识别设备不同可识别的证照**场景**也不同：

- **阿里云证照识别**：身份证、银行卡、二维码
- **百度证照识别**：身份证、驾驶证、行驶证、银行卡、二维码、营业执照

:::tip
不同的证照场景返回内容的辅助输入结果不一致，可参考[将识别返回信息设置给参数或组件](#return-value)
:::

## 将识别返回信息设置给参数或组件{#return-value}

通过OCR识别返回的信息，可以设置给全局参数或者页面中的组件，组件设置的值类型可选**表达式**或**辅助输入结果**：

- **表达式**：当选择表达式时，可以通过输入[表达式函数](../../../../exp/README.md)获取交互结果的值，如使用[JSON\_GET()](../../../../exp/func/json/JSON_GET.md)函数获取交互数据中的姓名`JSON_GET([事件].[交互数据],'姓名')`
- **辅助输入结果**：即通过OCR识别返回的结果，辅助输入结果返回的值与识别的证照[场景](#file-type)相关：
  - **身份证**：姓名、性别、民族、出生、住址、公民身份号码
  - **驾驶证**：姓名、性别、住址、证号、国籍、准驾车型、初次领证日期、出生日期、有效期限、至
  - **行驶证**：号牌号码、车辆类型、所有人、住址、使用性质、品牌型号、车辆识别代码、发动机号码、注册日期、发证日期
  - **银行卡**：银行卡卡号、有效日期、银行名称、银行卡类型
  - **二维码**：类型、文本
  - **营业执照**：社会信用代码、经营范围、单位名称、证件编号、注册资本、法人、地址

### 对返回的信息做数据校验{#check}

OCR交互支持对返回的信息做数据校验。在数据校验开始前和校验后两个阶段，都可以将返回的信息填充到参数或组件，而校验通过的数据才可填充到组件或插入到数据集中，校验设置如下：

![数据校验](./images/2021-01-29-14-41-02.png)

- **校验表达式**：在**校验表达式**中可输入校验公式，如校验识别的证件ID（公民身份号码）不为空且数据集中不存在该条数据，表达式示例`len(filter(select([OCR识别信息].[证件ID]),[sfz_baidu_id]=@))=0 AND [sfz_baidu_id] is not NULL`
- **校验成功提示设置**：勾选**校验成功提示**并输入提示信息内容即可，如`上传成功！`
- **校验失败提示设置**：**校验表达式**返回是`false`，则校验失败。勾选**校验失败提示**并输入提示信息内容即可，如`身份信息已存在，或公民身份号码未获取到，请上传有效的证件图片！`

:::tip
校验后将结果填充到组件中的设置，在如下两种场景下生效：

1. 没有添加校验表达式：表示不需要对识别结果进行校验，直接将返回信息填充到组件中。
2. 设置了校验表达式：当返回结果校验通过时，会把识别返回的信息填充到组件中显示，只能传递到**参数**或[输入组件](../../components/input/README.md)中，若返回结果校验失败，则不会将识别结果填充到组件中显示。
   :::

### 将校验前的结果设置给参数{#set-param}

当有返回结果时，会将返回信息传递给设置的参数或组件。在**OCR识别**交互下，勾选**将返回内容设置给参数**，并在**组件设置**中选择填充到的**目标参数和组件**：

![校验前结果](./images/2021-01-29-11-37-11.png)

### 将校验后的结果填充到组件{#set-component}

在校验表达式中设置了校验规则，只有在校验通过后才会将返回信息传递给设置的参数或组件。在**OCR识别**交互下，勾选**结果填充到组件**属性，并在**组件设置**中选择填充到的**目标参数和组件**：

![校验后结果](./images/2021-01-29-11-38-04.png)

## 将识别返回信息写入到数据库中{#set-dataset}

可将OCR识别的结果信息存储到数据集中，在OCR识别交互下勾选**结果插入到数据集**属性，并选择需要插入的数据模型及字段设置即可，可对返回信息添加校验，将校验通过的结果插入到数据集中，参考[对返回的信息做数据校验](#check)。

- **数据**：即需要插入的数据集模型，需要在页面中引用该模型。
- **字段设置**：将返回信息插入的目标字段设置，插入的数据模型结构需包含要插入的字段内容。
- **覆盖模式**：当插入的数据主键重复时，数据的**覆盖模式**包含2种：**合并**、**追加**，默认为**合并**。

![识别返回信息](./images/2021-01-29-15-11-46.png)
