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