#数据集处理 自建数据集生成.h5文件

 根据自身需要修改代码!

批量处理.h5数据

import h5py
import os
import cv2
import math
import numpy as np

target_path = 'D:/../../../../datasets'#.h5文件地址
source_path = 'D:/../../../../Data/'#数据地址
idx = 34 #创建的group数
dataset = h5py.File(os.path.join(target_path, "iris.h5"), 'w')

#计算图片角度信息
def change(file, g):
    angle_v = float(file.split('_')[2])
    angle_h = float(file.split('_')[3])
    side = file.split('_')[-1][0]
    if side == 'L':
        h = math.tan(angle_h * 3.1415926/180.0) * 22-g/2.0
        v = math.tan(angle_v * 3.1415926/180.0) * 22-g/2.0
    else:
        h = math.tan(angle_h * 3.1415926 / 180.0) * 22 + g / 2.0
        v = math.tan(angle_v * 3.1415926 / 180.0) * 22 + g / 2.0
    return math.atan(h/22.0), math.atan(v/22.0)

#获取部分信息
def interal(name):
    file = name.split(".bmp")[0]
    g = float(file.split("_")[-2])
    return change(file, g)

#读取图片
def readimg(i):
    path = source_path + '%05d' % (i+1)
    eye_data = []
    gaze_data = []
    for list in os.listdir(path):
        path_side = path + '/' + list
        for root, dirs, files in os.walk(path_side):
            for file in files:
                path_id = path_side + '/' + file
                img = cv2.imread(path_id, cv2.IMREAD_GRAYSCALE)
                img = cv2.resize(img,(60,36))
                img = np.array(img)
                gaze_v, gaze_h = interal(file)
                gaze = [gaze_v, gaze_h]
                gaze = np.array(gaze)
                gaze_data.append(gaze)
                eye_data.append(img)
    return np.array(eye_data), np.array(gaze_data)

if __name__ == '__main__':

#区分训练集和测试集
    for i in range(idx):
        dataset.create_group("/test/%d" % (i+1))  #test新建group “1”\
    print(dataset['test'].keys())
    for i in range(idx):
        dataset.create_group("train/%d" % (i+1))  #train新建group “1”\
#训练
    for i in range(idx):
        h = dataset['test']['%d' % (i+1)]
        img, gaze = readimg(i)
        # print(img)
        h.create_dataset("eye", data=img)
        h.create_dataset("gaze", data=gaze)
    print(list(h.keys()))
#测试
    for i in range(idx):
        h = dataset['train']['%d' % (i+1)]
        img, gaze = readimg(i)
        # print(img)
        h.create_dataset("eye", data=img)
        h.create_dataset("gaze", data=gaze)
    print(list(h.keys()))

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
首先需要安装以下库: - numpy - cv2 - os - tensorflow - keras 然后可以按照以下步骤进行操作: 1. 下载Helen人脸数据集,并解压缩到指定目录下。 2. 在代码中导入必要的库: ```python import numpy as np import cv2 import os import tensorflow as tf from keras.models import Model, load_model ``` 3. 加载已经训练好的分割模型: ```python model = load_model('path/to/model.h5') ``` 4. 定义分割函数,输入人脸图像,输出分割结果: ```python def segment_face(img): # resize to 256x256 img_resize = cv2.resize(img, (256, 256)) # convert to float and normalize img_resize = img_resize.astype('float32') / 255.0 # expand dimensions for model input img_expand = np.expand_dims(img_resize, axis=0) # predict segmentation seg = model.predict(img_expand) # threshold output seg = (seg > 0.5).astype('uint8') # resize output to original size seg_resize = cv2.resize(seg[0], (img.shape[1], img.shape[0])) return seg_resize ``` 5. 遍历Helen数据集中所有的人脸图像,对每个图像进行分割: ```python data_dir = 'path/to/helen/dataset' save_dir = 'path/to/save/segmentation' # loop over all image directories in data directory for dir_name in os.listdir(data_dir): if not os.path.isdir(os.path.join(data_dir, dir_name)): continue # create directory for segmentation results seg_dir = os.path.join(save_dir, dir_name) os.makedirs(seg_dir, exist_ok=True) # loop over all images in image directory for img_name in os.listdir(os.path.join(data_dir, dir_name)): if not img_name.endswith('.jpg'): continue # read image img = cv2.imread(os.path.join(data_dir, dir_name, img_name)) # segment face seg = segment_face(img) # save segmentation result seg_name = img_name.replace('.jpg', '_seg.jpg') cv2.imwrite(os.path.join(seg_dir, seg_name), seg) ``` 这样就可以生成Helen数据集中所有人脸图像的分割结果,并保存到指定目录下。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值