OCR / 文本识别和恢复问题

数据挖掘 数据集 文本挖掘 数据清理 加工
2022-02-16 13:31:44

我正在从事一个研究二战期间美军伤亡的研究项目。具体来说,我正在尝试为县级的每项服务构建伤亡人数。这里有两个数据来源,每个来源都有自己的挑战。

1. 陆军和空军数据。国家档案馆保存了各州和县在行动中阵亡的陆军和空军军人名单。在线提供报告的 ​​.gif 图像。是德克萨斯州几个县的样本。

我不需要恢复姓名或任何其他信息。我只需要计算每个县下的名称数量(每个都在自己的行上,并以五个一组列出)。有数百个这样的图像(50 个州 - 每个州 30-100 个)。

我一直找不到可以充分解决这个问题的 OCR 程序。你会建议我如何应对这个挑战?(我在 Python 和 Java 方面有一些编程专业知识,但更愿意使用任何可能存在的现成解决方案)。

2. 海军和海洋核心数据。这些数据的组织方式不同。每个州都有一份长长的伤亡名单,上面有他们近亲的地址。是德克萨斯州的样本。对于这些图像,我需要计算死亡人数并恢复他们的家乡,这通常是每个条目中的最后一个词。然后我可以将这些家乡与县匹配并与数据库 1 合并。

再一次,通常的 OCR 程序已被证明是不够的。对此(诚然更困难)问题的任何帮助将不胜感激。

先谢谢各位专家了!

3个回答

这两个数据集的答案是带有一些后处理的 OCR 应用程序,但它是一个比通用低质量或开源 OCR 更专业的程序。本质上,问题越难,就越需要使用更强大和更先进的工具来解决它。

该任务将有两个主要阶段:将数据数字化(图像到文本,即 OCR)和处理数据(执行实际计数)。分别查看它们,以便为每个阶段选择最佳方法。

这些图像和通用 OCR 的主要挑战是:

a) 图像分辨率低。例如,#1 图像的分辨率约为 72 dpi。此类文本质量的建议分辨率为以 300 到 400 dpi 扫描,但很明显,现在重新扫描或控制扫描分辨率不适用。这就是为什么一种选择是使用图像预处理工具清理和增加尺寸的原因。这是自适应二值化并放大 300% 后的原始 #1 图像片段的样子。很明显,每个字符的像素太少,字符很容易被误读。

在此处输入图像描述

b) 许多 OCR 应用程序不支持 #1 中的 GIF 格式。图像需要批量转换为不同的格式,例如 PNG 或 TIF。

c) 在这些扫描中,可以看到背景和透色(纸张另一面文本的阴影)。需要使用良好的二值化来去除背景和渗透,但不能去除实际字符的重要部分。

在对上面列出的项目实施特定的预处理解决方案后,然后使用高质量的 OCR 系统,例如 www.ocr-it.com API,可以获得尽可能高的结果。结果远非完美,但它与现代 OCR 引擎在这些图像上所能达到的精度一样高。

在此处输入图像描述

幸运的是,该项目需要对数据进行统计,因此第二阶段拥有可靠数据后处理分析所需的所有数据。与其他基本的 OCR 引擎相反,我使用www.ocr-it.com API 提供的 OCR 来产生上述识别。OCR-IT API 可以免费开发,并且每页使用成本非常低,因此对于这个项目来说,这可能是一个非常经济但功能强大的解决方案。它返回格式化的文本布局,包括保留换行符和整体格式结构。这使得文本后处理更容易。

可以运行一个简单的算法来计算行数,从而产生必要的研究计数。

上面描述了一个两阶段的方法:获得最佳的 OCR 结果,并使用适用的方法处理所需任务的数据

等等,还有更多……

还有第二种选择是使用更专业的 OCR 应用程序,称为FlexiCapture和 FlexiLayout 技术。这种强大而智能的数据捕获技术具有内置的高精度 OCR,它具有强大的规则和数据分析引擎,可以执行非常专业的用户定义的动作和任务链。

使用带有 FlexiLayout 的 FlexiCapture 实现此方法需要以下逻辑步骤。

首先,进行整页 OCR 并提取所有对象,包括字符、噪声、黑色横竖线、白色间隙和对象(可能是图片、徽标、手写等)。这会产生我们可以应用搜索条件的对象。

接下来,将以下约束应用于后 OCR 数据分析和搜索条件:将图像分成三个垂直列,每列运行以下逻辑,使用 line-start 作为单独计数,跳过页眉/页脚/缩进行(县名),假设每个名称至少包含三个字符,在每列中从上到下递归查找每个名称,排除先前找到的行。

虽然上述逻辑设置起来听起来很复杂,但实际设置只需要几分钟,并且需要通过用户界面 (UI) 环境进行最少的工作。无需编码或编程。已创建以下搜索元素和条件。

在此处输入图像描述

由 CharacterString 搜索对象组成的 RepeatingGroup。

此设置为第一列数据生成以下搜索结果:

在此处输入图像描述

作为最后一步,FlexiCapture 被指示返回符合我们搜索条件的总找到元素的数量,从而有效地为研究任务生成必要的数据。

在 FlexiCapture 中可以设置其他逻辑替代方案,例如查找行间空白的数量,或在每列线的末尾搜索固定长度、固定位置的 3 字母组合。

总之,有几种选择(总是很好)如何以相对轻松的努力和高质量来完成这项任务,但成功取决于所用工具的质量和如何使用它们的必要知识。

如果您认为其中一些工具和流程对您的项目有益,请直接与我联系。我专注于这些工作流程。伊利亚@WiseTREND。我的公司可能会提供设置或指导方面的帮助。我们参与了各种研究计划,其中一些是通过捐赠给一个好的事业。

您的 OCR 程序无法识别任何内容的原因是字体非常小。如果您调整图像大小以增加其大小,您将获得更好的结果。例如,使用 ImageMagick 应用固定阈值来移除第一张图像的背景并增加其大小:

convert -density 500 -threshold 40% 29-1891a.gif -resize 250% output.tiff

在此之后,tesseract 做了一个合理的工作:

tesseract output.tiff output test.config

我在 tesseract 中包含了一个配置文件test.config,以限制允许的字符。这样,我们就不会在文本中获得错误的 unicode 字符。

测试配置

tessedit_char_whitelist ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-

这是结果:

HOWARD COUNTY 10011607

NALL JOHN E 0-686196 1 LT F05 DALE MARVIN E 30037267 PVT DON SANSJNG DAVID 10505969 PFC
NIXSON EONOND R 10077072 CPL KIA DANIEL NILBORN N 30637064 PVT FOB SAUNDER6 NEWTON L 0-401709 CAPT
NOBLES STEPNEN E 30502791 PVT 0N0 DAVIS IR D 30433764 PVT 0N0 SNELTON CHARLES R 14001742 VT
OSBURN SILLY F 02008518 2 LT DNB BAVIS JINKIE L 18214208 5 SC KIA SHELTON CHARLIE 33423953 7335
PELTON J L 30105473 5 SC RNA 0 DEAN CHARLES 02066314 3 LT 0N0 SMERAN CARLTON A JR 0-510441 2 LT
GUEZADA FRANK 5 10014939 PFC KIA IDIXON JOHN N 6202114 PVT 00R SIBLEV JESSE 30037241 PFC
RAMIREZ JOSE T 30347914 PPC KIA DREADIN RAYMOND 6950964 PVT KIA SLATER JERONE E JR 0-605266 1 LT
OSE THO S 0 30345100 PPC NTA - DUNN GARLAND J 30037202 PVT 0N0 SMITH 00 SE 30509104 PPC
R035 ORREN C 16015376 PVT ONE 1 ELDER GERALD P 0-387706 2 LT KIA SNITN JASPER 7 33037355 7 SC
RUTLEDCE CARL R 38107116 PVTELPNAA JEARHER MARVIN R 30279097 CPL DON SMITN JERALO D 10005000 CPL
SCUDDAY BERNIE L 0-603906 1 LT KIA - FINDLEY PAUL A 50536010 PFC OMB SMITH NELDON A 5550735 PFC
SNITH ROBERT L 10015524 507 ONE- ELINC ROY T I 0-724730 CAPT F05 S THEY 4295431 5 5
SNITH TRAVIS L 30670530 PVT IDUN FORD HERRELL E 0-665672 CAPT E00 STEPN NSON JESSIE P 10006200 PVT
SNEED ROY A 13076927 S 80 ONE GARRETT TOMMY 30220694 PFC KIA SULLIVAN 31 01525125 2 L
SOUTN CARL 0 JR 30343379 PVT OMB CATLOR R T 20012665 SOT KIA SNINDELL VERL O 30037252 7005
STEVENS JANESCO 10015557 PVT DNR CLASSCOCN CNARLES J 6571000 5 SO ONO TAYLOR ARTHUR V 33531479 PFC
STENA D JO 0-723036 2 LT POL 7 00 A 10007027 PVT DOM ITOHN E N A JR 30035251 5 SO
UTTON ARVI 6360431 AV C 0N6 COSSETT JANES N 30436055 CPL KIAI ALKER J NEE H 30117597 SOT
IALBOTT CHARLES 9 38342083 PFC KIA GRESN J 18126923 5 SO KIA NALKER RALPH L 203126071PPC
TUCKER JAMES 30848763 PVT MIA CRIFFIS WILLIAM J 6270119 PFC 0N0 NALLACE JESSE A 30043713 T SC
-TUCKER STERLING P 33341143 RPCI KIA CROSS ELERY C 0-390713 3 LT DNR NARREN CHARLES D 30110253 5 50
NAOSNORTN PAUL P 30345079 5 SC ONE HAKNONBS ROBERT M 38433940 3 SC KIA MASHINCTON HENRY 30299100 PFC
NALNER JAN S H JR 0-696023 2 LT P0 HANDLSY JAMES J JR 0-417955 1 LT ONE EEMS NINPRED E 20017930 CPL
NEBB GLEN 30343104 PVT -K1 7 NANET FARRELL 8 30012597 SCT KIA NNITE DE NIS 10124415 PFC
NRAT JAMES H 30067743 TE05 KIA NARCIE PRANCNARD 6370053 1 SC NIA NMITE MARVIN J 30430974 PFC
NRIOHT NAILAND 0 30609570 PFC KIA NARKEY VEWCEN 30424190 PVT KIA NOODARD BILLY E 510217472 T 5
HARRIS PRBS 38111537 PFC OKIA NRICNT EILL 0-725355 CAPT
I HARRISO DUKE N JR 18055432 AV 0 ONE YOST TNURNAN R 6273153 PVT
HENDRIX JOHN N JR 10217563 PVT 0N8
HICKERSDN JACK 04431540 1 LT 9N8
HUDSPETH COUNTY 3536305354 A CHEW 55555 W
9 0776 A -
- JOHNSTON LONNIE O 0-754906 3 LT KIA H INSON COUNTY
ONES GEORBE N 01173315 1 LT ONE UTCH
JUMPER ISAAC H 30605960 PVT KIA I
A9515 HAN C -7 7 3 LT N5 LONG OSCAR D 30812573 5 SC KIA ALEXANDER BOYD A 0-690739 2 LT
EARDNERNE3SEPN H 3L5E3355 3 L7 335 LVTLE JOHN E 30433946 PVT KIA EALDNIN JANES H 0-407114 CAPT
NORALES ALFREDO L 18015539 3 CG P05 MACK HULET 00057345 1 LT NIA EICCERSTAPP C N 34530001 PC
54N1952 LOCAS N 39441440 PFC K14 NAJORS TRUSTT J 00410046 2 LT KIA BRITTON JAMES H 18036279 8 SC
ROBLES VICENTE 30570733 PFC 0N5 MASON DICE 30203437 CPL NIA EULLARD CAR 5 30607623 PVT
SANCNE2 ANGEL R 38310341 PVT ONE MASON HALTER P 0-671673 3 LT NIA C IN ROBE T E 33105799 TECS
VALLES RENICIO 0 30441430 PIC DON NASSEV JESSE D 30435424 PVT KIA COHA K LL03 N 10077256 PVT
NC CLENDON J H 30117530 PPC ONE EVANS L 0 37392406 TECS
NC HNORTER C R 30300391 PVT KIA FIRLEY MARVIN L 38572402 PVT
4 HILLNAN ODEAN R T-000345 FL 0 DNB IPIELDS JAKES 35711546 PVT
HIL10N JACKSON 7 13030591 PFC 933 ORADDY ROY L 39112920 PFC
HUNT COUNTY HOORE ARLON D 6295620 9 SC KIA GRANT 30572401 PVT
MORRISON DURHARD D 0-519411 3 LT KIA HANNA EVERETT T 10104243 S SC
- LNULLINS GERALD D 6295622 T 50 NIA HANSARD SAMUEL 2 04754619 1 LT
NEAL HOMER M 30609200 PVT KIA THARVEY JOHN B 0-602116 2 LT
ALANIS VICENTE 30894642 VT KIA MEAL RAVN 39 9 1759550 3 NECOAL MARTIN J 6396940 PFC
ALLEN TRUHAN L 0-123936 1 LT KIA NELSON 1 0 30431073 PPET ONE HILL RAYMONO 8 30050142 PVT
ALLEY NILBUR K 01703993 2 LT KIA NELSON TRAVIS C 38204649 PVT DOH HOP JACK H D 30342393 PFC
BENCH CLARENCE A 30003600 PFC KIA INEWLAND OTIS T T-000346 FL 0 F051 HDFF ROBERT C 30345133 T 50
BENNETT EVERETT N 0-692130 LT 0N5 NICNOLSON DALE- 10005042 PVT KIA JONES JANES 0 30343505 PVT
I I
A NIXON LOYD 5041674 TECS KIA KAPPELMN MC 0-360687 CAPT
BLACKHELL E C 38357321 307 KIA PARKER N 33130N V 52959524 3 L7 KIA KECANS TIM JR 38342898 FC
ERITT BASIL JR 36002307 PFC K14 PATTERSON THOMAS H 18136913 SCT 9N5 KENNINER EARL 0 30401408 SGT
BROHN SHOE 8 38634396 PFC KIA PERRI JA 5 0-562333 1 LT KIA LANTRON EDWARD L 19190302 5 SO
BURNS VIRCIL P 38035701 PRC KIA PETTICREH FRED 0 16215700 S 50 NIA LESNER ROLLIE H 30050735 AV C
BUTLER GEORGE A 37259433 1 SC KIA PHILLIPS C L JR 0-431139 CAPT KIA NC CARTY TOURNAN P 30711042 PFC
CAMERON VANDSLL C 30634570 PPCI KIA PILCRTN CLYDE 30115026 V NIA NC GLENDON JACK 30330395 PFC
CARTER LEO RD K 30119959 AV 0 ONE PO D EUCENE N 4 30431074 PRC KIA NC NINNET K E 30340151 PVT
CARTER OILLIAH F 38685535 PFC 0N8 PRESLEY NILLIAN H 30037547 PVT 0N5 NC QUEEN JAMES Y 02055059 2 LT
CREEK LOTD 6379416 A SC DNB PRICE PREDRICK P 30409331 CPL 100W NOTEN GEORGE N 30304695 PFC
CLARK JOHN 18317907 CPL KIA PURCELL SAMUEL N 30017905 PVT 0N5 PANNELL NOLENIA 6227623 1 SC
COLLINS RAYMOND N 30137040 PFC OOH RAILIPF NARDEN A 30037006 CPL 00H PIERCE FELIX 0 30335390 5 SC
CREAKER SAH BL N 18006101 PVT KIA HAYNES NILLIAN T 7-954739 PL 0 9N5 PIETZSCH JAI E 0-426961 2 LT
CRIDER NARLAN 0 10154794 SCT KIA REED JDRN L 30529414 PVT POL RTER NALLACE N JR 38193560 CPL
DALE CHARLEY 8 I 38049500 3 SC KIA ROI NILLIS 5 01393956 1 LT KIA PRESCOTT DAVID L JR 0-707191 2 LT
05 231



D KZXXN D
NNNNH 2
XXLA-A- Q

2
33

UR R
2055
35

正如你所看到的,有很多错误,但至少我们得到了合理的结果。无论如何,您都不想这样做,因为即使您能够获得完美的识别,您的某些行也会被放置在错误的县,因为 tesseract 将您的文档视为一个大段落。我建议您使用垂直线将图像分割成 3 个部分,然后对每个部分进行预处理。您甚至可以尝试垂直连接各个部分并在单个页面中执行 OCR。这也适用于第二张图片。

顺便说一句,你的图像的分辨率不是很好,所以如果你能得到更好的图像,那将会有很大的不同。

通常的 OCR 程序在哪些方面被证明是不够的?您是否有一些您发现无法使用的示例输出?

我可以看到这些列如何使事情复杂化。

我会说数据集 1:OCR 图像,然后逐行读取文件并匹配例如至少五个数字的序列。所以你每行得到 0、1、2 或 3 个。例如,由于 OCR 不小心将数字识别为字母,您可能会错过一对夫妇,但我希望这能很好地工作。你必须精确到什么程度?

数据集 2 似乎更困难。也许可以通过匹配大写序列后跟逗号来完成计数。地名...非常棘手。再一次,你有一些我们可以查看的 OCR 输出吗?