OCR文本提取+NER命名实体识别
OCR模型: Umi-ocr
- github地址:https://github.com/hiroi-sora/Umi-OCR
- 平台:windows、linux
- docker部署文档:https://github.com/hiroi-sora/Umi-OCR_runtime_linux/blob/main/README-docker.md
- centos安装docker 当前版本为( 26.1.4)
要查看yum中可安装的Docker版本,可以按照以下步骤操作: 打开终端或命令行界面: 确保你已经登录到你的Linux服务器,并打开了终端或命令行界面。 使用yum list命令列出所有可用的docker版本: bash Copy Code yum list docker-ce --showduplicates | sort -r 这个命令会列出所有可用的Docker CE版本,并按照版本号从高到低排序。--showduplicates选项用于显示所有可用的版本,而sort -r则用于将结果按版本号降序排列。 在输出结果中查找Docker的版本信息: 执行上述命令后,你将看到一系列类似如下的输出: plaintext Copy Code docker-ce.x86_64 3:23.0.0-1.el7 docker-ce-stable docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable ... 每一行代表一个可用的Docker版本,其中docker-ce.x86_64是软件包的名称和架构,3:23.0.0-1.el7是版本号,docker-ce-stable是仓库名称。 安装特定版本的Docker(可选): 如果你决定安装某个特定版本的Docker,可以使用以下命令: bash Copy Code yum install -y docker-ce-<版本号> docker-ce-cli-<版本号> containerd.io 将<版本号>替换为你想要安装的Docker版本号。 查看已安装的Docker版本: 安装完成后,你可以使用以下命令查看已安装的Docker版本: bash Copy Code docker --version 这样,你就可以通过yum查看并安装特定版本的Docker了。
Dockerfile内容# Umi-OCR Docker # https://github.com/hiroi-sora/Umi-OCR # https://github.com/hiroi-sora/Umi-OCR_runtime_linux FROM debian:11-slim LABEL app="Umi-OCR-Paddle" LABEL maintainer="hiroi-sora" LABEL version="2.1.5" LABEL description="OCR software, free and offline." LABEL license="MIT" LABEL org.opencontainers.image.source="https://github.com/hiroi-sora/Umi-OCR_runtime_linux" # 安装所需工具和QT依赖库 RUN apt-get update && apt-get install -y \ && wget xz-utils ttf-wqy-microhei xvfb \ libglib2.0-0 libgssapi-krb5-2 libgl1-mesa-glx libfontconfig1 \ libfreetype6 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \ libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-xkb1 \ libxcb-xinerama0 libxkbcommon-x11-0 libxkbcommon0 libdbus-1-3 \ && rm -rf /var/lib/apt/lists/*
# 工作目录 WORKDIR /app # 可选1:将主机目录中的发行包,复制到容器内 COPY Umi-OCR_Linux_Paddle_2.1.5.tar.xz . # 可选2:在线下载发行包 RUN wget https://github.com/hiroi-sora/Umi-OCR/releases/download/v2.1.5/Umi-OCR_Linux_Paddle_2.1.5.tar.xz # 解压压缩包,移动文件,删除多余的目录和压缩包 RUN tar -v -xf Umi-OCR_Linux_Paddle_2.1.5.tar.xz && \ mv Umi-OCR_Linux_Paddle_2.1.5/* . && \ rmdir Umi-OCR_Linux_Paddle_2.1.5 && \ rm Umi-OCR_Linux_Paddle_2.1.5.tar.xz # 下载最新的启动脚本 # RUN wget -O umi-ocr.sh https://raw.githubusercontent.com/hiroi-sora/Umi-OCR_runtime_linux/main/umi-ocr.sh # 写入 Umi-OCR 预配置项: # 允许外部HTTP请求 # 切换到支持中文的字体 RUN printf "\ [Global]\n\ server.host=0.0.0.0\n\ ui.fontFamily=WenQuanYi Micro Hei\n\ ui.dataFontFamily=WenQuanYi Micro Hei\n\ " > ./UmiOCR-data/.settings # 运行指令 ENTRYPOINT ["/app/umi-ocr.sh"] - 由于网络问题可以手动下载源码,并修改dockerfile文件 (可选1:将主机目录中的发行包,复制到容器内)
- docker设置国内镜像源
/etc/docker/daemon.json -
https://docker.xuanyuan.me源可以下载
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.xuanyuan.me"] } - 保存文件,重启docker
sudo systemctl daemon-reload sudo systemctl restart docker
- 构建镜像
docker build -t umi-ocr-paddle .
- 启动容器
docker run -d --name umi-ocr \ -e HEADLESS=true \ -p 1224:1224 \ umi-ocr-paddle
NER模型
- 名称:bert-base-chinese
- 国内模型下载地址:https://modelscope.cn/
- docker基础镜像:https://modelscope.cn/docs/intro/environment-setup
功能:
判断字符串是否为地址(模型+正则)
- 拉取基础镜像
docker pull modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.29.0
- 创建容器
sudo docker run -it --name=address_recognition modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.29.0 /bin/bash
- 下载模型
cd /home
modelscope download --model tiansz/bert-base-chinese --local_dir bert-base-chinese - docker部署
创建文件app.py、uwsgi.ini、dockerfile
创建镜像
Docker 会缓存每一层(Layer),如果某一层的指令和上下文(如文件内容)与之前完全一致,Docker 会直接复用缓存的层,跳过执行该指令,使用 --no-cache 参数强制 Docker 忽略缓存,从头开始构建
docker build --no-cache -t bert-base-chinese .启动容器
docker run -d --name address_recognition -p 8090:8090 bert-base-chineseapp.py代码
import re from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks from flask import Flask, request, jsonify app = Flask(__name__) # 正则匹配(正则匹配容易造成匹配不到) def is_address_regex(text): pattern = r'.*?(?:省|市|自治区|特别行政区|市辖区|市|路|街|大道|巷|道|村|镇|乡|公司|门|园|口)' print("is_address_regex") return bool(re.search(pattern, text)) # NER模型判断 # 加载本地模型(需提前下载) ner_pipeline = pipeline( task=Tasks.token_classification, model='/home/bert-base-chinese/' ) def is_address_ner(text): entities = ner_pipeline(text) address_keywords = {"B-LOC", "I-LOC"} print("is_address_ner") print(entities) return any(e["entity"] in address_keywords for e in entities) # 综合判断 @app.route('/') def is_address(): try: text = request.args.get('text', '') text_is_address = is_address_regex(text) or is_address_ner(text) if text_is_address: return jsonify({"code": "1", "message": "success"}) else: raise Exception("非地址信息") except Exception as e: return jsonify({"code": "0", "message": str(e)}) if __name__ == '__main__': app.run()
uwsgi.ini[uwsgi] # Ubuntu系统下默认用户名 uid=root # Ubuntu系统下默认用户组 gid=root # 项目名 project=address_recognition # 项目根目录 base=/home # 设置工作目录 chdir=%(base) # wsgi 文件地址 # module=%(base)/app.py wsgi-file=app.py callable=app # 主进程 master = true # 进程数量 process=1 # 使用tcp socket与nginx进行通信 http=0.0.0.0:8090
dockerfile
FROM modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.29.0 LABEL app="bert-base-chinese" LABEL version="1" LABEL description="NER bert-base-chinese" # 安装所需工具和QT依赖库 RUN apt-get update && \ pip install Flask && \ pip install uwsgi # 工作目录 WORKDIR /home # 下载模型 RUN modelscope download --model tiansz/bert-base-chinese --local_dir bert-base-chinese # 可选1:将主机目录中的发行包,复制到容器内 COPY app.py . COPY uwsgi.ini . # 运行指令 CMD ["uwsgi", "--ini", "uwsgi.ini"]
- 创建镜像并启动容器
docker build -t address_recognition . docker run -d -p 8090:8090 --name address_recognition address_recognition
后台启动服务:sudo nohup python app.py &

浙公网安备 33010602011771号