Recentemente, eu estava olhando o código do módulo de carregamento de dados do yolov5, que envolve um trecho de código que obtém o caminho do rótulo de acordo com o caminho da imagem. Primeiro, o formato de armazenamento do conjunto de dados do yolov5 é que Imagens e rótulos são pastas do mesmo nível do diretório. A nomenclatura e os rótulos da imagem em Imagens Os nomes dos rótulos em são os mesmos, mas os sufixos são diferentes. As imagens estão no formato de sufixo de imagem e o sufixo do rótulo em rótulos é .txt.
Escrevi um código separado para testar e ver os resultados da execução. O código é o seguinte:
import os
img_paths = ['C:\\Users\\wang\\Images\\img1.jpg',
'C:\\Users\\wang\\Images\\img2.jpg'] # 图片路径列表
def img2label_paths(img_paths):
# os.sep为路径里的分隔符(不同系统路径的分隔符不同,os.sep可以根据系统自适应)
sa, sb = f'{os.sep}Images{os.sep}', f'{os.sep}labels{os.sep}' # sa: /images/, sb: /labels/
labelPaths = [] # 存储标签路径的列表
for p in img_paths:
path = p.replace('\\', os.sep) # 用os.sep替换原路径分隔符 '\\'
a = path.rsplit(sa, 1) # 以sa为分隔符,1的意思是遇见第一个sa分割结束,b为含2个元素的列表
print(a) # 以img1为例(下同):a:['C:\\Users\\wang', 'img1.jpg']
b = sb.join(a) # 用sa连接b中的两个元素
print(b) # b: C:\Users\wang\labels\img1.jpg
c = p.rsplit('.', 1)[0] + '.txt' # 以'.'为分隔符 [0]表示取分割之后列表中的第一个元素再和'.txt'相连
labelPaths.append(c) # c: C:\\Users\\wang\\Images\\img1.txt
return labelPaths
if __name__ == "__main__":
labelsPaths = img2label_paths(img_paths)
print(labelsPaths) # ['C:\\Users\\wang\\Images\\img1.txt', 'C:\\Users\\wang\\Images\\img2.txt']
Aprender é um processo de acumulação pouco a pouco, vamos lá ~