解决sampling rate不同时的处理办法
这里有的数据是 gaze point 机器测得pupil 和gaze数据是60frame/s,而视频本来的帧数是30frame/s
所以要先把视频30frame 改为60frame
from moviepy.editor import *
#把二十四个视频frame =30--》转为frame =60
def video_frame():
clip = VideoFileClip('E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/video/'+str(num[n])+'.mp4')
clip.write_videofile('E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/video_new/'+str(num[n])+'.mp4',
fps=60)
clip.reader.close()
然后将视频转为图片
#将24个视频转为图片
def video_image():
vc = cv2.VideoCapture('E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/video_new/'+str(num[n])+'.mp4')
c = 1
if vc.isOpened():
rval, frame = vc.read()
else:
rval = False
while rval:
rval, frame = vc.read()
cv2.imwrite(path_out + str(c) + '.png',
frame)
c = c + 1
cv2.waitKey(1)
vc.release()
跟随着视线将图片剪切成(100*100)的ROI图片
def ROI_video():
data_allgaze = pd.DataFrame(pd.read_csv(gaze_path, encoding="utf-8", engine='python'))
FPOGX = np.array(data_allgaze['FPOGX']) # data length : 60fps * time (video time)
FPOGY = np.array(data_allgaze['FPOGY'])
picture_name = os.listdir(img_path)
picture_name = natsorted(picture_name)
print(str(len(FPOGX)) + '_' + str(len(picture_name)))
if len(FPOGX) >= len(picture_name):
for i in range(0, len(picture_name)):
img_rd = cv2.imread(img_path + picture_name[i], cv2.IMREAD_UNCHANGED)
x1 = 1280 * abs(FPOGX[int(i)])
y1 = 720 * abs(FPOGY[int(i)])
# print(int(y1 - 50), int(y1 + 50), int(x1 - 50), int(x1 + 50))
img = img_rd[int(y1 - 50):int(y1 + 50), int(x1 - 50):int(x1 + 50)]
filename = path_out + picture_name[i]
# cv2.imwrite(path_out + picture_name[i], img)
try:
ext = os.path.splitext(filename)[1]
result, n = cv2.imencode(ext, img, params=None)
if result:
with open(filename, mode='w+b') as f:
n.tofile(f)
except Exception as e:
print(e)
if len(FPOGX) <= len(picture_name):
for i in range(0, len(FPOGX)):
img_rd = cv2.imread(img_path + picture_name[i], cv2.IMREAD_UNCHANGED)
x1 = 1280 * abs(FPOGX[int(i)])
y1 = 720 * abs(FPOGY[int(i)])
# print(int(y1 - 50), int(y1 + 50), int(x1 - 50), int(x1 + 50))
img = img_rd[int(y1 - 50):int(y1 + 50), int(x1 - 50):int(x1 + 50)]
filename = path_out + picture_name[i]
try:
ext = os.path.splitext(filename)[1]
print(ext)
result, n = cv2.imencode(ext, img, params=None)
if result:
with open(filename, mode='w+b') as f:
n.tofile(f)
except Exception as e:
print(e)
continue
#
num = [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
users = ['']#被实验者的名字
# ,
for n in range(len(num)):
img_path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/video_new/image/'+str(num[n])+'/'
for user in range(len(users)):
gaze_path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/191202/'+users[user]+'/data_process/Experimenter/all_gaze/'+str(num[n])+'_all_gaze.csv'
print(users[user] + str(num[n]))
path_out = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/191202/'+users[user]+'/data_process/ROI/roi_picture_7_27/'+str(num[n])+'/'
mkdir(path_out)
# print(path_out_new)
ROI_video()
#将图片保存为一秒储存在一个文件夹中
#路径中有韩文的cv2读取图片的代码
def imread(filename, flags=cv2.IMREAD_COLOR, dtype=np.uint8):
try:
n = np.fromfile(filename, dtype)
img = cv2.imdecode(n, flags)
return img
except Exception as e:
print(e)
return None
#路径中有韩文的cv2写入图片的代码
def imwrite(filename, img, params=None):
try:
ext = os.path.splitext(filename)[1]
result, n = cv2.imencode(ext, img, params)
if result:
with open(filename, mode='w+b') as f:
n.tofile(f)
return True
else:
return False
except Exception as e:
print(e)
return False
def clip_image():
# img_path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/video_new/1_1/'
picture_name = os.listdir(img_path)
picture_name = natsorted(picture_name)
for i in range(1, len(picture_name)):
if (i % 60) == 0:
path_save = path_out + str(i) + '/'
mkdir(path_save)
for j in range(int(i - 60), int(i)):
print(j)
#当路径中有韩文存在的时候cv2读取和写入图片的代码
img = imread(img_path + picture_name[j],flags=cv2.IMREAD_COLOR, dtype=np.uint8)
imwrite(path_save + picture_name[j], img,params=None)
#当路径都是英文的时候的代码
# img = cv2.imread(img_path + picture_name[j])
# cv2.imwrite(path_save + picture_name[j], img)
print(picture_name[i])
num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
users = ['']#被实验者的名字
# ,
for n in range(len(num)):
for user in range(len(users)):
print(users[user] + str(num[n]))
img_path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/191202/'+users[user]+'/data_process/ROI/roi_picture_7_27/'+str(num[n])+'/'
path_out = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/191202/'+users[user]+'/data_process/ROI/clip_roi_picture_7_27/'+str(num[n])+'/'
clip_image()
将得到的一秒60张图图片转为视频
import cv2
import os
from PIL import Image
from moviepy.editor import *
def videos():
fps = 60
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
video_writer = cv2.VideoWriter(filename= path_out + users[user]+ '_'+str(m+1) + '.mp4', fourcc=fourcc, fps=fps, frameSize=(100,100))
for i in range(0,len(image_name)):
img = imread(image_path + image_name[i], flags=cv2.IMREAD_COLOR, dtype=np.uint8)
# cv2.imshow(str(image_name[i]),img)
# img = cv2.imread(image_path + image_name[i])
cv2.waitKey(100)
# video_writer.write(img)
print(str(image_name[i]) + ' done!' )
video_writer.write(img)
# print(str(p) + '.png' + ' done!')
video_writer.release()
num = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
users = [''] #被实验者的名字
for user in range(len(users)):
for n in range(len(num)):
print(users[user] + str(num[n]))
path_roi = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/191202/'+users[user]+'/data_process/ROI/clip_roi_picture_7_27/'+str(num[n])+'/'
for root, dirs, files in os.walk(path_roi):
print(root)
print(dirs)
dirs = natsorted(dirs)
for m in range(len(dirs)):
image_path = root + str(dirs[m]) + '/'
print(image_path)
image_name = os.listdir(image_path)
image_name = natsorted(image_name)
print(image_name)
path_out = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/7_29/gaze/' + str(num[n]) + '_gaze/'
mkdir(path_out)
videos()