{"id":21768328,"url":"https://github.com/ymtoo/zed.jl","last_synced_at":"2025-03-21T05:44:18.543Z","repository":{"id":39717633,"uuid":"422510322","full_name":"ymtoo/ZED.jl","owner":"ymtoo","description":null,"archived":false,"fork":false,"pushed_at":"2022-08-16T16:59:12.000Z","size":38211,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-26T02:44:39.810Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ymtoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-29T09:06:26.000Z","updated_at":"2024-04-12T11:20:50.000Z","dependencies_parsed_at":"2022-09-20T09:10:58.189Z","dependency_job_id":null,"html_url":"https://github.com/ymtoo/ZED.jl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymtoo%2FZED.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymtoo%2FZED.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymtoo%2FZED.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymtoo%2FZED.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ymtoo","download_url":"https://codeload.github.com/ymtoo/ZED.jl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244745720,"owners_count":20503048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T13:35:34.253Z","updated_at":"2025-03-21T05:44:18.519Z","avatar_url":"https://github.com/ymtoo.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZED.jl\n\nThis is a Julia wrapper around [zed-c-api](https://github.com/stereolabs/zed-c-api) for the [ZED SDK](https://www.stereolabs.com/developers/release/).\n\n## Prerequisites\n- ZED SDK 3.7\n- zed-c-api (See the [build \u0026 install instructions](https://github.com/stereolabs/zed-c-api#installing-the-c-api))\n- Supported OS: Linux\n\n## Installation\n```julia-repl\njulia\u003e]\npkg\u003e add https://github.com/ymtoo/ZED.jl\n```\n\n## Usage\n### Tutorial 2: image capture\n```julia\nusing ZED\n\n# create a ZED camera\ncamera_id = 0\nsl_create_camera(camera_id)\n\ninit_param = SL_InitParameters(camera_id)\ninit_param.resolution = ZED.SL_RESOLUTION_HD720\ninit_param.depth_maximum_distance = 40\ninit_param.depth_minimum_distance = -1\ninit_param.coordinate_unit = ZED.SL_UNIT_METER\n\n# open the camera\nstate = sl_open_camera(camera_id, init_param, \"\", \"\", 0, \"\", \"\", \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Open\")\n    return 1\nend\n\nrt_param = SL_RuntimeParameters()\n\nwidth = sl_get_width(camera_id) \nheight = sl_get_height(camera_id) \n\nimage_ptr = sl_mat_create_new(width, \n                              height, \n                              ZED.SL_MAT_TYPE_U8_C4, \n                              ZED.SL_MEM_CPU)\n\n# Capture 50 frames and stop\nlet i = 0\n    while (i \u003c 50)\n        # Grab an image\n        state = sl_grab(camera_id, rt_param)\n        if state == SL_ERROR_CODE(0)\n    \t    # Get the left image\n            sl_retrieve_image(camera_id, \n                              image_ptr, \n                              ZED.SL_VIEW_LEFT, \n                              ZED.SL_MEM_CPU, \n                              width, \n                              height)\n            w = sl_mat_get_width(image_ptr)\n            h = sl_mat_get_height(image_ptr)\n            timestamp = sl_get_current_timestamp(camera_id; indatetime=true)\n            println(\"Image resolution: $(h) x $(w) || $(timestamp)\")\n            i += 1\n        end\n    end\nend\n\nsl_close_camera(camera_id)\n```\n\n### Tutorial 4: positional tracking\n```julia\nusing ZED\n\n# create a ZED camera\ncamera_id = 0\nsl_create_camera(camera_id)\n\ninit_param = SL_InitParameters(camera_id)\ninit_param.camera_fps = 30\ninit_param.resolution = ZED.SL_RESOLUTION_HD1080\ninit_param.input_type = ZED.SL_INPUT_TYPE_USB\n#init_param.camera_device_id = camera_id\ninit_param.camera_image_flip = ZED.SL_FLIP_MODE_AUTO \ninit_param.camera_disable_self_calib = false\ninit_param.enable_image_enhancement = true\ninit_param.svo_real_time_mode = true\ninit_param.depth_mode = ZED.SL_DEPTH_MODE_PERFORMANCE\ninit_param.depth_stabilization = true\ninit_param.depth_maximum_distance = 40\ninit_param.depth_minimum_distance = -1\ninit_param.coordinate_unit = ZED.SL_UNIT_METER\ninit_param.coordinate_system = ZED.SL_COORDINATE_SYSTEM_LEFT_HANDED_Y_UP\ninit_param.sdk_gpu_id = -1\ninit_param.sdk_verbose = false\ninit_param.sensors_required = false\ninit_param.enable_right_side_measure = false\n\n# open the camera\nstate = sl_open_camera(camera_id, init_param, \"\", \"\", 0, \"\", \"\", \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Open Camera $(state), exit program.\")\n    return 1\nend\n\ntracking_param = SL_PositionalTrackingParameters()\ntracking_param.enable_area_memory = true\ntracking_param.enable_imu_fusion = true\ntracking_param.enable_pose_smothing = false\ntracking_param.initial_world_position = ZED.SL_Vector3(0, 0, 0)\ntracking_param.initial_world_rotation = ZED.SL_Quaternion(0, 0, 0, 1)\ntracking_param.set_as_static = false\ntracking_param.set_floor_as_origin = false\n\nstate = sl_enable_positional_tracking(camera_id, tracking_param, \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Enable Tracking $(state), exit program.\")\n    return 1\nend\n\n\n\n```\n\n### Tutorial 5: spatial mapping\n```julia\nusing ZED\n\n# create a ZED camera\ncamera_id = 0\nsl_create_camera(camera_id)\n\ninit_param = SL_InitParameters(camera_id)\ninit_param.camera_fps = 30\ninit_param.resolution = ZED.SL_RESOLUTION_HD1080\ninit_param.input_type = ZED.SL_INPUT_TYPE_USB\n#init_param.camera_device_id = camera_id\ninit_param.camera_image_flip = ZED.SL_FLIP_MODE_AUTO \ninit_param.camera_disable_self_calib = false\ninit_param.enable_image_enhancement = true\ninit_param.svo_real_time_mode = true\ninit_param.depth_mode = ZED.SL_DEPTH_MODE_PERFORMANCE\ninit_param.depth_stabilization = true\ninit_param.depth_maximum_distance = 40\ninit_param.depth_minimum_distance = -1\ninit_param.coordinate_unit = ZED.SL_UNIT_METER\ninit_param.coordinate_system = ZED.SL_COORDINATE_SYSTEM_LEFT_HANDED_Y_UP\ninit_param.sdk_gpu_id = -1\ninit_param.sdk_verbose = false\ninit_param.sensors_required = false\ninit_param.enable_right_side_measure = false\n\n# open the camera\nstate = sl_open_camera(camera_id, init_param, \"\", \"\", 0, \"\", \"\", \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Open Camera $(state), exit program.\")\n    return 1\nend\n\ntracking_param = SL_PositionalTrackingParameters()\ntracking_param.enable_area_memory = true\ntracking_param.enable_imu_fusion = true\ntracking_param.enable_pose_smothing = false\ntracking_param.initial_world_position = ZED.SL_Vector3(0, 0, 0)\ntracking_param.initial_world_rotation = ZED.SL_Quaternion(0, 0, 0, 1)\ntracking_param.set_as_static = false\ntracking_param.set_floor_as_origin = false\n\nstate = sl_enable_positional_tracking(camera_id, tracking_param, \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Enable Tracking $(state), exit program.\")\n    return 1\nend\n\nmapping_param = SL_SpatialMappingParameters()\nmapping_param.map_type = ZED.SL_SPATIAL_MAP_TYPE_MESH;\nmapping_param.max_memory_usage = 2048\nmapping_param.range_meter = Cfloat(0)\nmapping_param.resolution_meter = Cfloat(0.05)\nmapping_param.save_texture = true\nmapping_param.use_chunk_only = true\nmapping_param.reverse_vertex_order = false\n\nstate = sl_enable_spatial_mapping(camera_id, mapping_param)\nif state != SL_ERROR_CODE(0)\n    println(\"Error Spatial Mapping $(state), exit program.\")\n    return 1\nend\n\nrt_param = SL_RuntimeParameters()\nrt_param.enable_depth = true\nrt_param.confidence_threshold = 100\nrt_param.reference_frame = ZED.SL_REFERENCE_FRAME_CAMERA\nrt_param.sensing_mode = ZED.SL_SENSING_MODE_STANDARD\nrt_param.texture_confidence_threshold = 100\n\nwidth = sl_get_width(camera_id) \nheight = sl_get_height(camera_id) \n\nlet i = 1\n    while i ≤ 50\n        grab_state = sl_grab(camera_id, rt_param) # Grab an image\n        if grab_state == SL_ERROR_CODE(0)\n            map_state = sl_get_spatial_mapping_state(camera_id)\n            println(\"\\r Images captured: $(i) / 50 \\\n                    || Spatial mapping state: $(map_state)\")\n            i += 1\n        end\n    end\nend\n\n@info \"Extracting Mesh...\"\n# Extract the whole mesh.\nsl_extract_whole_spatial_map(camera_id)\n# Filter the mesh\nMAX_SUBMESH = 1000\ns = sizeof(zeros(Cint, MAX_SUBMESH))\nnb_vertices = Libc.malloc(s)\nnb_triangles = Libc.malloc(s)\nnb_updated_submeshes = Libc.malloc(1)\nupdated_indices = Libc.malloc(s)\nnb_vertices_tot = Libc.malloc(1)\nnb_triangles_tot = Libc.malloc(1)\nsl_filter_mesh(camera_id, \n               ZED.SL_MESH_FILTER_MEDIUM, \n               nb_vertices, \n               nb_triangles, \n               nb_updated_submeshes, \n               updated_indices, \n               nb_vertices_tot, \n               nb_triangles_tot, \n               MAX_SUBMESH)\ntextures_size = Libc.malloc(1)\nsl_apply_texture(camera_id,\n                 nb_vertices, \n                 nb_triangles, \n                 nb_updated_submeshes, \n                 updated_indices, \n                 nb_vertices_tot, \n                 nb_triangles_tot,\n                 textures_size,\n                 MAX_SUBMESH)\n# Save the mesh\n@info \"Saving Mesh ...\"\nsl_save_mesh(camera_id, \"mesh.obj\", ZED.SL_MESH_FILE_FORMAT_OBJ)\n\nLibc.free(nb_vertices)\nLibc.free(nb_triangles)\nLibc.free(nb_updated_submeshes)\nLibc.free(updated_indices)\nLibc.free(nb_vertices_tot)\nLibc.free(nb_triangles_tot)\nLibc.free(textures_size)\nsl_disable_spatial_mapping(camera_id)\nsl_disable_positional_tracking(camera_id, \"\")\nsl_close_camera(camera_id)\n```\n\n### SVO Recording\n```julia\nusing Dates\nusing ZED\n\n# create a ZED camera\ncamera_id = 0\nsl_create_camera(camera_id)\n\ninit_param = SL_InitParameters(camera_id)\ninit_param.resolution = ZED.SL_RESOLUTION_HD720\ninit_param.depth_maximum_distance = 40\ninit_param.depth_minimum_distance = -1\ninit_param.coordinate_unit = ZED.SL_UNIT_METER\n\n# open the camera\nstate = sl_open_camera(camera_id, init_param, \"\", \"\", 0, \"\", \"\", \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Open\")\n    return 1\nend\n\n# enable recording\npath_output = \"demo.svo\" # save to the current directory\ncompression = ZED.SL_SVO_COMPRESSION_MODE_LOSSLESS\nbitrate = 7000\nfps = 30\nreturned_state = sl_enable_recording(camera_id,\n                                     path_output,\n                                     compression,\n                                     bitrate,\n                                     fps,\n                                     false)\n\ntotalrecordtime = Millisecond(30000) # 30 seconds\ncurrenttime = now()\nrt_param = SL_RuntimeParameters()\n@info \"Start recording...\"\nwhile now() - currenttime \u003c totalrecordtime\n    state = sl_grab(camera_id, rt_param)\n    state != SL_ERROR_CODE(0) \u0026\u0026 break\nend\n\nsl_disable_recording(camera_id)\nsl_close_camera(camera_id)\n```\n\n### SVO Playback\n```julia\nusing ZED\n\n# create a ZED camera\ncamera_id = 0\nsl_create_camera(camera_id)\n\ninit_param = SL_InitParameters(camera_id)\ninit_param.input_type = ZED.SL_INPUT_TYPE_SVO\ninit_param.svo_real_time_mode = false\n\n# open the camera\npath_svo = \"./test/data/dummy.svo\"\nstate = sl_open_camera(camera_id, init_param, path_svo, \"\", 0, \"\", \"\", \"\")\nif state != SL_ERROR_CODE(0)\n    println(\"Error Open\")\n    return 1\nend\n\nnumframes = sl_get_svo_number_of_frames(camera_id)\n@info \"SVO contains $(numframes) frames\"\n\nrt_param = SL_RuntimeParameters()\n\nwidth = sl_get_width(camera_id) \nheight = sl_get_height(camera_id) \n\nimage_ptr = sl_mat_create_new(width, \n                              height, \n                              ZED.SL_MAT_TYPE_U8_C4, \n                              ZED.SL_MEM_CPU)\n\nframes = zeros(Cuchar, height, width, 4, numframes)\nlet i = 0\n    while (i \u003c numframes)\n        # Grab an image\n        state = sl_grab(camera_id, rt_param)\n        println(state)\n        if state == SL_ERROR_CODE(0)\n    \t    # Get the left image\n            sl_retrieve_image(camera_id, \n                              image_ptr, \n                              ZED.SL_VIEW_LEFT, \n                              ZED.SL_MEM_CPU, \n                              width, \n                              height)\n\n            svo_position = sl_get_svo_position(camera_id)\n            frames[:,:,:,svo_position] = getframes(image_ptr,\n                                                   ZED.SL_MAT_TYPE_U8_C4)\n            \n            println(\"Get frame #$(svo_position).\")\n            i += 1\n        elseif state == ZED.SL_ERROR_CODE_END_OF_SVOFILE_REACHED\n            sl_set_svo_position(camera_id, 0)\n            break\n        else\n            println(\"Grab ZED : $(state)\");\n            break\n        end\n    end\nend\nsl_close_camera(camera_id)\n```\n\n## Implemented APIs\n### Types\n- USB_DEVICE\n- SL_ERROR_CODE\n- SL_RESOLUTION\n- SL_UNIT\n- SL_COORDINATE_SYSTEM\n- SL_MEM\n- SL_INPUT_TYPE\n- SL_REFERENCE_FRAME\n- SL_VIEW\n- SL_SENSING_MODE\n- SL_DEPTH_MODE\n- SL_FLIP_MODE\n- SL_SVO_COMPRESSION_MODE\n- SL_MAT_TYPE\n- SL_InitParameters\n- SL_RuntimeParameters\n- SL_PositionalTrackingParameters\n\n### Interface functions\n- sl_unload_all_instances\n- sl_find_usb_device \n- sl_create_camera  \n- sl_close_camera\n- sl_open_camera    \n- sl_is_opened       \n- sl_get_sdk_version \n- sl_get_camera_firmware\n- sl_grab\n- sl_enable_recording\n- sl_disable_recording\n- sl_pause_recording\n- sl_get_width\n- sl_get_height\n- sl_get_current_timestamp\n\n### Mat\n- sl_mat_create_new  \n- sl_mat_is_init\n- sl_mat_free\n- sl_mat_get_infos\n- sl_mat_get_width\n- sl_mat_get_height\n- sl_mat_get_channels\n- sl_mat_get_memory_type\n- sl_mat_set_value_uchar\n- sl_mat_set_value_uchar2\n- sl_mat_set_value_uchar3\n- sl_mat_set_value_uchar4\n- sl_mat_set_value_float\n- sl_mat_set_value_float2\n- sl_mat_set_value_float3\n- sl_mat_set_value_float4\n- sl_mat_get_value_uchar\n- sl_mat_get_value_uchar2\n- sl_mat_get_value_uchar3\n- sl_mat_get_value_uchar4\n- sl_mat_get_value_float\n- sl_mat_get_value_float2\n- sl_mat_get_value_float3\n- sl_mat_get_value_float4\n- sl_mat_set_to_uchar\n- sl_mat_set_to_uchar2\n- sl_mat_set_to_uchar3\n- sl_mat_set_to_uchar4\n- sl_mat_set_to_float\n- sl_mat_set_to_float2\n- sl_mat_set_to_float3\n- sl_mat_set_to_float4\n\n### Retrieve\n- sl_retrieve_image\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymtoo%2Fzed.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fymtoo%2Fzed.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymtoo%2Fzed.jl/lists"}