Exemple #1
0
from paddlex.cls import transforms
import paddlex
import cv2

base = './data'

train_transforms = transforms.Compose([
    transforms.ResizeByShort(256),
    transforms.RandomCrop(crop_size=224),
    transforms.RandomRotate(rotate_range=30, prob=0.5),
    transforms.RandomDistort(),
    transforms.Normalize()
])

train_dataset = paddlex.datasets.ImageNet(data_dir=base,
                                          file_list='train_list.txt',
                                          label_list='labels.txt',
                                          transforms=train_transforms,
                                          shuffle=True)

model = paddlex.load_model('weights/final')
im = cv2.imread('test.jpg')

print(model.evaluate(eval_dataset=train_dataset))
def garbage_test():
    cap = cv2.VideoCapture(0)  # 打开摄像头

    # #形态学操作需要使用,获取一个3x3的卷积核
    # kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
    # #创建混合高斯模型用于背景建模

    # fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows = False)

    #     img_back=cv2.imread('/home/thomas/下载/QQ图片20201211233654.png')

    while (1):
        # get a frame
        ret, frame = cap.read()
        frame = cv2.flip(frame, 1)  # 摄像头是和人对立的,将图像左右调换回来正常显示
        # # fgmask= fgbg.apply(frame)

        # rows, cols, channels = frame.shape

        # lower_color = np.array([95, 95, 95])
        # # lower_color = np.array([254, 254, 254])
        # # upper_color = np.array([255, 255, 255])
        # upper_color = np.array([150, 165, 165])
        # # 创建掩图
        # fgmask = cv2.inRange(frame, lower_color, upper_color)
        # # cv2.imshow('Mask', fgmask)

        # # 腐蚀膨胀
        # erode = cv2.erode(fgmask, None, iterations=1)
        # # cv2.imshow('erode', erode)
        # dilate = cv2.dilate(erode, None, iterations=1)
        # # cv2.imshow('dilate', dilate)

        # rows, cols = dilate.shape

        # img_back=img_back[0:rows,0:cols]

        # # print(img_back)

        # # #根据掩图和原图进行抠图

        # img2_fg = cv2.bitwise_and(img_back, img_back, mask=dilate)
        # Mask_inv = cv2.bitwise_not(dilate)

        # img3_fg = cv2.bitwise_and(frame, frame, mask=Mask_inv)
        # finalImg=img2_fg+img3_fg
        # cv2.imshow('res', finalImg)

        # show a frame

        cv2.imshow("capture", frame)  # 生成摄像头窗口

        if cv2.waitKey(1) & 0xFF == ord('q'):  # 如果按下q 就截图保存并退出dd

            # cv2.imwrite("test.jpg", finalImg)  # 保存路径
            cv2.imwrite("test.jpg", frame)  # 保存路径

            break

    cap.release()

    model = pdx.load_model(
        '/home/thomas/python/paddle/PaddleDetection/output/ResNet50_vd_ssld/best_model'
    )

    image_name = '/home/thomas/python/test.jpg'

    result = model.predict(image_name)

    return result
Exemple #3
0
base = './data/'

import paddlex as pdx
from paddlex.det import transforms

INTERACTIVE = True
WRITE_CSV = True
USE_YOLO = False
if USE_YOLO:
    eval_transforms = transforms.Compose([
        transforms.Resize(
            target_size=608, interp='CUBIC'), transforms.Normalize()
    ])

    model = pdx.load_model('./PPYOLO/best_model')
else:
    eval_transforms = transforms.Compose([
        transforms.Normalize(),
        transforms.ResizeByShort(short_size=800, max_size=1333),
        transforms.Padding(coarsest_stride=32), ])
    model = pdx.load_model('./models/det/FasterRCNN/epoch_48')
evaluator = CsvEvalWriter()
loop_gen = ((pdx.datasets.VOCDetection(
    data_dir=base,
    file_list=k,
    transforms=eval_transforms,
    label_list='./data/labels.txt'), v) for k, v in [
('data/MOT20/train/MOT20-03/manifest.txt', 'MOT20-03.txt'),
    ('data/MOT20/train/MOT20-01/manifest.txt', 'MOT20-01.txt'),
    ('data/MOT20/train/MOT20-02/manifest.txt', 'MOT20-02.txt'),
Exemple #4
0
def toPic():
    model = pdx.load_model(os.path.join(log, 'best_model'))
    for x, y in test_dataset.file_list:
        result = model.predict(x)
        pdx.seg.visualize(x, result, weight=0.4, save_dir=log)
        break
Exemple #5
0
                    help="视频存放路径")
parser.add_argument("-o",
                    "--output",
                    type=str,
                    default="/home/aistudio/test/frame",
                    help="结果帧存放路径")
parser.add_argument("-m",
                    "--model",
                    type=str,
                    default="/home/aistudio/plane/gear/output/yolov3/epoch_20",
                    help="起落架检测模型路径")
parser.add_argument("--itv", type=int, default=8, help="人进入起落架区域,抽帧间隔")
args = parser.parse_args()

people_det = hub.Module(name="yolov3_resnet50_vd_coco2017")
flg_det = pdx.load_model(args.model)
transforms = transforms.Compose([transforms.Resize(), transforms.Normalize()])

# 坐标的顺序是按照crop时下标的顺序,坐标第一个就是下标第一维,cv2里面的应该和这个是反的


def toint(l):
    return [int(x) for x in l]


def crop(img, p, mode="max"):
    if mode == "max":
        return img[p[0]:p[2], p[1]:p[3], :]
    elif mode == "length":
        p = toint([p[0], p[1], p[0] + p[2], p[1] + p[3]])
        return crop(img, p)
Exemple #6
0
def main():
    import os
    os.environ['CUDA_VISIBLE_DEVICES'] = ""

    import paddlex as pdx

    if len(sys.argv) < 2:
        print("Use command 'paddlex -h` to print the help information\n")
        return
    parser = arg_parser()
    args = parser.parse_args()

    if args.version:
        print("PaddleX-{}".format(pdx.__version__))
        print("Repo: https://github.com/PaddlePaddle/PaddleX.git")
        print("Email: [email protected]")
        return

    if args.export_inference:
        assert args.model_dir is not None, "--model_dir should be defined while exporting Model model"
        assert args.save_dir is not None, "--save_dir should be defined to save Model model"

        fixed_input_shape = None
        if args.fixed_input_shape is not None:
            fixed_input_shape = eval(args.fixed_input_shape)
            assert len(
                fixed_input_shape
            ) == 2, "len of fixed input shape must == 2, such as [224,224]"
        else:
            fixed_input_shape = None

        model = pdx.load_model(args.model_dir, fixed_input_shape)
        model.export_inference_model(args.save_dir)

    if args.export_onnx:
        assert args.model_dir is not None, "--model_dir should be defined while exporting onnx model"
        assert args.save_dir is not None, "--save_dir should be defined to create onnx model"

        model = pdx.load_model(args.model_dir)

        if model.status == "Normal" or model.status == "Prune":
            logging.error(
                "Only support Model model, try to export model first as below,",
                exit=False)
            logging.error(
                "paddlex --export_inference --model_dir model_path --save_dir infer_model"
            )
        save_file = os.path.join(args.save_dir, 'paddle2onnx_model.onnx')
        pdx.converter.export_onnx_model(model, save_file, args.onnx_opset)

    if args.data_conversion:
        assert args.source is not None, "--source should be defined while converting dataset"
        assert args.to is not None, "--to should be defined to confirm the taregt dataset format"
        assert args.pics is not None, "--pics should be defined to confirm the pictures path"
        assert args.annotations is not None, "--annotations should be defined to confirm the annotations path"
        assert args.save_dir is not None, "--save_dir should be defined to store taregt dataset"
        if args.source not in ['labelme', 'jingling', 'easydata']:
            logging.error(
                "The source format {} is not one of labelme/jingling/easydata".
                format(args.source),
                exit=False)
        if args.to not in ['PascalVOC', 'MSCOCO', 'SEG', 'ImageNet']:
            logging.error(
                "The to format {} is not one of PascalVOC/MSCOCO/SEG/ImageNet".
                format(args.to),
                exit=False)
        if args.source == 'labelme' and args.to == 'ImageNet':
            logging.error(
                "The labelme dataset can not convert to the ImageNet dataset.",
                exit=False)
        if args.source == 'jingling' and args.to == 'PascalVOC':
            logging.error(
                "The jingling dataset can not convert to the PascalVOC dataset.",
                exit=False)
        if not osp.exists(args.save_dir):
            os.makedirs(args.save_dir)
        pdx.tools.convert.dataset_conversion(args.source, args.to, args.pics,
                                             args.annotations, args.save_dir)

    if args.split_dataset:
        assert args.dataset_dir is not None, "--dataset_dir should be defined while spliting dataset"
        assert args.format is not None, "--format should be defined while spliting dataset"
        assert args.val_value is not None, "--val_value should be defined while spliting dataset"

        dataset_dir = args.dataset_dir
        dataset_format = args.format.lower()
        val_value = float(args.val_value)
        test_value = float(args.test_value
                           if args.test_value is not None else 0)
        save_dir = dataset_dir

        if not dataset_format in ["coco", "imagenet", "voc", "seg"]:
            logging.error(
                "The dataset format is not correct defined.(support COCO/ImageNet/VOC/Seg)"
            )
        if not osp.exists(dataset_dir):
            logging.error("The path of dataset to be splited doesn't exist.")
        if val_value <= 0 or val_value >= 1 or test_value < 0 or test_value >= 1 or val_value + test_value >= 1:
            logging.error("The value of split is not correct.")

        pdx.tools.split.dataset_split(dataset_dir, dataset_format, val_value,
                                      test_value, save_dir)
Exemple #7
0
def test():
    import paddlex as pdx
    model = pdx.load_model(f'{output_dir}/mobilenetv2/best_model')
    image_name = f'{data_dir}/vegetables_cls/bocai/100.jpg'
    result = model.predict(image_name)
    print("Predict Result:", result)
import paddlex as pdx
import os
import cv2

pic_index = 25

# 获取测试文件名
test_path = 'steel/test_list.txt'
f = open(test_path)
lines = f.readlines()
imgname = os.path.basename(lines[pic_index].split(' ')[0])
labelname = os.path.basename(lines[pic_index].split(' ')[1])
labelname = labelname.replace('\n', '')
f.close()

# 加载模型并预测
image_path = os.path.join('steel/JPEGImages', imgname)
model = pdx.load_model('output/hrnet/best_model')
result = model.predict(image_path)
pdx.seg.visualize(image_path, result, weight=0.4, save_dir='output/predict')

# 输出ground truth
label_path = os.path.join('steel/Annotations', labelname)
mask = cv2.imread(label_path, cv2.IMREAD_GRAYSCALE)
gt = {'label_map': mask}
pdx.seg.visualize(image_path, gt, weight=0.4, save_dir='output/gt')
import paddlex as pdx
import cv2

gige2modelPath = "./yolov3_mobilenetv1_coco"

model_gige2 = pdx.load_model(gige2modelPath)

img = cv2.imread("./Image_20201206195514944.bmp")
print(img.shape)

# gige1Img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

results1 = model_gige2.predict(img)

pdx.det.visualize(img, results1, threshold=0.1, save_dir='./')

print(results1)
Exemple #10
0
from paddlex.det import transforms
import paddlex as pdx

from deep_sort import DeepSort

yolov3 = {'transforms': None, 'model': None, 'data_source': None}

faster_rcnn = {
    'transforms':
    transforms.Compose([
        transforms.Normalize(),
        transforms.ResizeByShort(short_size=800, max_size=1333),
        transforms.Padding(coarsest_stride=32),
    ]),
    'model':
    pdx.load_model('./models/det/FasterRCNN/best_model'),
    'data_source':
    pdx.datasets.VOCDetection(
        data_dir='./data/',
        file_list='data/MOT20/train/MOT20-01/manifest.txt',
        label_list='./data/labels.txt',
        transforms=transforms.Compose([
            transforms.Normalize(),
            transforms.ResizeByShort(short_size=800, max_size=1333),
            transforms.Padding(coarsest_stride=32),
        ])).file_list,
    'tracker':
    DeepSort('models/deep_sort/checkpoint_static/net', n_init=2)
}
Exemple #11
0
import paddlex as pdx
from paddlex.det import transforms

model = pdx.load_model('output/yolov3/epoch_40')
image_name = '/home/aistudio/data/data67498/DatasetId_152881_1610856374/Images/1.png'
transforms = transforms.Compose([transforms.Resize(), transforms.Normalize()])

# transforms = transforms.Compose([transforms.ComposedYOLOv3Transforms()])

# result = model.predict(image_name, transforms=transforms)

result = model.batch_predict([], transforms=transforms)

print(result)
pdx.det.visualize(image_name,
                  result,
                  threshold=0.001,
                  save_dir='./output/plane_lg')
'''
Transforms:
- Resize:
    interp: CUBIC
    target_size: 608
- Normalize:
    mean:
    - 0.485
    - 0.456
    - 0.406
    std:
    - 0.229
    - 0.224
Exemple #12
0
import os

import paddlex as pdx
from paddlex.det import transforms

rcnn_eval_transforms = transforms.Compose([
    transforms.Normalize(),
    transforms.ResizeByShort(short_size=800, max_size=1333),
    transforms.Padding(coarsest_stride=32),
])
rcnn_model = pdx.load_model('./FasterRCNN/best_model')

yolo_eval_transforms = transforms.Compose([
    transforms.Resize(target_size=512, interp='CUBIC'),
    transforms.Normalize(),
])
yolo_model = pdx.load_model('./YOLOv3/best_model')
print(
    rcnn_model.evaluate(
        pdx.datasets.VOCDetection(data_dir='./data',
                                  file_list=os.path.join(
                                      './data', 'valid.txt'),
                                  transforms=rcnn_eval_transforms,
                                  label_list='./data/labels.txt'), 16))
print(
    yolo_model.evaluate(
        pdx.datasets.VOCDetection(data_dir='./data',
                                  file_list=os.path.join(
                                      './data', 'valid.txt'),
                                  transforms=yolo_eval_transforms,
                                  label_list='./data/labels.txt'), 16))
Exemple #13
0
import paddlex as pdx
from paddlex.det import transforms

INTERACTIVE = False
WRITE_CSV = True
eval_transforms = transforms.Compose([
    transforms.Resize(target_size=512, interp='CUBIC'),
    transforms.Normalize(),
])
eval_dataset = pdx.datasets.VOCDetection(
    data_dir=base,
    file_list=os.path.join(base, 'valid_all_1.txt'),
    label_list='./data/labels.txt')

model = pdx.load_model('./YOLOv3/best_model')
evaluator = CsvEvalWriter()
for i in tqdm(eval_dataset.file_list):
    image_name = i[0]
    start = time.time()
    result = model.predict(image_name)
    # print('infer time:{:.6f}s'.format(time.time()-start))
    # print('detected num:', len(result))
    # paddle.disable_static()
    im = cv2.imread(image_name)
    font = cv2.FONT_HERSHEY_SIMPLEX
    threshold = 0.2
    result = list(filter(lambda x: x['score'] > threshold, result))
    bboxes = np.array(list(map(lambda v: np.array(v['bbox']), result)))
    confidence = list(map(lambda v: v['score'], result))
    track = sort.update(bboxes, confidence, im)
Exemple #14
0
            print(cap.get(4))
            print("success to save: " + str(num) + ".jpg")
            print("-------------------------")
            num += 1
        elif k == ord('q'):  #若检测到按键 ‘q’,退出
            break
    cap.release()  #释放摄像头
    cv2.destroyAllWindows()  #删除建立的全部窗口

    return num - 1


##def freshness_predict(image_num):
##    model = pdx.load_model('banana_export_model/inference_model')
##    result = model.predict(workpath + str(image_num) + ".jpg", topk=3)
##    print("Predict Result:", result)
##
##
##
##if __name__ == '__main__':
##    image_num = make_photo()
##    freshness_predict(image_num)

print("---------------------------------------")
photo_num = make_photo()
print("photo_num: ", photo_num)

model = pdx.load_model('banana_export_model/inference_model')
result = model.predict(workpath + str(photo_num) + ".jpg", topk=3)
print("Predict Result:", result)
Exemple #15
0
def export_onnx(model_dir, save_dir, fixed_input_shape):
    assert len(fixed_input_shape) == 2, "len of fixed input shape must == 2"
    model = pdx.load_model(model_dir, fixed_input_shape)
    model_name = os.path.basename(model_dir.strip('/')).split('/')[-1]
    export_onnx_model(model, save_dir)
Exemple #16
0
def dbb(img, b, color="R"):
    ymin, xmin, ymax, xmax = b
    lines = [[(xmin, ymin), (xmin, ymax)], [(xmax, ymin), (xmax, ymax)],
             [(xmin, ymin), (xmax, ymin)], [(xmin, ymax), (xmax, ymax)]]
    if color == "R":
        color = (0, 0, 255)
    elif color == "G":
        color = (0, 255, 0)
    elif color == "B":
        color = (255, 0, 0)

    for l in lines:
        cv2.line(img, l[0], l[1], color, 2)


flg_det = pdx.load_model("./model/new_flg/")
flg_trans = transforms.Compose([transforms.Resize(), transforms.Normalize()])

people_det = pdx.load_model("./model/person/50")
people_trans = transforms.Compose(
    [transforms.Resize(), transforms.Normalize()])


def sort_key(p):
    return (int(p['bbox'][0]), int(p['bbox'][1]))


for vid_name in tqdm(os.listdir(vid_dir)):
    print(vid_name)

    vidcap = cv2.VideoCapture(osp.join(vid_dir, vid_name))
Exemple #17
0
def drawText(img, addText, x1, y1):

    color = (20, 255, 20)
    # img = Image.fromarray(image)
    draw = ImageDraw.Draw(img)
    draw.text((x1, y1),
              addText.encode("utf-8").decode("utf-8"),
              color,
              font=fontC)
    imagex = np.array(img)

    return imagex


save_dir = './best_model'
model = pdx.load_model(save_dir)

classes = {
    'c0': 'normal driving',
    'c1': 'texting-right',
    'c2': 'talking on the phone-right',
    'c3': 'texting-left',
    'c4': 'talking on the phone-left',
    'c5': 'operating the radio',
    'c6': 'drinking',
    'c7': 'reaching behind',
    'c8': 'hair and makeup',
    'c9': 'talking to passenger'
}

base = './test_images'
import paddlex as pdx
import os
from tqdm import tqdm
import json
JSONFILE = './RCNN101.json'
results = []
#读取训练文件并且排序
test_file = './dataset/test'
img_list = os.listdir(test_file)
img_list.sort(key = lambda x : x.split('.')[0])
#加载模型
model = pdx.load_model('./output/best_model')
#训练
for i ,data in enumerate(tqdm(img_list)):
    buffer_result = []
    targets = []
    buffer_result.append(int(data.split('.')[0])) #图片序号
    img_path = os.path.join(test_file,data)
    result = model.predict(img_path)
    if len(result)  != 0:#如果有结果
        for j,data in enumerate(result):
            target = []
            if data['category'] == 'green':
                target.append(0)
            else:
                target.append(1)
            target.append(data['score'])
            target.append(data['bbox'][0]),target.append(data['bbox'][1])
            target.append(data['bbox'][2]+data['bbox'][0])
            target.append(data['bbox'][3]+data['bbox'][1])
            targets.append(target)
Exemple #19
0
import glob
import numpy as np
import threading
import time
import random
import os
import base64
import cv2
import json
import paddlex as pdx

# 待预测图片路径
image_name = 'work/dataset_reinforcing_steel_bar_counting/JPEGImages/4B145787.jpg'

# 预测模型加载
model = pdx.load_model('output/yolov3_mobilnetv1/best_model')

# 读取图片与获取预测结果
img = cv2.imread(image_name)
result = model.predict(img)

# 解析预测结果,并保存到txt中
keep_results = []
areas = []
f = open('result.txt', 'a')
count = 0
for dt in np.array(result):
    cname, bbox, score = dt['category'], dt['bbox'], dt['score']
    if score < 0.5:
        continue
    keep_results.append(dt)
Exemple #20
0
import argparse

from tqdm import tqdm
import cv2
import paddlex as pdx
from paddlex.det import transforms

parser = argparse.ArgumentParser(description="")
parser.add_argument("-m", "--model", type=str, help="模型路径")
parser.add_argument("-i", "--input", type=str, help="视频存放路径")
parser.add_argument("-o", "--output", type=str, help="结果视频存放路径")
parser.add_argument("--interval", type=int, default=10, help="间隔多少帧推理一次")
parser.add_argument("--bs", type=int, default=10, help="推理batchsize")
args = parser.parse_args()

model = pdx.load_model(args.model)

transforms = transforms.Compose([transforms.Resize(), transforms.Normalize()])


# TODO: 结果保存VOC格式
def predict(img_data, names, folder):
    results = model.batch_predict(img_data, transforms=transforms)
    for idx in range(len(results)):
        vis = pdx.det.visualize(img_data[idx],
                                results[idx],
                                threshold=0.8,
                                save_dir=None)
        cv2.imwrite(osp.join(folder, names[idx]), vis)
        print(idx)
Exemple #21
0
        [(xmin, ymin), (xmax, ymin)],
        [(xmin, ymax), (xmax, ymax)]
    ]
    if color == "R":
        color = (0, 0, 255)
    elif color == "G":
        color = (0, 255, 0)
    elif color == "B":
        color = (255, 0, 0)

    for l in lines:
        cv2.line(img, l[0], l[1], color, 2)



flg_det = pdx.load_model("../model/new_flg/")
flg_trans = transforms.Compose([
    transforms.Resize(), transforms.Normalize()
])


def sort_key(p):
    return (int(p['bbox'][0]), int(p['bbox'][1]))


for vid_name in tqdm(os.listdir(vid_dir)):
    print(vid_name)

    vidcap = cv2.VideoCapture(osp.join(vid_dir, vid_name))
    frame_count = vidcap.get(cv2.CAP_PROP_FRAME_COUNT)
    print(frame_count)
Exemple #22
0
# coding:utf-8
# 环境变量配置,用于控制是否使用GPU
# 说明文档:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html#gpu
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

import os.path as osp
import paddlex as pdx

img_file = 'images/000001.jpg'
model_dir = 'output/ppyolov2_r50vd_dcn/best_model/'
save_dir = './visualize/predict'
# 设置置信度阈值
score_threshold = 0.4

if not os.path.exists(save_dir):
    os.makedirs(save_dir)

model = pdx.load_model(model_dir)
res = model.predict(img_file)
pdx.det.visualize(img_file, res, threshold=score_threshold, save_dir=save_dir)