Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

目的

全网的身份z识别大部分都是通过识别整张图片,然后再对数据进行格式化解析,这会照成很大的局限性,比如非摆正图片,图片上有其他干扰信息,这就会导致通过此方式来识别大大降低了准确率和不确定性。这篇文章将会通过专业性角度来讲解如何更好的进行相关卡证的识别。

准备工作

在进行讲解之前,需要先做好以下准备:

1、安装PyCharm进行开发,Download PyCharm: Python IDE for Professional Developers by JetBrains

2、下载relese/2.4版本的PaddleOCR,git clone -b release/2.4 https://github.com/PaddlePaddle/PaddleOCR.git

3、学习此篇文章【基于PaddleOCR的DBnet多分类文本检测网络】,这里就用到了多分类文本检测网络来达到我们的需求。

实现识别

1、数据集格式

分类文本:前六个分类是身份z正面,后两个分类是身份z背面

 

2、修改配置

数据集分两部分,一部分是真实数据,另一部分是合成数据。

注:Eval.transforms.DetResizeForTest设置resize_long: 960

Global:
  ...
  label_list: "train_data/sfz/label_list.txt" #新增一个分类文件
  num_classes: 8    # 新增一个分类数量
 
...
 
Train:
  dataset:
    name: SimpleDataSet
    data_dir: train_data/sfz/
    label_file_list:
      - "train_data/sfz/real/real_det_train.txt"
      - "train_data/sfz/shenfenzheng/det_train.txt"
    ratio_list: [ 1.0 , 0.2 ]
    ...
    transforms:
      ...
      - KeepKeys:
          keep_keys: [ 'image', 'threshold_map', 'threshold_mask', 'shrink_map', 'shrink_mask', 'class_mask' ] # 新增一个class_mask
    ...
 
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: train_data/sfz/
    label_file_list:
      - "train_data/sfz/real/real_det_test.txt"
      - "train_data/sfz/shenfenzheng/det_test.txt"
    ratio_list: [ 1.0 , 0.2 ]
  transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - DetLabelEncode: # Class handling label
      - DetResizeForTest:
          resize_long: 960
    ...

3、执行命令进行GPU训练

python -m paddle.distributed.launch --gpus 0 tools/train.py -o Global.use_visualdl=True -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml

4、显示运行图

从图上可以看到多出一个多分类loss_classes 运行图,根据本数据集测试,hmean的值可达到99%以上。

5、验证模型

调整infer_det.py绘制代码,添加文本显示。

def draw_det_res_and_label(dt_boxes, classes, config, img, img_name, save_path):
    label_list = config["Global"]["label_list"]
    labels = []
    if label_list is not None:
        if isinstance(label_list, str):
            with open(label_list, "r+", encoding="utf-8") as f:
                for line in f.readlines():
                    labels.append(line.replace("\n", ""))
        else:
            labels = label_list
    if len(dt_boxes) > 0:
        import cv2
        index = 0
        src_im = img
        for box in dt_boxes:
            box = box.astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)

            font = cv2.FONT_HERSHEY_SIMPLEX
            src_im = cv2.putText(src_im, labels[classes[index]], (box[0][0][0], box[0][0][1]), font, 0.5, (255, 0, 0), 1)
            index += 1
        if not os.path.exists(save_path):
            os.makedirs(save_path)
        save_path = os.path.join(save_path, os.path.basename(img_name))
        cv2.imwrite(save_path, src_im)
        logger.info("The detected Image saved in {}".format(save_path))
python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml -o Global.pretrained_model=./output/ch_db_mv3_sfz/best_accuracy Global.infer_img=E:\dataset\shenfenzheng\images\detpython tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml -o Global.pretrained_model="./output/ch_db_mv3_sfz/best_accuracy" Global.save
_inference_dir="./inference/ch_db_mv3_sfz/"1.png

 

 6、导出模型

[+++]

模型非常小,仅仅比没有分类文本检测模型大一点点。

小结

到这一步,身份z多分类检测模型就完成了,测试效果非常好,再配合PaddleOCR本身的文字检测和识别功能,可达到非常好的效果,完全可达到商业级别,欢迎大家下载测试。

模型下载地址:山月记分享

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
基于DBNet多分类实现高精度小模型身份z识别_java_内存溢出

基于DBNet多分类实现高精度小模型身份z识别

基于DBNet多分类实现高精度小模型身份z识别,第1张

目的

全网的身份z识别大部分都是通过识别整张图片,然后再对数据进行格式化解析,这会照成很大的局限性,比如非摆正图片,图片上有其他干扰信息,这就会导致通过此方式来识别大大降低了准确率和不确定性。这篇文章将会通过专业性角度来讲解如何更好的进行相关卡证的识别。

准备工作

在进行讲解之前,需要先做好以下准备:

1、安装PyCharm进行开发,Download PyCharm: Python IDE for Professional Developers by JetBrains

2、下载relese/2.4版本的PaddleOCR,git clone -b release/2.4 https://github.com/PaddlePaddle/PaddleOCR.git

3、学习此篇文章【基于PaddleOCR的DBnet多分类文本检测网络】,这里就用到了多分类文本检测网络来达到我们的需求。

实现识别

1、数据集格式

分类文本:前六个分类是身份z正面,后两个分类是身份z背面

 

2、修改配置

数据集分两部分,一部分是真实数据,另一部分是合成数据。

注:Eval.transforms.DetResizeForTest设置resize_long: 960

Global:
  ...
  label_list: "train_data/sfz/label_list.txt" #新增一个分类文件
  num_classes: 8    # 新增一个分类数量
 
...
 
Train:
  dataset:
    name: SimpleDataSet
    data_dir: train_data/sfz/
    label_file_list:
      - "train_data/sfz/real/real_det_train.txt"
      - "train_data/sfz/shenfenzheng/det_train.txt"
    ratio_list: [ 1.0 , 0.2 ]
    ...
    transforms:
      ...
      - KeepKeys:
          keep_keys: [ 'image', 'threshold_map', 'threshold_mask', 'shrink_map', 'shrink_mask', 'class_mask' ] # 新增一个class_mask
    ...
 
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: train_data/sfz/
    label_file_list:
      - "train_data/sfz/real/real_det_test.txt"
      - "train_data/sfz/shenfenzheng/det_test.txt"
    ratio_list: [ 1.0 , 0.2 ]
  transforms:
      - DecodeImage: # load image
          img_mode: BGR
          channel_first: False
      - DetLabelEncode: # Class handling label
      - DetResizeForTest:
          resize_long: 960
    ...

3、执行命令进行GPU训练

python -m paddle.distributed.launch --gpus 0 tools/train.py -o Global.use_visualdl=True -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml

4、显示运行图

从图上可以看到多出一个多分类loss_classes 运行图,根据本数据集测试,hmean的值可达到99%以上。

5、验证模型

调整infer_det.py绘制代码,添加文本显示。

def draw_det_res_and_label(dt_boxes, classes, config, img, img_name, save_path):
    label_list = config["Global"]["label_list"]
    labels = []
    if label_list is not None:
        if isinstance(label_list, str):
            with open(label_list, "r+", encoding="utf-8") as f:
                for line in f.readlines():
                    labels.append(line.replace("\n", ""))
        else:
            labels = label_list
    if len(dt_boxes) > 0:
        import cv2
        index = 0
        src_im = img
        for box in dt_boxes:
            box = box.astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2)

            font = cv2.FONT_HERSHEY_SIMPLEX
            src_im = cv2.putText(src_im, labels[classes[index]], (box[0][0][0], box[0][0][1]), font, 0.5, (255, 0, 0), 1)
            index += 1
        if not os.path.exists(save_path):
            os.makedirs(save_path)
        save_path = os.path.join(save_path, os.path.basename(img_name))
        cv2.imwrite(save_path, src_im)
        logger.info("The detected Image saved in {}".format(save_path))
python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml -o Global.pretrained_model=./output/ch_db_mv3_sfz/best_accuracy Global.infer_img=E:\dataset\shenfenzheng\images\detpython tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_sfz.yml -o Global.pretrained_model="./output/ch_db_mv3_sfz/best_accuracy" Global.save
_inference_dir="./inference/ch_db_mv3_sfz/"1.png

 

 6、导出模型

 

模型非常小,仅仅比没有分类文本检测模型大一点点。

小结

到这一步,身份z多分类检测模型就完成了,测试效果非常好,再配合PaddleOCR本身的文字检测和识别功能,可达到非常好的效果,完全可达到商业级别,欢迎大家下载测试。

模型下载地址:山月记分享

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/800796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存