Repository for M.A.I.L system's analysis server.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

recorder.py 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import sys
  2. import os
  3. import pyzed.sl as sl
  4. import threading
  5. import time
  6. from signal import signal, SIGINT
  7. zed_list = []
  8. timestamp_list = []
  9. thread_list = []
  10. stop_signal = False
  11. frame_list = []
  12. record_time_per_svo = 1800
  13. name_time_list = []
  14. root_path = "/data/"
  15. filenames = os.listdir(root_path)
  16. for f in filenames:
  17. w_time = os.path.getctime(root_path + f)
  18. name_time_list.append((f, w_time))
  19. sorted_list = sorted(name_time_list, key=lambda x: x[1], reverse=True)
  20. recent_file = sorted_list[0]
  21. target_dir = str(root_path) + str(recent_file[0])
  22. def handler(signal, frame):
  23. global stop_signal
  24. global zed_list
  25. stop_signal = True
  26. time.sleep(2)
  27. exit()
  28. def grab_run(index, cameras):
  29. global stop_signal
  30. global zed_list
  31. global timestamp_list
  32. global left_list
  33. global depth_list
  34. global frame_list
  35. global taget_dir
  36. runtime = sl.RuntimeParameters()
  37. shard_count = 0
  38. while not stop_signal:
  39. #I need loop and 1800ms
  40. if frame_list[index] % record_time_per_svo == 0:
  41. filepath = '%s/%s_%s.svo'%(target_dir,str(shard_count).zfill(3),cameras[index].id+1)
  42. record_params = sl.RecordingParameters(filepath, sl.SVO_COMPRESSION_MODE.H264)
  43. err = zed_list[index].enable_recording(record_params)
  44. #print('new shard created')
  45. shard_count += 1
  46. if zed_list[index].grab(runtime) == sl.ERROR_CODE.SUCCESS :
  47. frame_list[index] += 1
  48. #if zed_list[index].grab() == "SUCCESS":
  49. # zed_list[index].record()
  50. #print("Frame count: " + str(frame_list[index]), end='\r')
  51. if zed_list[index].grab(runtime) == sl.ERROR_CODE.SUCCESS :
  52. frame_list[index] += 1
  53. zed_list[index].disable_recording()
  54. filepath = '%s/log.txt'%(target_dir)
  55. f = open(filepath, 'w')
  56. f.write('record succesfully stopped')
  57. f.close()
  58. #print('saved')
  59. def main():
  60. signal(SIGINT, handler)
  61. #print('Running...')
  62. init = sl.InitParameters()
  63. init.camera_resolution = sl.RESOLUTION.HD1080
  64. init.camera_fps = 30
  65. name_list = []
  66. cameras = sl.Camera.get_device_list()
  67. #print(cameras)
  68. index = 0
  69. for cam in cameras:
  70. init.set_from_serial_number(cam.serial_number)
  71. name_list.append("ZED {}".format(cam.serial_number))
  72. print("Opening {}".format(name_list[index]))
  73. zed_list.append(sl.Camera())
  74. timestamp_list.append(0)
  75. frame_list.append(0)
  76. status = zed_list[index].open(init)
  77. if status != sl.ERROR_CODE.SUCCESS:
  78. print(repr(status))
  79. zed_list[index].close()
  80. index = index +1
  81. #Start camera threads
  82. for index in range(0, len(zed_list)):
  83. if zed_list[index].is_opened():
  84. thread_list.append(threading.Thread(target=grab_run, args=(index,cameras)))
  85. thread_list[index].start()
  86. if __name__ == "__main__":
  87. main()