@@ -194,6 +194,13 @@ def _filterIndividualAnnotations(image, annotation, format, imgRefMap, annotatio
194194 return _annotation
195195 else :
196196 return None
197+ elif format == "multilabel_csv" :
198+ rows = [r for r in parsed ["rows" ] if r ["file_name" ] == image ["name" ]]
199+ if rows :
200+ labels = rows [0 ]["labels" ]
201+ return {"type" : "classification_multilabel" , "labels" : labels }
202+ else :
203+ return None
197204 elif format == "jsonl" :
198205 jsonlLines = [json .dumps (line ) for line in parsed if line ["image" ] == image ["name" ]]
199206 if jsonlLines :
@@ -218,8 +225,9 @@ def _loadAnnotations(folder, annotations):
218225 ann ["parsed" ] = _read_jsonl (f"{ folder } { ann ['file' ]} " )
219226 ann ["parsedType" ] = "jsonl"
220227 elif extension == ".csv" :
221- ann ["parsedType" ] = "csv"
222- ann ["parsed" ] = _parseAnnotationCSV (f"{ folder } { ann ['file' ]} " )
228+ parsed = _parseAnnotationCSV (f"{ folder } { ann ['file' ]} " )
229+ ann ["parsed" ] = parsed
230+ ann ["parsedType" ] = parsed .get ("type" , "csv" )
223231 return annotations
224232
225233
@@ -241,10 +249,20 @@ def _parseAnnotationCSV(filename):
241249 # TODO: use a proper CSV library?
242250 with open (filename ) as f :
243251 lines = f .readlines ()
244- headers = lines [0 ]
252+ headers = [h .strip () for h in lines [0 ].split ("," )]
253+ # Multi-label classification csv typically named _classes.csv
254+ if os .path .basename (filename ) == "_classes.csv" :
255+ parsed_lines = []
256+ for line in lines [1 :]:
257+ parts = [p .strip () for p in line .split ("," )]
258+ file_name = parts [0 ]
259+ labels = [headers [i ] for i , v in enumerate (parts [1 :], start = 1 ) if v == "1" ]
260+ parsed_lines .append ({"file_name" : file_name , "labels" : labels })
261+ return {"type" : "multilabel_csv" , "rows" : parsed_lines , "headers" : headers }
262+ header_line = lines [0 ]
245263 lines = [{"file_name" : ld .split ("," )[0 ].strip (), "line" : ld } for ld in lines [1 :]]
246264 return {
247- "headers" : headers ,
265+ "headers" : header_line ,
248266 "lines" : lines ,
249267 }
250268
0 commit comments