向eIQ Portal中导入数据【第18届智能车竞赛智能视觉】

文章描述了在使用eIQPortal时遇到DataStoreWrapper()函数报错的问题,发现教程中的方法在最新版本的importer库中不可用。作者通过探索发现可以使用importdataset选项导入结构化文件夹数据集来解决批量导入问题,并提供了创建结构化文件夹和移动图片的Python代码示例。
摘要由CSDN通过智能技术生成

        eIQ Portal由恩智浦于2018年推出,经过不断发展,可支持系统级应用和机器学习算法实现,适用于恩智浦i.MX系列,包括低功耗i.MX RT跨界微控制器(MCU),以及基于Arm® Cortex®-M和Cortex®-A内核的多核i.MX 8和i.MX 8M应用处理器。是一款使用方便,新手友好的深度学习开发软件。然而,我在使用中发现,现有的eIQ教程在“如何批量导入数据”这个问题上并未做深入讲解,有时哪怕照搬例程依然会导致脚本报错。因此,我决定根据自身实践结果,说明如何向eIQ中批量导入分类任务所需的图片数据。

目录

一、我遇到的问题

二、我的解决办法

三、代码实现


一、我遇到的问题

        在数周的使用中,我遇到的主要问题为DataStoreWrapper()函数报错。我参考的教程是这一篇:eIQ ToolKit上手指南——特别篇

        这篇教程使用了DataStoreWrapper()函数以声明数据加载器,然而我在importer库中完全找不到该函数,导致一运行函数就会报错:

        我曾经以为是importer库版本过高的问题,然而在我安装1.0版本的importer库后,依然会报相同的错误,当时我以为importer库的版本仍然过高,希望上官网找到更早的版本,然而当我使用pip show命令后顿时傻了眼:

于是我在GitHub上以“Keen-Importer”为关键词搜索python项目,找到了它:

项目中的超链接指向了这个网页:

        好吧,看来1.0版本就是它的最早版本了 。无法声明函数加载器意味着无法向其中导入数据,自然也无法开始后续的训练。当然我可以选择手动导入,但那就意味着我要手动对数据进行标记,整整一千四百多张图啊……

二、我的解决办法

        那难道就没有办法自动导入了吗?当然不是,我注意到在创建模型时有“import dataset”选项,那是否意味着我们可以导入数据集呢?

在点击该选项后出现了导入数据集的格式选择页面,如下所示:

中间structured folders选项机翻如下:

 结构化文件夹数据集用于导入分类任务的数据集。它导入存储在特定文件夹结构中的图像。图像应首先分为两个子文件夹训练和测试。这两个文件夹都应包含带有标签名称和相应图像的子文件夹。如果图像存储在训练/测试子文件夹之外,则加载时不会进行分组。如果图像存储在标签子文件夹之外,则导入时将不带任何标签。

以第18届智能车智能视觉组的任务为例,结构化文件夹数据集如下所示:

 各个子文件夹下直接存储要导入的图像即可,使用时只需导入母文件夹(我的母文件夹是dataset),程序会自动将相应的文件夹名设为图像标记,并区分训练集和测试集。

三、代码实现

        所需的库:os,random,opencv,其中opencv库主要用于图像预处理

import os
import random
import cv2

folder_list1 = ('train', 'test')  # 训练集和测试集
folder_list2 = \
    (
        'BaiCai', 'CanDou', 'ChengZi', 'FanShu', 'HuaSheng',
        'HuangGua', 'LaJiao', 'LiuLian', 'LuoBo', 'PingGuo',
        'PuTao', 'QieZi', 'ShuiDao', 'XiangJiao', 'YuMi'
    )  # 类标签,同时也是文件夹名
img_path = 'E:/18th Smart Car/download pictures'  # 图片存储位置
folder_path = 'E:/18th Smart Car/Machine visionV04/dataset'  # 结构化文件夹数据集位置

judge = 25  # 将25%的数据放入测试集
flag = random.randrange(0, 100)  # 产生0-99的伪随机整数以判定图片所属数据集

for folder_name1 in folder_list1:
    for folder_name2 in folder_list2:
        os.makedirs(os.path.join(folder_path, folder_name1, folder_name2))
# 第一部分:创建结构化文件夹

for index, label in enumerate(folder_list2):
    for img in os.listdir(os.path.join(img_path, label)):
        temp = cv2.imread(os.path.join(img_path, label, img), 1)  # 读取图片
        temp = cv2.resize(temp, (96, 96))  # 将图片像素设置为96*96
        flag = random.randrange(0, 100)
        full_file_name = os.path.join(img_path, label, img)
        print(label, img, flag)

        if (flag < judge) and (os.path.isfile(full_file_name)):
            cv2.imwrite(os.path.join(folder_path, 'test', label, img), temp)
        if (flag >= judge) and (os.path.isfile(full_file_name)):
            cv2.imwrite(os.path.join(folder_path, 'train', label, img), temp)
# 第二部分,将图片在预处理后导入结构化文件夹的对应位置
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值