批量比较两个txt文件的内容

为了方便测试人员的测试,我们把检测到的数据保存在txt文件中,然后批量比较得出错误和遗漏的数据

txt 文件格式为下图所示,第一个值为类别,后四个为左上右下角坐标

‘‘‘
@author: Shang Tongtong
@license: (C) Copyright 2019-present, SeetaTech, Co.,Ltd.
@contact: [email protected]
@file: txt_test.py
@time: 19-7-19 上午10:49
@desc: 测试两张图片txt文件的类别是否一致以及框的iou
‘‘‘

import os
import numpy as np

def get_op(txt_path):     #把txt文件内容放到数组
    f = open(txt_path)
    boxes = []

    for linesp in f.readlines():
        boxes.append(linesp.split(‘\n‘)[0])

    return boxes

def compute_iou(groud_truth, detect):
    """
    computing IoU
    :param groud_truth: (y0, x0, y1, x1), which reflects
            (top, left, bottom, right)
    :param detect: (y0, x0, y1, x1)
    :return: scala value of IoU
    """
    # computing area of each rectangles
    S_groud_truth = (groud_truth[2] - groud_truth[0]) * (groud_truth[3] - groud_truth[1])
    S_detect = (detect[2] - detect[0]) * (detect[3] - detect[1])

    # computing the sum_area
    sum_area = S_groud_truth + S_detect

    # find the each edge of intersect rectangle
    left_line = max(groud_truth[1], detect[1])
    right_line = min(groud_truth[3], detect[3])
    top_line = max(groud_truth[0], detect[0])
    bottom_line = min(groud_truth[2], detect[2])

    # judge if there is an intersect
    if left_line >= right_line or top_line >= bottom_line:
        return 0
    else:
        intersect = (right_line - left_line) * (bottom_line - top_line)
        return intersect / (sum_area - intersect)

def compare(gt_txt, de_txt):
    fn = 0
    fp = 0
    gt_count = len(open(gt_txt).readlines())   #txt文件的行数
    de_count = len(open(de_txt).readlines())
    if de_count < gt_count:
        fn += 1
        print(‘   ‘+‘omit!!!!!!‘)

    for i in range(de_count):
        all_iou = []
        for j in range(gt_count):
            de_box = (get_op(de_txt)[i]).split()[1:5]
            de_box = list(map(int, de_box))     #数组中的字符串转为整型
            gt_box = (get_op(gt_txt)[j]).split()[1:5]
            gt_box = list(map(int, gt_box))
            iou = compute_iou(gt_box, de_box)
            all_iou.append(iou)
            j += 1
        num = np.argmax(np.max(all_iou))    #获得数组中最大值的下标
        de_name = (get_op(de_txt)[i]).split()[0]
        gt_name = (get_op(gt_txt)[i]).split()[num]
        #if (get_op(de_txt)[i])[0] != (get_op(gt_txt)[i])[num]:
        if de_name != gt_name:
            fp += 1
            print(‘     ‘+‘error!!!!!!!!‘ + gt_name + ‘   is incorrectly  predicted  ‘ + de_name)
        i += 1
    return fn, fp

def walk_dir(*paths):
    x_list = []

    for path in paths:
        for (root, dirs, files) in os.walk(path):
            files = sorted(files)
            for item in files:
                x_list.append(item)

            return x_list

if __name__ == ‘__main__‘:

    g_truth = r‘/home/stt/桌面/s/txt/‘
    detect = r‘/home/stt/桌面/s/txt2/‘
    fn = 0
    fp = 0

    gt_list = walk_dir(g_truth)
    for gt in gt_list:
        gt_txt = os.path.join(g_truth, gt)
        de_txt = os.path.join(detect, gt)
        print(‘{} is being detected‘.format(gt))
        a = compare(gt_txt, de_txt)
        fn += a[0]
        fp += a[1]
    print(‘The sum of fn is {},and the sum of fp is {}‘.format(fn, fp))

原文地址:https://www.cnblogs.com/stt-ac/p/11215307.html

时间: 2024-10-14 17:51:47

批量比较两个txt文件的内容的相关文章

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

SSIS【Foreach 循环容器_Foreach 文件枚举器】(导入路径下的所有txt文件的内容) (转)

原文:http://blog.csdn.net/kk185800961/article/details/12276449 SQLServer 2008 R2 SSIS_Foreach 循环容器_Foreach 文件枚举器(导入路径下的所有txt文件的内容) 1. 拖动一个 [Foreach 循环容器]到[控制流]中,再拖动一个[数据流任务]到[Foreach 循环容器]中.如图: 2.编辑[Foreach 循环容器],在选项[集合]中选择[Foreach 文件枚举器],配置要遍历的文件夹及文件类

php:比较两个txt文件,格式如下,分别取出a.txt有的b.txt没有的,b.txt有的a.txt没有的及两个都有的

<?php /*比较两个txt文件,格式如下,分别取出a.txt有的b.txt没有的,b.txt有的a.txt没有的及两个都有的 * a.txt: * A * B * C * D * b.txt * A * B * M * N * result: * only_a.txt * C * D * only_b.txt * M * N * public_a_b.txt * A * B */ $curr_file_name = dirname(__FILE__); if (file_exists($cu

PHP读取txt文件的内容并赋值给数组的代码

使用file_get_contents()获取txt文件的内容,然后通过explode()把获得的字符串转化为数组. 获得数组长度可以使用count()函数 <?php $file = 'keywords.txt'; $content = file_get_contents($file); //echo $content; $array = explode("\r\n", $content); //print_r($array); for($i=0; $i<count($a

php 批量生成html、txt文件

首先建立一个conn.php的文件用来链接数据库 <?php     $link = mysql_connect("mysql_host" , "mysql_user" , "mysql_password" )or die("Could not connect : " . mysql_error());     mysql_query("set names utf8");     mysql_sele

批量将ANSI文本txt文件转换成UTF8编码格式 (vbs方法)

准备两个文件即可 conv.vbs run.bat conv.vbs源码 '用法:将要更改编码的所有文件放到同一个文件夹中,将文件夹拖到该vbs上,输入要转换成的字符编码 Dim fso,fd,fl,f,fdpath,charset On Error Resume Next If WScript.Arguments.Length>=1 Then fdpath = WScript.Arguments(0) Else fdpath = InputBox("E:\xunlian\新增加的训练集&

新建txt文件新增内容并打印出

#!/usr/bin/python import os file1=open("C:\Python34\ceshi.txt","a+");  #a+开一个文件用于读写.如果该文件已存在,文件指针将会放在文件的结尾.文件打开时会是追加模式.如果该文件不存在,创建新文件用于读写. st1=input('请输入字符:'); #键盘输入内容 file1.write(st1);  #把键盘输入的内容能够保存到txt文件中 guangbiao=file1.seek(0,0);

【ASP.NET 进阶】定时执行任务实现 (定时读取和修改txt文件数字内容,无刷新显示结果)

现在有很多网站或系统需要在服务端定时做某件事情,如每天早上8点半清理数据库中的无效数据等等,Demo 具体实现步骤如下: 0.先看解决方案截图 1.创建ASP.NET项目TimedTask,然后新建一个全局应用程序类文件 Global.asax 2.然后在Application_Start 事件中 启动定时器,如需要每隔多少秒来做一件事情,即在后台执行,与客户端无关,即使客户端全部都关闭,那么后台仍然执行,具体代码如下: using System; using System.Collection

怎样从生产数据库中获得想要的查询语句,把结果集批量插入到磁盘txt文件中

第一步:建立存储过程       实现传入参数,生成结果到磁盘的txt文件中: USE [XXXXX] GO /****** Object:  StoredProcedure [dbo].[Proc_sql_to_file]    Script Date: 2018/5/13 15:47:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==========================================