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服务,然后从浏览器进入项目目录,找到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" 指定结束时间
打开命令行终端,进入项目目录,运行如下命令:
python3 run.py
或
chmod +x run.py
./run.py
PS:如需在系统重启时运行该服务可以将相关命令写入rc.local文件当中exit 0
之前,rc.local在Ubuntu下的/etc/rc.local。
打开CMD,进入项目目录,运行如下命令:
python run.py
通过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);
}
predictImage
的参数8000为服务的端口,可以在config.py文件中进行配置;"document"
为分类器类别。指定为"document"
或"document_classifier"
都将调用证件分类器,指定为"layout"
或"layout_classifier"
都将调用版面分类器,指定为"type"
或"type_classifier"
都将调用图片内容二分类器;"test_token"
为Token内容,可以在config.py文件中进行设置;"test_data/"
此处可以指定为图片的路径,或所在目录的路径,其根目录可于config.py文件中设置。通过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);
}
predictImage
的参数8000为服务的端口,可以在config.py文件中进行配置;"layout"
为分类器模型文件名称「无扩展名」。指定为"layout"
则调用AreaDetect/models/layout.h5,若指定为"document"
则调用AreaDetect/models/document.h5,以此类推;"test_token"
为Token内容,可以在config.py文件中进行设置;"test_data/"
此处可以指定为图片的路径,或所在目录的路径,其根目录可于config.py文件中设置,如果为图片的路径,则返回json结构的区域信息数组,[[[最高, 最左], [最低, 最右]], [[最高, 最左], [最低, 最右]] ...],如果为图片所在目录,则会在当前目录下生成 'fbs.pkl' 文件,可以运行python3 visualization.py
命令进行可视化。通过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);
}
首先需要训练切片模型,切片模型的训练方式和普通区域检测的训练方式一致,但其训练标注如下:
配置config.json文件
"AREA_DETECT_SLICE_MODEL_DICT": {
"身份证": "slice"
},
其中slice
为对应的切片模型名称「无扩展名」,注意如果采用切片最好设置"DESKEW_NO_BIAS": true,
。
"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,设置为“非文本图片”。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。