PDF 进阶之印章识别

说是pdf 印章识别,其实准确来说是图片印章识别。当然,这个功能还是要继续前面的话题。流程自动化,简言之就是需要在用户上传完盖章之后的所有文档图片之后将图片拼接为 pdf,并且,还要检测上传的图片是否已经盖章。之所以要自动检测是因为:看了下现在用户上传的图片,有很多并没盖章,企图蒙混过关。虽然后续还有审核功能,但是与其增加审核的工作量,不如直接在源头就卡死,如果没有盖章禁止结束流程。

github 上搜索印章识别也能搜到一些项目,但是,注意哈,我要说然鹅了。很多开源项目开源了一半,这就离谱,例如下面这个:

代码拉下来,哼哧哼哧部署好环境,结果在运行的时候提示 data 目录不存在,也就是说训练之后的权重文件没有,给的一堆没用的代码。

与近期放出,这个近期现在看已经近了四个月了,但是依然没放出,这就很棒。

找了另外一套代码:https://github.com/lian112233/OCR-seal

这套代码比上一套代码相对来说诚意多了一些,最起码公开了那个权重文件的下载链接,这个就是最大的进步了。

整个项目一共 3 个文件,看了下代码还以为是基于 tourch 实现的,后来发现里面集成了飞桨以及 yolov5 的相关功能,关键是没有给出虚拟环境要求。这就很麻烦,并且我只需要检测是否包含印章,对于印章文字不关注,所以也就没必要引入飞桨的 ocr 功能。

至于 yolov5,之前也写过几篇文章,感兴趣的可以自己搜,这里之所以不想自己训练了,主要还是懒。

https://github.com/ultralytics/yolov5

克隆三个文件代码之后,克隆 yolov5:

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

到这里 yolov5 的依赖就 ok 了。

至于其他的环境依赖,参考下面的 requirement:

aliyun-python-sdk-core==2.14.0
aliyun-python-sdk-imm==1.24.0
aliyun-python-sdk-kms==2.16.2
Babel==2.14.0
backports.tarfile==1.2.0
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
ci-info==0.3.0
click==8.1.7
configobj==5.0.8
configparser==7.1.0
contourpy==1.2.1
crcmod==1.7
cryptography==42.0.4
cycler==0.12.1
docutils==0.21.2
docxcompose==1.4.0
docxtpl==0.16.7
etelemetry==0.3.1
filelock==3.15.4
fonttools==4.53.1
fsspec==2024.6.1
gitdb==4.0.11
GitPython==3.1.43
httplib2==0.22.0
idna==3.6
importlib_metadata==8.4.0
importlib_resources==6.4.3
isodate==0.6.1
jaraco.classes==3.4.0
jaraco.context==6.0.1
jaraco.functools==4.0.2
Jinja2==3.1.3
jmespath==0.10.0
keyring==25.3.0
kiwisolver==1.4.5
looseversion==1.3.0
lxml==5.1.0
markdown-it-py==3.0.0
MarkupSafe==2.1.5
matplot==0.1.9
matplotlib==3.9.2
mdurl==0.1.2
more-itertools==10.4.0
mpmath==1.3.0
networkx==3.2.1
nh3==0.2.18
nibabel==5.2.1
nipype==1.8.6
numpy==1.26.4
opencv-python==4.10.0.84
oss2==2.18.4
packaging==24.1
pandas==2.2.2
pathlib==1.0.1
pillow==10.4.0
pkginfo==1.10.0
prov==2.0.1
psutil==6.0.0
py-cpuinfo==9.0.0
pycparser==2.21
pycryptodome==3.20.0
pydot==3.0.1
Pygments==2.18.0
pyloco==0.0.139
PyMuPDF==1.24.9
PyMuPDFb==1.24.9
pyparsing==3.1.2
PyPDF2==3.0.1
python-dateutil==2.9.0.post0
python-docx==1.1.0
pytz==2024.1
pyxnat==1.6.2
PyYAML==6.0.2
rdflib==6.3.2
readme_renderer==44.0
requests==2.31.0
requests-toolbelt==1.0.0
rfc3986==2.0.0
rich==13.7.1
scipy==1.13.1
seaborn==0.13.2
simplejson==3.19.3
SimpleWebSocketServer==0.1.2
six==1.16.0
smmap==5.0.1
sympy==1.13.2
thop==0.1.1.post2209072238
torch==2.4.0
torchvision==0.19.0
tqdm==4.66.5
traits==6.3.2
twine==5.1.1
typing==3.7.4.3
typing_extensions==4.9.0
tzdata==2024.1
ultralytics==8.2.79
ultralytics-thop==2.0.5
urllib3==2.2.1
ushlex==0.99.1
websocket-client==1.8.0
zipp==3.20.0

而至于检测部分,也没必要那么复杂,直接新写个方法:

model = torch.hub.load(repo, 'custom', path=model_path,
                           source='local')  # local repo


def predict(source='train',
        repo=repo,
        img_size=640):
    files = []

    if os.path.isdir(source):
        files = sorted([os.path.join(source, x) for x in os.listdir(source)])  # dir
    elif os.path.isfile(source):
        files = [source]

    images = [x for x in files if x.split('.')[-1].lower() in IMG_FORMATS]

    for path in images:
        print("Current pic: " + path)
        img = resize_img(cv2.imread(path), img_size)
        img_name = path.split('/')[-1].split('.')[0]
        result = model(img)
        result_pd = result.pandas()

        xywh = result_pd.xywh[0]
        xyxy = result_pd.xyxy[0]
        # print(result.pandas)
        print('result=', result)
        print(result_pd.names)
        print('xy=', xyxy)
        print('count=',len(xyxy))

实际检测效果:

/Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/venv/bin/Python /Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/stamp_detection.py 
/Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
YOLOv5 🚀 v7.0-356-g2070b303 Python-3.9.6 torch-2.4.0 CPU

Fusing layers... 
YOLOv5m summary: 308 layers, 21037638 parameters, 0 gradients
Adding AutoShape... 
/Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/yolov5/models/common.py:869: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
  with amp.autocast(autocast):
Current pic: /Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/yolov5/test/20240103-182329.jpeg
result= image 1/1: 640x1137 (no detections)
Speed: 1.8ms pre-process, 153.8ms inference, 0.2ms NMS per image at shape (1, 3, 384, 640)
{0: 'stamp'}
count= 0
Current pic: /Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/yolov5/test/WechatIMG5.jpg
/Users/zhongling/PycharmProjects/djangoProject/LaoshanReport/yolov5/models/common.py:869: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
  with amp.autocast(autocast):
result= image 1/1: 640x905 1 stamp
Speed: 1.8ms pre-process, 202.5ms inference, 0.6ms NMS per image at shape (1, 3, 480, 640)
{0: 'stamp'}
count= 1

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://oba.by/
* 个性:https://oba.by/
* 本文标题: 《PDF 进阶之印章识别》
* 本文链接:https://oba.by/2024/08/17876
* 短链接:https://oba.by/?p=17876
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

14 comments

  1. Level 5
    Microsoft Edge 126 Microsoft Edge 126 Windows 10 Windows 10 us美国加利福尼亚州洛杉矶 南宁云计算数据中心机房

    还是电子签章方便些

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Android 10 Android 10 cn山东省青岛市 联通

      的确 不过这个系统接入不了电子签 就得自己处理了

  2.  Level 5
    WebView 4 WebView 4 Android 12 Android 12 cn广东省珠海市 电信

    电子签好像是要走国家法律那块的系统的,不然没有法律效应

  3.  Level 3
    Google Chrome 111 Google Chrome 111 Windows 10 Windows 10 cn上海市 电信

    楼上说的对,电子签章有个小程序还是公立的,要自己提交然后做个记录。等于是个电子戳的性质。

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      嗯嗯,是的。就接触过个人的电子签,企业的电子签没接触过。

  4. Level 2
    Google Chrome 127 Google Chrome 127 Windows 11 Windows 11 cn云南省昆明市 电信

    很多开源项目都是伪开源,挂羊头卖狗肉。readme写的功能齐全,Star还刷得挺高,代码拉下来各种环境一顿配,各种报错一通解决,好不容易运行起来了,一看好家伙啥都没有 dance

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注