11
22# General imports
33import glob
4- from os .path import expanduser , isdir , split
4+ from os .path import basename , expanduser , isdir
55
6+ import numpy as np
67import pandas as pd
78
89# ETS imports
1112)
1213
1314# Local imports
14- from pycasa .model .image_file import ImageFile
15+ from pycasa .model .image_file import ImageFile , SUPPORTED_FORMATS
1516
16- SUPPORTED_FORMATS = [".png" , ".jpg" , ".jpeg" , ".PNG" , ".JPG" , ".JPEG" ]
17+ FILENAME_COL = "filename"
18+ NUM_FACE_COL = "Num. faces"
1719
1820
1921class ImageFolder (HasStrictTraits ):
@@ -23,23 +25,38 @@ class ImageFolder(HasStrictTraits):
2325
2426 images = List (Instance (ImageFile ))
2527
28+ data = Instance (pd .DataFrame )
29+
2630 def __init__ (self , ** traits ):
31+ # Don't forget this!
2732 super (ImageFolder , self ).__init__ (** traits )
2833 if not isdir (self .directory ):
2934 msg = f"The provided directory isn't a real directory: " \
3035 f"{ self .directory } "
3136 raise ValueError (msg )
37+ self .data = self ._create_metadata_df ()
3238
3339 @observe ("directory" )
34- def _get_images (self , event ):
40+ def _update_images (self , event ):
3541 self .images = [
3642 ImageFile (filepath = file )
3743 for fmt in SUPPORTED_FORMATS
3844 for file in glob .glob (f"{ self .directory } /*{ fmt } " )
3945 ]
4046
41- def create_metadata_df (self ):
42- return pd .DataFrame (
43- [img .metadata for img in self .images ],
44- index = [split (img .filepath )[1 ] for img in self .images ]
45- )
47+ @observe ("images.items" )
48+ def _update_metadata (self , event ):
49+ self .data = self ._create_metadata_df ()
50+
51+ def _create_metadata_df (self ):
52+ if not self .images :
53+ return pd .DataFrame ({FILENAME_COL : [], NUM_FACE_COL : []})
54+ return pd .DataFrame ([
55+ {
56+ FILENAME_COL : basename (img .filepath ),
57+ NUM_FACE_COL : np .nan ,
58+ ** img .metadata
59+
60+ }
61+ for img in self .images
62+ ])
0 commit comments