持续创造,加快成长!这是我参与「日新计划 10 月更文应战」的第32天,点击检查活动详情

一、文档辨认难题

咱们通过视觉、听觉、触觉、嗅觉来认知周围环境客观物体。眼睛是咱们勘探周围物体光线的接收器,它勘探了物体的明暗、色彩、形状和空间关系,人类对国际的感知 80% 是通过眼睛获取,比较听觉和触觉来说,视觉更有冲击力。

运用眼睛了解外部事物的进程一般便是视觉感知,视觉感知是人工智能当中特别重要的问题之一,在视觉感知中,文档文字辨认是十分重要的计算机视觉技术,由于文字是咱们感知这个国际最重要的手段,文字能够说是人类文明的标志,是信息交流的途径,学习常识的重要渠道,是记录前史、思维、文明的载体。

咱们把 OCR 比做 AI 技能的一双慧眼,协助人工智能看清一切需要处理的文字内容、符号信息,然而现在低质文档图画的辨认问题好像已经成为 AI 技能落地中的瓶颈,文档图画作为一种非结构化数据,其剖析辨认面临一些技能难点:

  1. 低质文档图画难以辨认:图文混合、区域形状不规则、变形文档质量退化严重,如下图发生了极大的摩尔纹,为图画辨认带来极大困难;

    图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

  2. 场景文本的文字检测及版面剖析困难:天然场景图画的布景杂乱、光照和摄影视角改变、文本行方向和形状改变、字体风格和色彩改变等,,如下图手机摄影时视点歪斜,视角奇葩,文本准确定位提取十分困难;

    图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

  3. 无法检测过滤 PS 技能篡改:身份证、护照、行驶证、驾驶证、港澳通信证等证照类别,及增值税发票、一般发票、小票、合同等文档篡改后无法检测出是否实在,PS 智能检测在反诈骗、合规风控等范畴含义严重。如下图证件修正正字和有效期数字,这为辨认带来了新的困难;

    图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

二、技能剖析

2.1、切边切片增强

2.1.1、技能介绍

现在自带的数码相机已经成为了手机等移动设备的规范配置,这些数字成像设备经常被用来拍照各种文本图画,由于拍照习气,取景需求等的不同,用户拍照到的文本图画,一般是包含有布景的,而用户需要的图画,一般是去掉了布景区域的图画。在票据辨认、PPT 拍照、手刺辨认、文稿备份时就需要用到切边切片技能。如下图所示:切边后图画能够更好的展现并进步下流使命(OCR 辨认,信息抽取等)的准确率。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

2.1.2、原理剖析

对一般图画的切边切片的步骤如下:1.加载图画;2.对图画进行灰度化;3.边缘检测;4.概括发现;5.找出符合方针的最大外接矩形,并运用矩形的四个坐标点制造线;6 切除 ROI(感兴趣区域);7.显现 ROI 区域。

对旋转图画的切边切片的步骤如下:1.加载原图;2.对图画进行灰度化;3.边缘检测;4.概括发现;5.找出图画旋转视点(a.找出旋转矩形的最大宽和最大高 b.找出这个方针矩形的旋转视点及旋转矩形。c.把此矩形制造出来);6.根据图片中心点及旋转视点,制造方针旋转矩阵;7.运用仿射改换 + 第 6 步的旋转矩阵完结终究的旋转(仿射改换在图画还原、图画局部改变处理方面有重要含义);8.显现终究图画。

仿射改换是指在向量空间中进行一次线性改换和一次平移改换到另一个向量空间的进程,仿射改换能够通过一系列的原子改换的复合来完结,包含:平移、旋转和翻折;缩放、错切。没有平移或许平移量为 0 的一切仿射改换都能够叫线性改换,线性改换能够用如下改换矩阵描绘:

[x′y′]=[abcd][xy]\left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]=\left[\begin{array}{ll} a & b \\ c & d \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right]

不同改换对应的 a,b,c,d 束缚不同,能够看上式,比方尺度改换的束缚 a 便是 ,束缚 d 便是 ,b 和 c 为 0,这样 x‘=x,y’=y 便是将图画沿着 x 轴放缩 倍,沿 y 轴放缩 倍。

而为了包含平移改换,需要给矩阵加一个维度,如下:

[x′y′1]=[abcdef001][xy1]\left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ 1 \end{array}\right]=\left[\begin{array}{lll} a & b & c \\ d & e & f \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]

对应的束缚有:a,b,c,d,e,f,即具有 6 个自由度,不同根底改换的 a,b,c,d,e,f 束缚不同。平移改换时,b=0,d=0,a=1,b=1,c=,f=,那么 x‘=x+,y‘=y+,便是将图画沿 x 轴平移 位,将图画沿 y 轴平移 位。

为了使图画能够旋转,咱们加入了三角函数,终究的矩阵改换咱们界说为:

[scos⁡()−ssin⁡()txssin⁡()scos⁡()ty001][xy1]=[x′y′1]\left[\begin{array}{ccc} s \cos (\theta) & -s \sin (\theta) & t_{x} \\ s \sin (\theta) & s \cos (\theta) & t_{y} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right]=\left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ 1 \end{array}\right]

终究的仿射改换便是线性改换和平移改换如此叠加而来的,仿射改换能够给予图片放缩、旋转、平移、偏移等几许改换功能。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

2.2、曲折纠正拉平

2.2.1、技能介绍

不同于平面扫描仪取得的文档图画,由手持镜头摄影得到的文档图画往往含有几许形变以及环境布景的搅扰。这会使得现有文档信息抽取和内容剖析体系的功能下降。如纸张的内容歪斜歪曲,部分纸张自身就不平整,存在过折叠、皱纹的畸变问题且自身厚度造成摄影进程中存在的图画的曲折畸变。如下图所示形变纠正后图画能够更好的展现,并能显着进步下流使命(OCR 辨认,版面剖析/还原等)的准确率。

![[外链图片转存失利,源站或许有防盗链机制,主张将图片保存下来直接上传(img-h7QKRYF2-1666579769865)(static/boxcniYfz1JL0yY0n2Cdd7leqff.png)]](img-blog.csdnimg.cn/4827d7d615e… =x300)

2.2.2、原理剖析

DocUNet:具有中心监督的堆叠图画解歪曲网络

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

DocUNet 依赖于卷积神经网络(CNN)进行端到端图画恢复。模型由两个 U-Net 组成。其间,U-Net 是一个彻底卷积网络,它包含一系列下采样层和一系列上采样层。特征图鄙人采样层和上采样层之间衔接。然而,单个 U-Net 的输出无法完结作业,受连续猜测和渐进精化作业的启发,文章将另一个 U-Net 作为精化器叠加在第一个 U-Net 的输出端。第一个 U-Net 在最终一个反褶积层之后分裂,而第一个 U-Net 和中心猜测 y1 的反卷积特征被衔接在一起作为第二个 U-Net 的输入。第二个 U-Net 终究给出准确的猜测。

DewarpNet:运用堆叠的 3D 和 2D 回归网络对单图画文档进行解歪曲

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

DewarpNet 由两个子网络组成:形状网络纹路映射网络。此外,文章还提出了一个用于光照作用调整的后处理增强细化网络,该模块能够在视觉上改进未旋转的图画。

形状网络:将此回归使命表述为图画到图画的转化问题。形状网络将 I 的每个像素转化为 3D 坐标图,C∈ Rhw3,其间每个像素值(X,Y,Z)对应于文档形状的 3D 坐标。在设计形状网络时,文章运用跳衔接的 U-Net 型编码器-解码器架构。

纹路映射网络:以三维坐标映射 C 为输入,输出后向映射 B。在纹路映射网络中,选用了一种多 DenseNet 块的编解码结构。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

细化网络:作为后处理组件以调整校正图画中的照明作用。该网络不仅进步了成果的感知质量,而且进步了 OCR 功能。文章运用 Doc3D 数据会集的额定地面实在信息(即表面法线和反照率地图)来训练细化网络。细化网络有两个 U-Net 型编码器解码器:一个用于猜测曲面法线 N∈ 3 给定输入图画 I;另一个以 I 和对应的 N 作为输入并估计阴影图 S∈ Rhw3.S 描绘阴影强度和色彩。

2.3、摩尔纹去除

2.3.1、技能介绍

当感光元件像素的空间频率与影像中条纹的空间频率接近时,或许发生一种新的波浪形的搅扰图画,即所谓的摩尔纹,最形象来说,咱们用手机拍照电脑、电视上的画面,或许拍照条纹和格子的衣服时,拍出来的相片上总是有奇奇怪怪的彩色条纹,这些纹路由摩尔效应引起的。摩尔效应是一种特殊的光学现象,它是两条线或两个物体之间以固定的视点和频率发生干与后发生的视觉作用。如下图所示:

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

而摩尔纹去除,能够协助消除屏幕纹对画质的搅扰,进步图画、文字清晰度,如下图运用摩尔纹去除网络后,图画质量显着进步:

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

2.3.2、原理剖析

根据多分辨率卷积神经网络的摩尔纹图画恢复

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
网络架构如上图所示,其间包含不同分辨率的多个并行分支,图画输入为 2562563,运用非线性激活函数 + 卷积核。能够看到:

(1)网络中不选用池化层,通过步长为 2 的卷积核来代替池化操作。

(2)下采样进程中大量运用 3*3 卷积核,步长为 1。

(3)在反卷积进程中,增大了图画分辨率,生成 3 通道像素图,最终通过叠加完结输出。

顶部的分支以输入图画的原始分辨率处理特征映射,而其他分支处理越来越粗糙的特征映射。每个分支中的前两个卷积层构成一个组,在一切分支的前两个卷积层之后生成的特征图能够堆叠在一起以构成倒置金字塔金字塔运用非线性“滤波器”(即卷积核 + 非线性激活函数)计算。然后通过将输入图画转化为不同分辨率的多个特征图,在输入图画中显现不同级别的细节。更重要的是,在网络中,每个分辨率都与一个网络分支相关联,其间六个堆叠卷积层坚持相同的分辨率。 这样的网络分支能够执行杂乱的非线性改换(例如去除特定频带内的摩尔纹),而且比 U-Net 中的跳过衔接(Skip Connection)更强大。

在每个分支内,前两层的输出特征图被馈送到级联卷积层序列中。这些卷积层坚持相同的输入和输出分辨率,而且不执行任何下采样或池操作。他们负责消除与该分支的特定频带相关的莫尔效应的中心使命,别的在这个序列中放置了多个卷积层(一般为 5 个),每个卷积层具有 33 个核和 64 个通道。

为了将一切并行分支的改换成果组合到一个完好的输出图画中,需要将级联卷积层生成的特征图的分辨率进步到除第一个分支外的每个分支内输入图画的原始分辨率。在从顶部开始的第 i 个分支中,模型运用一组 i−1 个反卷积层来完结这一方针。每个反卷积层使输入分辨率加倍。在每个分支内的反褶积层之后有一个额定的卷积层。这个额定的层生成一个只有 3 个通道的特征图。该特征图基本上消除了与该分支的频带相关联的摩尔图画(在输入图画中)的重量。最终,来自一切分支的终究 3 通道特征图被简略地相加在一起,以发生去除莫尔纹图画的终究输出图画。

三、黑科技体会

日前举办的 2022 中国图画图形大会《ocr 前沿技能与产业应用》论坛上,合合信息公司天然语言算法研制总监丁凯博士介绍的该公司智能文字辨认及图画处理技能,被参与论坛的中科院、北京大学、联想研究院等顶尖科研机构的专家,共同认为是破解难题的“钥匙”。

通过体会,合合信息公司智能文字辨认及图画处理技能,通过引进ai(人工智能)技能,能够协助各应用范畴简化下流文档处理使命,进步文字辨认功率与准确性。

笔者在研究图画处理时也深化体会了一次他们的黑科技。

3.1、功能介绍

官网供给了高精准度的智能文字辨认引擎及场景化产品,支撑多种布置办法,能够协助进步文档处理流程的功率。包含证件辨认、图画切边切片、PS 检测、自动擦除手写文章、去除摩尔纹、图画纠正、水印去除、文档转化等等。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
下面咱们挑选最感兴趣的文档图画切边纠正和 PS 检测进行体会。

3.2、文档图画切边纠正

文档图画切边纠正功能能够智能定位图画中文档主体的边缘,并进行布景切除 (文档提取),对形变文档进行纠正。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

官网供给了 API 调用的接口和文档:

恳求 URL:https://api.textin.com/ai/service/v1/dewarp

HTTP 恳求办法:HTTP POST

恳求头阐明(Request Header)

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
URL 参数
图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

恳求体阐明(Request Body)

Content-Type: application/octet-stream

要上传的图片,现在支撑 jpg, png, bmp, pdf, tiff, 单帧 gif 等大部分格局.

呼应体阐明(Response Data)

Content-Type: application/json。JSON 结构阐明如下:

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
JSON结构示例

{
    "code": 200,
    "message": "success",
    "version": "0.2.0",
    "duration": 100,
    "result": {
        "image": "iVBORw0KGgoAAAANSUhEUgAAEIAAABYA"
    }
}

所以,咱们能够运用 html 代码调用接口:

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>服务集成演示</title>
</head>
<body>
<h2>上传文件</h2>
<div>
    <input type="file" id="file">
</div>
<script>
    document.querySelector('#file').addEventListener('change', function(e) {
        var file = e.target.files[0] // 上传文件的 File 目标
        var reader = new FileReader()
        reader.readAsArrayBuffer(file) // 读取成二进制
        reader.onload = function (e) {
            var fileData = this.result
            var xhr = new XMLHttpRequest()
            // --------------------------------------------------------------------
            var appId = 'c81f*************************e9ff'
            // 请登录后前往 “作业台-账号设置-开发者信息” 检查 x-ti-secret-code
            // 示例代码中 x-ti-secret-code 非实在数据
            var secretCode = '5508***********************1c17'
            // 文档图画切边纠正 服务URL
            var url = 'https://api.textin.com/ai/service/v1/dewarp'
            xhr.open('POST', url)
            xhr.setRequestHeader('x-ti-app-id', appId)
            xhr.setRequestHeader('x-ti-secret-code', secretCode)
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    xhr.onreadystatechange = null
                    var response = xhr.response
                    var obj = {}
                    try {
                        obj = JSON.parse(response) // 转化为目标
                    } catch (e) {
                    }
                    if (!obj.result) return
                    var list = obj.result.item_list
                    if (!list || !list.length) return
                    console.log(list)
                }
            }
            xhr.send(fileData)
        }
    })
</script>
</body>
</html>

咱们运用一副歪斜视点的图画进行测验:

![[外链图片转存失利,源站或许有防盗链机制,主张将图片保存下来直接上传(img-98QfHwE9-1666579769878)(static/boxcnVz6efHfT5trBctj00tMa3c.jpg)]](img-blog.csdnimg.cn/249b62e23b7… =x300)

上传图片后,显现成功调用 API,JSON 目标回来如下,message:success 标明成功,result image 标明的是修正后的图画的 base64 标明。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
咱们运用

img src="data:image/jpeg:base64,+‘回来的base64字符串’ "

解码 base64 格局的字符串,得到图画,发现调用成功,图画被成功纠正了

![[外链图片转存失利,源站或许有防盗链机制,主张将图片保存下来直接上传(img-uw0bIX3e-1666579769880)(static/boxcnfUPk8BXGCSe8edPYNH0Zyd.png)]](img-blog.csdnimg.cn/16a4fd7c07b… =x350)

3.2、PS 检测

别的一个很牛的便是 PS 检测体系,根据职业抢先的自研篡改检测体系,可判断图片是否被篡改,支撑身份证、护照、行驶证、驾驶证、港澳通信证等证照类别,及增值税发票、一般发票、小票、合同等文档类别。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

网站供给了丰厚的 API 调用接口和文档

恳求 URL:https://api.textin.com/ai/service/v1/manipulation_detection

HTTP 恳求办法:HTTP POST

恳求头阐明(Request Header)

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
URL 参数
图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

恳求体阐明(Request Body)

Content-Type: application/octet-stream

要上传的图片,现在支撑 jpg, png, bmp, pdf, tiff, webp, 单帧 gif 等大部分格局

呼应体阐明(Response Data)

JSON 结构阐明如下:

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

JSON结构示例

{
    "code": 200,
    "message": "success",
    "version": "1.0.1",
    "duration": 100,
    "result": {
        "image_width": 1024,
        "image_height": 1024,
        "image_property": {
            "ps": {
                "image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD",
                "is_tampered": 1,
                "positions": [
                    [
                        38,
                        88,
                        42,
                        8,
                        42,
                        12,
                        38,
                        12
                    ],
                    [
                        48,
                        88,
                        52,
                        8,
                        52,
                        12,
                        48,
                        12
                    ]
                ]
            }
        }
    }
}

这次咱们运用 java 代码调用接口:

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws Exception {
        // PS检测
        String url = "https://api.textin.com/ai/service/v1/manipulation_detection";
        // 请登录后前往 “作业台-账号设置-开发者信息” 检查 x-ti-app-id
        // 示例代码中 x-ti-app-id 非实在数据
        String appId = "c81f*************************e9ff";
        // 请登录后前往 “作业台-账号设置-开发者信息” 检查 x-ti-secret-code
        // 示例代码中 x-ti-secret-code 非实在数据
        String secretCode = "5508***********************1c17";
        BufferedReader in = null;
        DataOutputStream out = null;
        String result = "";
        try {
            byte[] imgData = readfile("example.jpg"); // image
            URL realUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "application/octet-stream");
            conn.setRequestProperty("x-ti-app-id", appId);
            conn.setRequestProperty("x-ti-secret-code", secretCode);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST"); // 设置恳求办法
            out = new DataOutputStream(conn.getOutputStream());
            out.write(imgData);
            out.flush();
            out.close();
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 恳求出现异常!" + e);
            e.printStackTrace();
        }
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        System.out.println(result);
    }
    public static byte[] readfile(String path)
    {
        String imgFile = path;
        InputStream in = null;
        byte[] data = null;
        try
        {
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }
}

同样,咱们运用一张被 PS 篡改正后的图画进行测验,调用接口运转后,回来 json 为:

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

咱们翻开 imageproperty,查找 ps 中的 is_tampered,代码显现为 1,即标明检测到这幅图画被 PS 修正正,回来 image 图画为检测到修正的地方的图画。

图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)

四、总结

通过技能剖析,现在低质文档图画的辨认问题好像已经成为 AI 技能落地中的瓶颈,文档图画作为一种非结构化数据,其剖析辨认的确存在不少技能难点。

在体会进程中,TextIn 智能文字辨认引擎能够从图画和 PDF 文档中提取印刷、手写、印章、公式、表格、图片等富文本信息,支撑 50+ 多语言辨认,众多文档类型,包含商业文件、发票、账单、收据、手刺和海报。在财务共享体系中能够从混贴的发票中切分、分类、提取字段信息,支撑发票中错行、歪斜、重叠、遮挡、形变、光照不平等杂乱场景;在证件辨认体系中支撑 13 类国家证件辨认,覆盖个人和企业所需的 200+ 种证件辨认;在人机结合体系中完结精准 100% 辨认,远逾越人类的辨识度;此外引擎供给了丰厚的便利的 API 调用办法和文档,且在通用场景中平均 1s 处理完一张文本图画,用起来十分快捷迅速。