将网页连接到OCR引擎

时间:2018-02-17 03:18:57

标签: java web-applications web ocr

我正在一个网站上工作,该网站一度会询问用户的名字,姓氏,照片ID和电子邮件地址。 现在我需要验证照片ID实际上与输入的名字和姓氏同名,这意味着需要进行一些OCR或图像处理。 我不希望通过外部API完成此操作。我必须向用户保证,照片将保留在网站内,而不会暴露给其他第三方。 我真的不知道这样做的最佳方法,我想的可能是一些java应用程序? 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

这里面临的最大挑战是确保您的解决方案能够处理中等水平的流量。

您可以通过API调用大量OCR引擎。 Tesseract有dozens of wrappers,附有文档。显而易见的解决方案是(伪代码):

show data input form with file upload.
store uploaded file to disk.
invoke OCR API with uploaded file, get back strings.
pattern match (regex or similar) for name.

但是,此解决方案可能会产生可伸缩性问题/拒绝服务选项。 OCR库将与Web请求同步运行,并在运行时使用该服务器线程; OCR应用程序可能(相当)缓慢,并且攻击者可以通过上传难以转换的图像来减慢它的速度。这意味着只有少数(相对)请求可能会导致您的Web服务器崩溃。

将扫描任务放在异步队列上,让一个不在Web请求上下文中运行的应用程序处理它,然后传回验证状态会好得多。

在伪代码(网络应用程序)中

show data input form with file upload.
create database record for user.
store uploaded file to disk.
put task on the job queue
use client-side JavaScript to wait for update of database status (Ajax/React)
when status changes, show update to user

监听作业队列的应用程序:

see new job.
use disk file to start OCR process
scan for name (Regex) in results
update database record for this user

大多数Web应用程序框架都支持队列;如果你在Java工作,你可以使用JQM,而Spring支持这种类型out of the box.

答案 1 :(得分:0)

您需要一个私有Web API,将其作为Docker映像托管,另一个应用程序与处理来自用户请求的私有Web应用程序进行通信。该应用程序可以用任何语言编写,而不仅仅是java。

免责声明:我为创建MicroblinkWeb API的公司工作

答案 2 :(得分:0)

  

我必须向用户保证,照片将保留在网站内,而不会暴露给其他第三方。

内部部署OCR的唯一免费选项是使用Tesseract。所有其他可安装的OCR引擎,如Abbyy,Nuance或OCR.space Local都是商业产品。