- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
首先导入scipy的包 from scipy.io import loadmat
然后读取 m = loadmat(“F:/__identity/activity/论文/data/D001.mat”)
注意这里m是一个dict数据结构
4.接下来就是用Python读取上一步中保存的matlab工作区的数据Data。Python中我们需要用到scipy库,这里我们先import进去
import scipy.io as scio
data=scio.loadmat('./matlab.mat')
type(data)
输出的为dict字典类型
7.读取对应我们想要的数据
这里我们假设需要将数据matlab_y读进python中(这里我们用numpy库将数据转化为数组类型)
import numpy as np #导入矩阵处理库
python_y=np.array(data['matlab_y']) #将matlab数据赋值给python变量
至此,就完成了使用python读取matlab数据。
————————————————
版权声明:本文为CSDN博主「刚开始的人生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44946715/article/details/119932640
表情识别的处理:
https://github.com/chenxindaaa/emotic/blob/main/mat2py.py
import argparse
import csv
import cv2
import numpy as np
import os
from scipy.io import loadmat
class emotic_train:
def __init__(self, filename, folder, image_size, person):
self.filename = filename
self.folder = folder
self.im_size = []
self.bbox = []
self.cat = []
self.cont = []
self.gender = person[3][0]
self.age = person[4][0]
self.cat_annotators = 0
self.cont_annotators = 0
self.set_imsize(image_size)
self.set_bbox(person[0])
self.set_cat(person[1])
self.set_cont(person[2])
self.check_cont()
def set_imsize(self, image_size):
image_size = np.array(image_size).flatten().tolist()[0]
row = np.array(image_size[0]).flatten().tolist()[0]
col = np.array(image_size[1]).flatten().tolist()[0]
self.im_size.append(row)
self.im_size.append(col)
def validate_bbox(self, bbox):
x1, y1, x2, y2 = bbox
x1 = min(self.im_size[0], max(0, x1))
x2 = min(self.im_size[0], max(0, x2))
y1 = min(self.im_size[1], max(0, y1))
y2 = min(self.im_size[1], max(0, y2))
return [int(x1), int(y1), int(x2), int(y2)]
def set_bbox(self, person_bbox):
self.bbox = self.validate_bbox(np.array(person_bbox).flatten().tolist())
def set_cat(self, person_cat):
cat = np.array(person_cat).flatten().tolist()
cat = np.array(cat[0]).flatten().tolist()
self.cat = [np.array(c).flatten().tolist()[0] for c in cat]
self.cat_annotators = 1
def set_cont(self, person_cont):
cont = np.array(person_cont).flatten().tolist()[0]
self.cont = [np.array(c).flatten().tolist()[0] for c in cont]
self.cont_annotators = 1
def check_cont(self):
for c in self.cont:
if np.isnan(c):
self.cont_annotators = 0
break
class emotic_test:
def __init__(self, filename, folder, image_size, person):
self.filename = filename
self.folder = folder
self.im_size = []
self.bbox = []
self.cat = []
self.cat_annotators = 0
self.comb_cat = []
self.cont_annotators = 0
self.cont = []
self.comb_cont = []
self.gender = person[5][0]
self.age = person[6][0]
self.set_imsize(image_size)
self.set_bbox(person[0])
self.set_cat(person[1])
self.set_comb_cat(person[2])
self.set_cont(person[3])
self.set_comb_cont(person[4])
self.check_cont()
def set_imsize(self, image_size):
image_size = np.array(image_size).flatten().tolist()[0]
row = np.array(image_size[0]).flatten().tolist()[0]
col = np.array(image_size[1]).flatten().tolist()[0]
self.im_size.append(row)
self.im_size.append(col)
def validate_bbox(self, bbox):
x1, y1, x2, y2 = bbox
x1 = min(self.im_size[0], max(0, x1))
x2 = min(self.im_size[0], max(0, x2))
y1 = min(self.im_size[1], max(0, y1))
y2 = min(self.im_size[1], max(0, y2))
return [int(x1), int(y1), int(x2), int(y2)]
def set_bbox(self, person_bbox):
self.bbox = self.validate_bbox(np.array(person_bbox).flatten().tolist())
def set_cat(self, person_cat):
self.cat_annotators = len(person_cat[0])
for ann in range(self.cat_annotators):
ann_cat = person_cat[0][ann]
ann_cat = np.array(ann_cat).flatten().tolist()
ann_cat = np.array(ann_cat[0]).flatten().tolist()
ann_cat = [np.array(c).flatten().tolist()[0] for c in ann_cat]
self.cat.append(ann_cat)
def set_comb_cat(self, person_comb_cat):
if self.cat_annotators != 0:
self.comb_cat = [np.array(c).flatten().tolist()[0] for c in person_comb_cat[0]]
else:
self.comb_cat = []
def set_comb_cont(self, person_comb_cont):
if self.cont_annotators != 0:
comb_cont = [np.array(c).flatten().tolist()[0] for c in person_comb_cont[0]]
self.comb_cont = [np.array(c).flatten().tolist()[0] for c in comb_cont[0]]
else:
self.comb_cont = []
def set_cont(self, person_cont):
self.cont_annotators = len(person_cont[0])
for ann in range(self.cont_annotators):
ann_cont = person_cont[0][ann]
ann_cont = np.array(ann_cont).flatten().tolist()
ann_cont = np.array(ann_cont[0]).flatten().tolist()
ann_cont = [np.array(c).flatten().tolist()[0] for c in ann_cont]
self.cont.append(ann_cont)
def check_cont(self):
for c in self.comb_cont:
if np.isnan(c):
self.cont_annotators = 0
break
def cat_to_one_hot(y_cat):
'''
One hot encode a categorical label.
:param y_cat: Categorical label.
:return: One hot encoded categorical label.
'''
one_hot_cat = np.zeros(26)
for em in y_cat:
one_hot_cat[cat2ind[em]] = 1
return one_hot_cat
def prepare_data(data_mat, data_path_src, save_dir, dataset_type='train', generate_npy=False, debug_mode=False):
'''
Prepare csv files and save preprocessed data in npy files.
:param data_mat: Mat data object for a label.
:param data_path_src: Path of the parent directory containing the emotic images folders (mscoco, framesdb, emodb_small, ade20k)
:param save_dir: Path of the directory to save the csv files and the npy files (if generate_npy files is True)
:param dataset_type: Type of the dataset (train, val or test). Variable used in the name of csv files and npy files.
:param generate_npy: If True the data is preprocessed and saved in npy files. Npy files are later used for training.
'''
data_set = list()
if generate_npy:
context_arr = list()
body_arr = list()
cat_arr = list()
cont_arr = list()
to_break = 0
path_not_exist = 0
cat_cont_zero = 0
idx = 0
for ex_idx, ex in enumerate(data_mat[0]):
nop = len(ex[4][0])
for person in range(nop):
if dataset_type == 'train':
et = emotic_train(ex[0][0],ex[1][0],ex[2],ex[4][0][person])
else:
et = emotic_test(ex[0][0],ex[1][0],ex[2],ex[4][0][person])
try:
image_path = os.path.join(data_path_src,et.folder,et.filename)
if not os.path.exists(image_path):
path_not_exist += 1
print ('path not existing', ex_idx, image_path)
continue
else:
context = cv2.cvtColor(cv2.imread(image_path),cv2.COLOR_BGR2RGB)
body = context[et.bbox[1]:et.bbox[3],et.bbox[0]:et.bbox[2]].copy()
context_cv = cv2.resize(context, (224,224))
body_cv = cv2.resize(body, (128,128))
except Exception as e:
to_break += 1
if debug_mode == True:
print ('breaking at idx=%d, %d due to exception=%r' %(ex_idx, idx, e))
continue
if (et.cat_annotators == 0 or et.cont_annotators == 0):
cat_cont_zero += 1
continue
data_set.append(et)
if generate_npy == True:
context_arr.append(context_cv)
body_arr.append(body_cv)
if dataset_type == 'train':
cat_arr.append(cat_to_one_hot(et.cat))
cont_arr.append(np.array(et.cont))
else:
cat_arr.append(cat_to_one_hot(et.comb_cat))
cont_arr.append(np.array(et.comb_cont))
if idx % 1000 == 0 and debug_mode==False:
print (" Preprocessing data. Index = ", idx)
elif idx % 20 == 0 and debug_mode==True:
print (" Preprocessing data. Index = ", idx)
idx = idx + 1
# for debugging purposes
if debug_mode == True and idx >= 104:
print (' ######## Breaking data prep step', idx, ex_idx, ' ######')
print (to_break, path_not_exist, cat_cont_zero)
cv2.imwrite(os.path.join(save_dir, 'context1.png'), context_arr[-1])
cv2.imwrite(os.path.join(save_dir, 'body1.png'), body_arr[-1])
break
print (to_break, path_not_exist, cat_cont_zero)
csv_path = os.path.join(save_dir, "%s.csv" %(dataset_type))
with open(csv_path, 'w') as csvfile:
filewriter = csv.writer(csvfile, delimiter=',', dialect='excel')
row = ['Index', 'Folder', 'Filename', 'Image Size', 'BBox', 'Categorical_Labels', 'Continuous_Labels', 'Gender', 'Age']
filewriter.writerow(row)
for idx, ex in enumerate(data_set):
if dataset_type == 'train':
row = [idx, ex.folder, ex.filename, ex.im_size, ex.bbox, ex.cat, ex.cont, ex.gender, ex.age]
else:
row = [idx, ex.folder, ex.filename, ex.im_size, ex.bbox, ex.comb_cat, ex.comb_cont, ex.gender, ex.age]
filewriter.writerow(row)
print ('wrote file ', csv_path)
if generate_npy == True:
context_arr = np.array(context_arr)
body_arr = np.array(body_arr)
cat_arr = np.array(cat_arr)
cont_arr = np.array(cont_arr)
print (len(data_set), context_arr.shape, body_arr.shape)
np.save(os.path.join(save_dir,'%s_context_arr.npy' %(dataset_type)), context_arr)
np.save(os.path.join(save_dir,'%s_body_arr.npy' %(dataset_type)), body_arr)
np.save(os.path.join(save_dir,'%s_cat_arr.npy' %(dataset_type)), cat_arr)
np.save(os.path.join(save_dir,'%s_cont_arr.npy' %(dataset_type)), cont_arr)
print (context_arr.shape, body_arr.shape, cat_arr.shape, cont_arr.shape)
print ('completed generating %s data files' %(dataset_type))
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str,default=r'I:\project\deblur\emotic', help='Path to Emotic data and annotations')
parser.add_argument('--save_dir_name', type=str, default='emotic_pre', help='Directory name in which preprocessed data will be stored')
parser.add_argument('--label', type=str, default='all', choices=['train', 'val', 'test', 'all'])
parser.add_argument('--generate_npy', action='store_true', help='Generate npy files')
parser.add_argument('--debug_mode', action='store_true', help='Debug mode. Will only save a small subset of the data')
# Generate args
args = parser.parse_args()
return args
if __name__ == '__main__':
args = parse_args()
ann_path_src = os.path.join(args.data_dir, 'Annotations','Annotations.mat')
data_path_src = os.path.join(args.data_dir, 'emotic')
save_path = os.path.join(args.data_dir, args.save_dir_name)
if not os.path.exists(save_path):
os.makedirs(save_path)
cat = ['Affection', 'Anger', 'Annoyance', 'Anticipation', 'Aversion', 'Confidence', 'Disapproval', 'Disconnection',
'Disquietment', 'Doubt/Confusion', 'Embarrassment', 'Engagement', 'Esteem', 'Excitement', 'Fatigue', 'Fear',
'Happiness', 'Pain', 'Peace', 'Pleasure', 'Sadness', 'Sensitivity', 'Suffering', 'Surprise', 'Sympathy', 'Yearning']
cat2ind = {}
ind2cat = {}
for idx, emotion in enumerate(cat):
cat2ind[emotion] = idx
ind2cat[idx] = emotion
print ('loading Annotations')
mat = loadmat(ann_path_src)
if args.label.lower() == 'all':
labels = ['train', 'val', 'test']
else:
labels = [args.label.lower()]
for label in labels:
data_mat = mat[label]
print ('starting label ', label)
prepare_data(data_mat, data_path_src, save_path, dataset_type=label, generate_npy=args.generate_npy, debug_mode=args.debug_mode)
创作挑战赛
新人创作奖励来咯,坚持创作打卡瓜分现金大奖
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!