【已部署】利用PaddleX静物物品智能识别并使用Vue前端部署

来源:游家吧

该项目是针对涉案人员及其物品保管制度而设计的子项目,它利用目标检测技术识别和登记常见嫌疑人物品,从而加快事件处理速度。使用了张不同条件拍摄的各类物品数据(如背包、手机等),采用VOC格式标注,并通过PaddleX训练YOLOv型,最后将预测结果部署在服务器上。前端采用了Vue进行页面开发,后端则使用Flask框架处理请求和响应。这样的系统能够有效提升事件处理效率并提供实时的物品检测与预测功能。

项目介绍

在我国的涉案人员物品保管制度中明确规定:对涉案人员物品进行登记保存、扣押时,需经单位负责人批准,依法填写涉案人员物品登记保存、扣押决定书和涉案人员物品清单后,方可执行。利用目标检测技术识别和登记常见的嫌疑人物品,是否可以加快事件处理速度?该项目发展成为整个项目的一部分,并将子项目部署开源。

项目已部署至服务器,可以进行访问:http://ai.sqdxwz.com/

部分时候过载严重,如果无法返回结果请刷新重试或者换个时间使用~

项目实现

数据集介绍

数据量:3900+ 数据种类:qian包,水杯,钥匙,手机,包包

所有数据均基于多种型号、不同像素、角度及环境条件下的多幅图像采集记录。涵盖单一物件和组合物件的拍摄情况。

立即学习“前端免费学习笔记(深入)”;

训练准备

In []

!pip install paddlex==2.0rc -q登录后复制

本项目使用的静物检测据集已经按VOC格式进行标注,数据集按照如下方式进行组织:

Dataset/ # 目标检测数据集根目录 |--Annotations/ # 标注文件所在目录 | |--PartA_00000.xml | |--PartB_00000.xml | |--... | |--... |--JPEGImages/ # 原图文件所在目录 | |--PartA_00000.jpg | |--PartB_00000.jpg | |--... | |--... |登录后复制 In []

# 解压数据集文件夹中!unzip -d ./ data/data96807/DatasetId_190936_1624526988.zip登录后复制 In []

# 清理一下jpeg和xml不匹配问题import os,shutil jpeg = 'MyDataset/JPEGImages'jpeg_list = os.listdir(jpeg) anno = 'MyDataset/Annotations'anno_list = os.listdir(anno)for pic in jpeg_list: name = pic.split('.')[0] anno_name = name + '.xml' #print(anno_name) if anno_name not in anno_list: os.remove(os.path.join(jpeg,pic))登录后复制 In []

# 划分数据集!paddlex --split_dataset --format VOC --dataset_dir MyDataset --val_value 0.2 --test_value 0.1登录后复制

- 10-25 21:02:25 [INFO] Dataset split starts... 2021-10-25 21:02:25 [INFO] Dataset split done. 2021-10-25 21:02:25 [INFO] Train samples: 714 2021-10-25 21:02:25 [INFO] Eval samples: 204 2021-10-25 21:02:25 [INFO] Test samples: 102 2021-10-25 21:02:25 [INFO] Split files saved in MyDataset登录后复制

使用paddlex命令即可将数据集随机划分成70%训练集,20%验证集和10%测试集:

划分好的数据集会额外生成labels.txt,train_list.txt,val_list.txt,test_list.txt四个文件,之后可直接进行训练。

模型训练

In []

import paddlex as pdxfrom paddlex import transforms登录后复制 In []

train_transforms = transforms.Compose([ transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(), transforms.Normalize() ]) eval_transforms = transforms.Compose([ transforms.ResizeByShort(short_size=256), transforms.CenterCrop(crop_size=224), transforms.Normalize() ])登录后复制 In []

# 定义训练和验证所用的数据集# API说明:https://github.com/PaddlePaddle/PaddleX/blob/release/2.0-rc/paddlex/cv/datasets/voc.py#L29train_dataset = pdx.datasets.VOCDetection( data_dir='MyDataset', file_list='MyDataset/train_list.txt', label_list='MyDataset/labels.txt', transforms=train_transforms, shuffle=True) eval_dataset = pdx.datasets.VOCDetection( data_dir='MyDataset', file_list='MyDataset/val_list.txt', label_list='MyDataset/labels.txt', transforms=eval_transforms, shuffle=False)登录后复制

- 10-25 21:07:21 [INFO] Starting to read file list from dataset... 2021-10-25 21:07:22 [INFO] 714 samples in file MyDataset/train_list.txt creating index... index created! 2021-10-25 21:07:22 [INFO] Starting to read file list from dataset... 2021-10-25 21:07:22 [INFO] 204 samples in file MyDataset/val_list.txt creating index... index created!登录后复制 In []

# 初始化模型,并进行训练# 可使用VisualDL查看训练指标,参考https://github.com/PaddlePaddle/PaddleX/tree/release/2.0-rc/tutorials/train#visualdl可视化训练指标num_classes = len(train_dataset.labels) model = pdx.models.YOLOv3(num_classes=num_classes, backbone='MobileNetV3_ssld')登录后复制 In [15]

# API说明:https://github.com/PaddlePaddle/PaddleX/blob/release/2.0-rc/paddlex/cv/models/detector.py#L155# 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.htmlmodel.train( num_epochs=300, train_dataset=train_dataset, train_batch_size=8, eval_dataset=eval_dataset, learning_rate=0.001 / 8, warmup_steps=1000, warmup_start_lr=0.0, save_interval_epochs=20, lr_decay_epochs=[216, 243, 275], save_dir='output/yolov3_mobilenet')登录后复制

模型导出

已将模型训练成果存入输出目录,为进行PaddleInference部署,请使用以下步骤导出静态模型:首先,确保模型已在输出目录中;接着,执行命令以生成静态图模型,并自动在output文件夹下创建`inference_model`,此路径可供后续调用。

!paddlex --export_inference --model_dir=output/yolov3_mobilenet/best_model --save_dir=output/inference_model登录后复制

模型预测

In []

import globimport numpy as npimport threadingimport timeimport randomimport osimport base64import cv2import jsonimport paddlex as pdx# 可以修改为自己图片路径image_name = 'MyDataset/JPEGImages/PartB_00234.jpg' model = pdx.load_model('output/yolov3_mobilenet/best_model') img = cv2.imread(image_name) result = model.predict(img) keep_results = [] areas = [] f = open('result.txt','a') count = 0for dt in np.array(result): cname, bbox, score = dt['category'], dt['bbox'], dt['score'] if score < 0.5: continue keep_results.append(dt) count+=1 f.write(str(dt)+'\n') f.write('\n') areas.append(bbox[2] * bbox[3]) areas = np.asarray(areas) sorted_idxs = np.argsort(-areas).tolist() keep_results = [keep_results[k] for k in sorted_idxs] if len(keep_results) > 0 else []print(keep_results)print(count) f.write("the total number is :"+str(int(count))) f.close()登录后复制 In []

pdx.visualize_detection(image_name, result, threshold=0.5, save_dir='./output/yolov3_mobilenet')登录后复制

服务器部署

前端采用Vue,后端使用Flask:https://github.com/Sharpiless/YolovFlask-VUE。修改后端app.py代码,搭配好Paddle服务器的环境;参考百度相关教程,部署至服务器。

部署预测结果

以上就是【已部署】利用PaddleX静物物品智能识别并使用Vue前端部署的详细内容,更多请关注其它相关文章!

精品推荐