144 lines
4.7 KiB
Python
144 lines
4.7 KiB
Python
from opcode import opname
|
|
|
|
from osgeo import ogr
|
|
import os
|
|
import argparse
|
|
from osgeo import ogr, gdal
|
|
import os
|
|
import argparse
|
|
import numpy as np
|
|
from scipy.spatial import KDTree
|
|
from tools.DotaOperator import DotaObj,readDotaFile,writerDotaFile,createDota
|
|
from glob import glob
|
|
from pathlib import Path
|
|
import shutil
|
|
from tqdm import tqdm
|
|
|
|
|
|
MLCName="MLC" # M
|
|
JLCName="JLC" # J
|
|
MJLCName="MJLC" # JM 混合
|
|
NOLCName="NOLC" # 没有港口
|
|
|
|
|
|
def existOrCreate(dirpath):
|
|
if not os.path.exists(dirpath):
|
|
os.makedirs(dirpath)
|
|
|
|
|
|
def find_tifPort_files_pathlib(directory):
|
|
path = Path(directory)
|
|
# 使用rglob递归匹配所有.tif和.tiff文件
|
|
tif_files = list(path.rglob('sumMJPort.txt'))
|
|
# 将Path对象转换为字符串路径
|
|
return [str(file) for file in tif_files]
|
|
|
|
|
|
def find_label_files_pathlib(directory):
|
|
path = Path(directory)
|
|
# 使用rglob递归匹配所有.tif和.tiff文件
|
|
tif_files = list(path.rglob('*.txt'))
|
|
# 将Path对象转换为字符串路径
|
|
return [str(file) for file in tif_files]
|
|
|
|
def read_MJPortFile(sumMJPortfilepath,deepsdict=None):
|
|
lines=None
|
|
with open(sumMJPortfilepath,'r',encoding="utf-8") as f:
|
|
lines= f.readlines()
|
|
if deepsdict is None :
|
|
deepsdict={}
|
|
for linestr in lines:
|
|
if len(linestr)<3:
|
|
continue
|
|
clsname=linestr.split("\t\t")[0]
|
|
tiffpath=linestr.split("\t\t")[1].replace("\n","")
|
|
rootname=Path(tiffpath).stem
|
|
deepsdict[rootname]=clsname
|
|
return deepsdict
|
|
|
|
|
|
|
|
def SpliteProcess(srcfolderpath,infolderpath,outfolderpath):
|
|
sumMJPortPaths=find_tifPort_files_pathlib(srcfolderpath)
|
|
sumMJPortDict={}
|
|
print("读取港口归属文件")
|
|
for sumMJPortfilepath in tqdm(sumMJPortPaths):
|
|
sumMJPortDict=read_MJPortFile(sumMJPortfilepath,sumMJPortDict)
|
|
|
|
labeltxtPaths=find_label_files_pathlib(infolderpath)
|
|
|
|
JportLabel=os.path.join(outfolderpath,'军港')
|
|
MportLabel=os.path.join(outfolderpath,'民港')
|
|
MJportLabel=os.path.join(outfolderpath,'混合港')
|
|
NoportLabel=os.path.join(outfolderpath,'无港口')
|
|
|
|
existOrCreate(JportLabel)
|
|
existOrCreate(MportLabel)
|
|
existOrCreate(MJportLabel)
|
|
existOrCreate(NoportLabel)
|
|
|
|
# 软件
|
|
for labeltxtpath in tqdm(labeltxtPaths):
|
|
rootname=Path(labeltxtpath).stem
|
|
tiffpath=labeltxtpath.replace(".txt",".tif")
|
|
if not os.path.exists(tiffpath):
|
|
tiffpath=labeltxtpath.replace(".txt",".tiff")
|
|
if not os.path.exists(tiffpath):
|
|
print("error not fount: ",tiffpath)
|
|
rootname=rootname.replace("_image.txt","").replace("_image","")
|
|
idx=rootname.rfind("_")
|
|
rootname=rootname[:idx]
|
|
trgpath=None
|
|
|
|
if rootname in sumMJPortDict:
|
|
clsname=sumMJPortDict[rootname]
|
|
if MLCName == clsname: # M
|
|
trgpath=MportLabel
|
|
elif JLCName == clsname: # J
|
|
trgpath=JportLabel
|
|
elif MJLCName == clsname: # JM 混合
|
|
trgpath=MJportLabel
|
|
elif NOLCName == clsname: # 没有港口
|
|
trgpath=NoportLabel
|
|
clsname="MLC"
|
|
else:
|
|
print("error: ", Path(labeltxtpath).stem)
|
|
continue
|
|
|
|
# shutil.copy(labeltxtpath, os.path.join(trgpath, os.path.basename(labeltxtpath)))
|
|
newlabelpath=os.path.join(trgpath, os.path.basename(labeltxtpath))
|
|
dotametas=readDotaFile(labeltxtpath)
|
|
for dotaid in range(len(dotametas)):
|
|
dotametas[dotaid].clsname=clsname
|
|
writerDotaFile(dotametas,newlabelpath)
|
|
shutil.copy(tiffpath, os.path.join(trgpath, os.path.basename(tiffpath)))
|
|
else:
|
|
print("error: ", Path(labeltxtpath).stem)
|
|
|
|
return True
|
|
pass
|
|
|
|
|
|
def getParams():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-s','--srcfolder',type=str,default=r'D:\TYSAR-德清院\TYSAR-条带模式(SM)\港口', help='输入shapefile文件')
|
|
parser.add_argument('-i','--inlabelfolder',type=str,default=r'R:\TYSAR-德清院\D-切片成果\TYSAR-条带模式(SM)\港口\切片结果整理', help='输入shapefile文件')
|
|
parser.add_argument('-o', '--outfolder',type=str,default=r'R:\TYSAR-德清院\D-切片成果\TYSAR-条带模式(SM)\港口\舰船')
|
|
args = parser.parse_args()
|
|
return args
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
parser = getParams()
|
|
srcfolder=parser.srcfolder
|
|
infolder=parser.inlabelfolder
|
|
outfolder=parser.outfolder
|
|
print('srcfolder=',srcfolder)
|
|
print('infolder=',infolder)
|
|
print('outfolder=',outfolder)
|
|
SpliteProcess(srcfolder,infolder,outfolder)
|
|
exit(2)
|
|
except Exception as e:
|
|
print(e)
|
|
exit(3)
|