You can use the library treeHandler
to achieve this. You can install it using pip install treeHandler
from treeHandler import treeHandler
import os
import cv2
inputFolder='SampleData'
### initialising treeHandler object
th=treeHandler()
### calling getFiles function to get all jpg files, you can add more extensions like ['jpg','png','bmp'] if required
fileTuple=th.getFiles(inputFolder,['jpg'])
Here is what fileTuple sample looks like:
[('image01.jpg', 'sampleData'), ('image02.jpg', 'sampleData'), ('image03.jpg', 'sampleData'), ('image04.jpg', 'sampleData'), ('image11.jpg', 'sampleData/folder1'), ('image12.jpg', 'sampleData/folder1'), ('image111.jpg', 'sampleData/folder1/folder11'), ('image112.jpg', 'sampleData/folder1/folder11'), ('image1111.jpg', 'sampleData/folder1/folder11/folder111'), ('image1112.jpg', 'sampleData/folder1/folder11/folder111'), ('image11111.jpg', 'sampleData/folder1/folder11/folder111/folder1111')....]
I have written a blog on processing large number of files and processing them
https://medium.com/@sreekiranar/directory-and-file-handling-in-python-for-real-world-projects-9bc8baf6ba89
You can refer that to get a fair idea on how to deal with getting all files from folders and subfolders.