# 注意shape = 2, 和 shape = 1, 2 的区别
a = [1, 2] # a.sjape = 2,
a = [[1, 2]] # a.shape = 1, 2
# 每轮都会产生新的返回值:
# root - 当前根目录 dir - 当前根目录下的子文件夹名 file - 当前根目录下文件名
for (rootDir, dirNames, fileNames) in os.walk(base_path):
for file in fileNames: # 遍历从base_path下开始的每一个文件
# 可供筛选的后缀名 以“元组”的方式,不然后续会查找出错
images_type = (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")
def list_images(base_path, contains=None):
return list_file(base_path, validExt=images_type, contain=contains)
def list_file(base_path, validExt=None, contain=None):
# 遍历base_path:rootDir 为根路径 dirNames为子文件夹名 fileNames为文件名
for (rootDir, dirNames, fileNames) in os.walk(base_path):
for file in fileNames:
if contain is not None and file.find(contain) == -1:
continue
ext = file[file.rfind("."):].lower()
if validExt is None or ext.endswith(validExt):
imagePath = os.path.join(rootDir, file)
yield imagePath # 配合list使用
# 注意这里的生成器yield产生的是可迭代对象, 可以配合list生成结果
# endswith 配合单个字符串 或者“元组”使用, 如这里的image_types
# .read()表示读取全部内容,strip()表示去掉每行的空格,.split("\n)表示以回车作为字符串的分割符
row = open("./model_files/synset_words.txt").read().strip().split("\n")
# rfind和find都是查找id 返回的结果是一样的只是查找的顺序不一样
class_label = [r[r.find(" "):].split(",")[0] for r in row]
# 读取dnn模型时不要有中文!
net = cv2.dnn.readNetFromCaffe("./model_files/bvlc_googlenet.prototxt",
"./model_files/bvlc_googlenet.caffemodel")
# 输入浮点数字的正确姿势:
“{:.2f}”.format(2) # 2.00
# np.argsort() 返回索引升序