2025-09-22 02:07:45 +00:00
|
|
|
import os
|
|
|
|
|
import re
|
|
|
|
|
# import pandas as pd
|
|
|
|
|
import csv
|
|
|
|
|
from collections import defaultdict
|
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
|
|
def stats_ship_labels(input_dir, output_file, person="", work_time=""):
|
|
|
|
|
header = [
|
|
|
|
|
"标签", "负责人", "作业时间",
|
2025-10-03 05:37:55 +00:00
|
|
|
"军用飞机", "民用飞机", "军民一体飞机",
|
|
|
|
|
"军用轮船", "民用轮船",
|
|
|
|
|
"民用机场", "军用机场", "军民一体机场",
|
|
|
|
|
"民用港口", "军用港口", "军民一体港口",
|
2025-09-22 02:07:45 +00:00
|
|
|
"总计"
|
|
|
|
|
]
|
|
|
|
|
alias = [
|
|
|
|
|
"SAR影像名", "StudentID", "work_time",
|
|
|
|
|
"military_airplane", "civil_airplane", "mix_airplane",
|
|
|
|
|
"military_ship", "civil_ship",
|
|
|
|
|
"civil_airport", "military_airport", "mix_airport",
|
|
|
|
|
"military_harbor", "civil_harbor", "mix_harbor",
|
|
|
|
|
"Total"
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
stats = defaultdict(int)
|
|
|
|
|
|
|
|
|
|
for fname in os.listdir(input_dir):
|
|
|
|
|
if not fname.endswith(".txt"):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
original_name = re.sub(r'_\d+_image\.txt', '', fname)
|
|
|
|
|
file_path = os.path.join(input_dir, fname)
|
|
|
|
|
|
|
|
|
|
# with open(file_path, "r", encoding="utf-8") as f: # 统计的是
|
|
|
|
|
# for line in f:
|
|
|
|
|
# parts = line.strip().split()
|
|
|
|
|
# if len(parts) < 9:
|
|
|
|
|
# continue
|
|
|
|
|
# cls = parts[-1]
|
|
|
|
|
# if cls == "ship":
|
|
|
|
|
# stats[original_name]["民用轮船"] += 1
|
|
|
|
|
|
|
|
|
|
stats[original_name] += 1 # 统计的是有ship的切片数量
|
|
|
|
|
|
|
|
|
|
# rows = []
|
|
|
|
|
# for original_name, counts in stats.items():
|
|
|
|
|
# row = {
|
|
|
|
|
# "标签":original_name,
|
|
|
|
|
# "负责人":person,
|
|
|
|
|
# "作业时间":work_time,
|
|
|
|
|
# "民用飞机":0,
|
2025-10-03 05:37:55 +00:00
|
|
|
# "军用飞机":0,
|
|
|
|
|
# "军民一体飞机":0,
|
|
|
|
|
# "军用轮船":0,
|
2025-09-22 02:07:45 +00:00
|
|
|
# "民用轮船":counts["民用轮船"],
|
|
|
|
|
# "民用机场":0,
|
2025-10-03 05:37:55 +00:00
|
|
|
# "军用机场":0,
|
|
|
|
|
# "军民一体机场":0,
|
|
|
|
|
# "军用港口":0,
|
2025-09-22 02:07:45 +00:00
|
|
|
# "民用港口":0,
|
2025-10-03 05:37:55 +00:00
|
|
|
# "军民一体港口":0
|
2025-09-22 02:07:45 +00:00
|
|
|
# }
|
|
|
|
|
# row["总计"] = row["民用轮船"]
|
|
|
|
|
# rows.append(row)
|
|
|
|
|
#
|
|
|
|
|
# df = pd.DataFrame(rows)
|
|
|
|
|
#
|
|
|
|
|
# alias_df = pd.DataFrame([dict(zip(header, alias))])
|
|
|
|
|
# df = pd.concat([alias_df, df], ignore_index=True)
|
|
|
|
|
#
|
|
|
|
|
# total_row = {col:0 for col in header}
|
|
|
|
|
# total_row["标签"] = ""
|
|
|
|
|
# total_row["负责人"] = ""
|
|
|
|
|
# total_row["作业时间"] = ""
|
|
|
|
|
# for col in header[3:]:
|
|
|
|
|
# total_row[col] = df[col][1:].astype(int).sum()
|
|
|
|
|
# df.loc[len(df)] = total_row
|
|
|
|
|
#
|
|
|
|
|
# df.to_csv(output_file, index=False)
|
|
|
|
|
# print(f"统计完成,结果保存到 {output_file}")
|
|
|
|
|
|
|
|
|
|
with open(output_file,"w", newline="",encoding="utf-8") as f:
|
|
|
|
|
writer = csv.writer(f, delimiter=',')
|
|
|
|
|
writer.writerow(header)
|
|
|
|
|
writer.writerow(alias)
|
|
|
|
|
|
|
|
|
|
total_counts = [0] * (len(header) - 3)
|
|
|
|
|
|
|
|
|
|
for original_name, ship_count in stats.items():
|
|
|
|
|
row = [original_name, person, work_time] + [0,0,0,0,ship_count,0,0,0,0,0,0]
|
|
|
|
|
total = ship_count
|
|
|
|
|
row.append(total)
|
|
|
|
|
|
|
|
|
|
for i, val in enumerate(row[3:], start=0):
|
|
|
|
|
total_counts[i] += val
|
|
|
|
|
|
|
|
|
|
writer.writerow(row)
|
|
|
|
|
total_row = ["","",""] + total_counts
|
|
|
|
|
writer.writerow(total_row)
|
|
|
|
|
print(f"统计完成,结果保存到{output_file}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getParams():
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
|
parser.add_argument('-i','--inlabelfolder',type=str,default=r'R:\TYSAR-德清院\B-模型处理-预标注\20250818-不分类-处理20250906\人工检查\剔除空标注\G6',
|
|
|
|
|
help='输入tiff的bin文件')
|
|
|
|
|
parser.add_argument('-o', '--outcsvpath',type=str,default=r'D:\TYSAR-德清院\切片工作统计表_0818G6.csv',
|
|
|
|
|
help='切片文件夹地址')
|
|
|
|
|
parser.add_argument('-p', '--person', type=str, default=f"",
|
|
|
|
|
help='切片文件夹地址')
|
|
|
|
|
parser.add_argument('-w', '--work_time', type=str, default=f"",
|
|
|
|
|
help='切片文件夹地址')
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
return args
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
args = getParams()
|
|
|
|
|
inlabelfolder = args.inlabelfolder
|
|
|
|
|
outcsvpath = args.outcsvpath
|
|
|
|
|
person = args.person
|
|
|
|
|
work_time = args.work_time
|
|
|
|
|
print('inlabelfolder:', inlabelfolder)
|
|
|
|
|
print('outcsvpath:', outcsvpath)
|
|
|
|
|
stats_ship_labels(inlabelfolder,outcsvpath, person, work_time)
|