yolov3 调试(4):提取 valid 的结果,分治思想下保存识别物体在原图的位置

import os
def create_mapping_dic(mapping_txt): # 保存裁剪图片在原图中的位置,用于 save_recognize_result 的映射
    mapping_dic = {}
    txt = open(mapping_txt, 'r').readlines()

    for info in txt:
        info = info.split() # info = [图片编号, x左上, y左上, x右下, y右下]
        photo_name = info[0]

        x1 = int(float(info[1]))
        y1 = int(float(info[2]))
        x2 = int(float(info[3]))
        y2 = int(float(info[4]))

        mapping_dic[photo_name] = (x1, y1, x2, y2)

    return mapping_dic      



def save_recognize_result(detect_dir, detect_file_name, number, recognize_dir, mapping_dic, thresh = 0.20):
    '''
    detect_dir: 保存 识别一个数字的位置的 txt 文本 的目录的地址
    detect_file_name: valid 出来的 txt 文本的前缀
    number: 识别什么数字
    recognize_dir: 经映射后的原图数字位置
    thresh: 只显示置信度大于阈值的识别结果
    mapping_dic: 保存裁剪图片对应原图的位置信息,构造映射
    '''

    detect_txt = os.path.join(detect_dir, detect_file_name  + str(number) + '.txt') # valid 出来的 txt 文本的地址
    txt = open(detect_txt, 'r').readlines()

    for info in txt:
        info = info.split() # info = [图片编号, 置信值, x左上, y左上, x右下, y右下]
        ground_truth = float(info[1])

        if ground_truth > thresh: # 只裁剪出检测时置信度大于阈值的识别物体

            photo_name = info[0]
            x0, y0, _, _ = mapping_dic[photo_name]

            recognize_txt = photo_name[:-2] + '.txt'
            recognize_txt_path = os.path.join(recognize_dir, recognize_txt)

            if recognize_txt not in os.listdir(recognize_dir):
                txt_write = open(recognize_txt_path, 'w') # 若文本不存在,先创建新文本,然后写入
            else:
                txt_write = open(recognize_txt_path, 'a') # 追加模式,写入而不覆盖原内容

            x1 = x0 + int(float(info[2]))
            y1 = y0 + int(float(info[3]))
            x2 = x0 + int(float(info[4]))
            y2 = y0 + int(float(info[5]))

            recognize_result = [number, x1, y1, x2, y2]
            recognize_result = [str(x) for x in recognize_result]
            recognize_string = ' '.join(recognize_result)
            txt_write.write(recognize_string)
            txt_write.write('\n')
    print('successfully save the info of recognizing number ' + str(number) + ' !')

mapping_dic = create_mapping_dic('mapping.txt')
for number in range(10): #十个数字依次识别
    save_recognize_result('valid', 'comp4_det_test_', number, 'recognize_txt', mapping_dic, thresh = 0.20)

注意点

file = open(file_name, 'a')
表示追加模式,循环结构,写入时可以不覆盖原内容,’w’ 则会覆盖原内容
但是 ‘a’ 不会创建新文本,所以循环的第一次需要 ‘w’,或先创建好空白的文本

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值