1 Star 0 Fork 0

huangfyb / ai

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

图片分类器&区域检测器服务部署与使用说明

第一步、搭建环境

依赖

  • Python3
  • Pillow
  • OpenCV
  • Numpy
  • Scipy
  • Scikit-Image
  • Tensorflow
  • Keras
  • Flask
  • Gevent
  • Fire
  • Jupyter(可选,纯命令行操作无需安装)
  • Pydot(可选,仅需要在Jupyter中可视化模型结构使用)
  • Matplotlib(可选,仅需要在Jupyter中显示误判样本使用)

安装方法

pip install pillow numpy scipy scikit-image opencv-python==3.4.0.12 tensorflow==1.9.0 keras flask gevent fire jupyter pydot matplotlib jieba tqdm

注意:如系统中同时存在pip2,pip3则需要将pip改为pip3以指明版本。

第二步、训练模型

方法一、使用Jupyter-notebook训练模型

打开Jupyter-notebook服务,然后从浏览器进入项目目录,找到Training×××.ipynb文件「例如:TrainingDocumentClassifier.ipynb」将其中的USE_TRAINING = False改为USE_TRAINING = True,重新运行即可生成模型数据。

方法二、使用命令行工具训练模型

进入命令行并来到training×××.py同一目录下,运行命令python3 training×××.py -t即可训练模型,也可以通过python3 training×××.py --help查看帮助文档,操作示范如下:

cd ai/DocumentClassifier
python3 trainingdocumentclassifier.py --help # 查看帮助信息

方法三、使用综合训练工具

python3 trainshell.py --help # 查看帮助信息
python3 trainshell.py areadetect --help # 查看帮助信息
python3 trainshell.py areadetect AreaDetect/test_data/business_license_data/ AreaDetect/test_data/business_license_label/ "[255, 0, 0]" tmp/business_license_ad.h5 --time="21:43" # "[255, 0, 0]" 指定颜色,--time="21:43" 指定结束时间

第三步、运行服务

Linux下

打开命令行终端,进入项目目录,运行如下命令:

python3 run.py

chmod +x run.py
./run.py

PS:如需在系统重启时运行该服务可以将相关命令写入rc.local文件当中exit 0之前,rc.local在Ubuntu下的/etc/rc.local。

Windows下

打开CMD,进入项目目录,运行如下命令:

python run.py

第四步、调用服务

分类器调用「列举Java」

通过API端点 http://< your ip >:< port >/< clf name >/< token >/< path > 调用服务,其中本机访问的 IP 为127.0.0.1;port 为端口号,默认为8000;clf name 为需要调用的分类器名称;token 默认为 test_token;path 可以是图片文件地址,也可以是图片所在目录。

Demo源代码在 ai/demo/ImageClassifierClient.java

    public static void main(String[] args) {
        ImageClassifierClient icc = new ImageClassifierClient();
        String json = icc.predictImage(8000, "document",
                "test_token", "test_data/");
        System.out.printf(json);
    }
  1. 其中predictImage的参数8000为服务的端口,可以在config.py文件中进行配置;
  2. "document"为分类器类别。指定为"document""document_classifier"都将调用证件分类器,指定为"layout""layout_classifier"都将调用版面分类器,指定为"type""type_classifier"都将调用图片内容二分类器;
  3. "test_token"为Token内容,可以在config.py文件中进行设置;
  4. "test_data/"此处可以指定为图片的路径,或所在目录的路径,其根目录可于config.py文件中设置。

区域检测调用「列举Java」

通过API端点 http://< your ip >:< port >/detect_area/< model name >/< token >/< path > 调用服务,其中本机访问的 IP 为127.0.0.1;port 为端口号,默认为8000;model name 为需要调用的模型名称,注意: 该名称为模型文件名去除扩展名后的值;token 默认为 test_token;path 可以是图片文件地址,也可以是图片所在目录。

Demo源代码在 ai/demo/AreaDetectClient.java

    public static void main(String[] args) {
        AreaDetectClient adc = new AreaDetectClient();
        String json = adc.predictImage(8000,
                "layout", "test_token", "test_data/");
        System.out.printf(json);
    }
  1. 其中predictImage的参数8000为服务的端口,可以在config.py文件中进行配置;
  2. "layout"为分类器模型文件名称「无扩展名」。指定为"layout"则调用AreaDetect/models/layout.h5,若指定为"document"则调用AreaDetect/models/document.h5,以此类推;
  3. "test_token"为Token内容,可以在config.py文件中进行设置;
  4. "test_data/"此处可以指定为图片的路径,或所在目录的路径,其根目录可于config.py文件中设置,如果为图片的路径,则返回json结构的区域信息数组,[[[最高, 最左], [最低, 最右]], [[最高, 最左], [最低, 最右]] ...],如果为图片所在目录,则会在当前目录下生成 'fbs.pkl' 文件,可以运行python3 visualization.py命令进行可视化。

完整流水线操作「列举Java」

通过API端点 http://< your ip >:< port >/full/< token >/< path > 调用服务,其中本机访问的 IP 为127.0.0.1;port 为端口号,默认为8000;token 默认为 test_token;path 可以是图片文件地址,也可以是图片所在目录。

Demo源代码在 ai/demo/FullPipelineClient.java

    public static void main(String[] args) {
        FullPipelineClient fpc = new FullPipelineClient();
        String json = fpc.predictImage(8000,
                "test_token", "test_data/");
        System.out.printf(json);
    }
区域检测切片
  1. 首先需要训练切片模型,切片模型的训练方式和普通区域检测的训练方式一致,但其训练标注如下:

  2. 配置config.json文件

	"AREA_DETECT_SLICE_MODEL_DICT": {
		"身份证": "slice"
	},

其中slice为对应的切片模型名称「无扩展名」,注意如果采用切片最好设置"DESKEW_NO_BIAS": true,

  1. 运行服务,并调用完整流水线操作进行检测,如果顺利,则会得到如下内容:

附加说明

"USE_SLICE_DESKEW": true用于控制是否在切图后采用矫偏

如需要使用--monitor发送状态信息,需要使用--time进行定时

"EXT_DOCUMENT_LAYOUT_BRANCH": true用于指定是否在图片被判断为证件后仍检测版面信息,默认为是。当启用时,若检测为证件信息后会将其版面区域检测的结果(原本的Boxs)保存到LayoutBoxs当中

finderrorimgs.py 用法举例: /finderrorimgs.py DocumentClassifier/model2.h5 DocumentClassifier/model2.pkl test_data/idcard/ 身份证 参数分别为模型文件名,标签文件名,图片目录,真实类型名称,运行结束会在当前目录生成error_image.csv文本文件

召回系统

	"RECALL_MODELS_DIR": "Recall/models/", # 指定召回系统模型目录
	"CHI_SIM": "chi_sim.txt", # 如启用NLP召回模型则需要指定中文字符集目录
    # 指定Document Classifier检测后应该启用的召回模型,
    # 例如:当识别为发票时启用召回系统模型目录下名为 test2 的模型(无扩展名)
	"RECALL": {
		"发票": "test2"
	}

注意:召回系统分为视觉系统和语言系统,语言系统的训练工具仍在开发当中,视觉系统的训练已经集成到了trainshell recallclf 当中。

移除TypeClassifier测试注意事项:config.json当中的 TEXT_IMAGE 改为了 NON_TEXT_IMAGE,设置为“非文本图片”。

推荐视频

参考文献

空文件

简介

暂无描述 展开 收起
Python
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/huangfyb/ai.git
git@gitee.com:huangfyb/ai.git
huangfyb
ai
ai
master

搜索帮助