code: def list_cameras():
      
      ctx = lib.gp_context_new()
      camlist_p = new_gp_object("CameraList")
      port_list_p = new_gp_object("GPPortInfoList")
      lib.gp_port_info_list_load(port_list_p)
      abilities_list_p = new_gp_object("CameraAbilitiesList")
      lib.gp_abilities_list_load(abilities_list_p, ctx)
      lib.gp_abilities_list_detect(abilities_list_p, port_list_p,
                                   camlist_p, ctx)
      out = []
      for idx in range(lib.gp_list_count(camlist_p)):
          name = get_string(lib.gp_list_get_name, camlist_p, idx)
          value = get_string(lib.gp_list_get_value, camlist_p, idx)
  
          # Skip iteration if no matches
          matches = re.match(r"usb:(\d+),(\d+)", value)
          if not matches:
              continue
  
          bus_no, device_no = (int(x) for x in matches.groups())
          abilities = ffi.new("CameraAbilities*")
          ability_idx = lib.gp_abilities_list_lookup_model(
              abilities_list_p, name.encode())
          lib.gp_abilities_list_get_abilities(abilities_list_p, ability_idx,
                                              abilities)
          if abilities.device_type == lib.GP_DEVICE_STILL_CAMERA:
              out.append(Camera(bus_no, device_no, lazy=True,
                                _abilities=abilities))
      lib.gp_list_free(camlist_p)
      lib.gp_port_info_list_free(port_list_p)
      lib.gp_abilities_list_free(abilities_list_p)
      return out
docs: List all attached USB cameras that are supported by libgphoto2.
  
      :return:    All recognized cameras
      :rtype:     list of :py:class:`Camera`