def list_zoo_plugins(info=False):
    """Returns a list of available plugins registered in the
    `FiftyOne Plugins repository <https://github.com/voxel51/fiftyone-plugins>`_
    README.

    Example usage::

        import fiftyone.plugins.utils as fopu

        plugins = fopu.list_zoo_plugins()
        print(plugins)

        plugins = fopu.list_zoo_plugins(info=True)
        print(plugins)

    Args:
        info (False): whether to retrieve full plugin info for each plugin
            (True) or just return the available info from the README (False)

    Returns:
        a list of dicts describing the plugins
    """
    repo = GitHubRepository("https://github.com/voxel51/fiftyone-plugins")
    content = repo.get_file("README.md").decode()
    soup = BeautifulSoup(content, "html.parser")

    plugins = []
    for row in soup.find_all("tr"):
        cols = row.find_all(["td"])
        if len(cols) != 2:
            continue

        try:
            name = cols[0].text.strip()
            url = cols[0].find("a")["href"]
            description = cols[1].text.strip()
            plugins.append(dict(name=name, url=url, description=description))
        except Exception as e:
            logger.debug("Failed to parse plugin row: %s", e)

    if not info:
        return plugins

    tasks = [(p["url"], None) for p in plugins]
    return _get_all_plugin_info(tasks)
Returns a list of available plugins registered in the
    `FiftyOne Plugins repository <https://github.com/voxel51/fiftyone-plugins>`_
    README.

    Example usage::

        import fiftyone.plugins.utils as fopu

        plugins = fopu.list_zoo_plugins()
        print(plugins)

        plugins = fopu.list_zoo_plugins(info=True)
        print(plugins)

    Args:
        info (False): whether to retrieve full plugin info for each plugin
            (True) or just return the available info from the README (False)

    Returns:
        a list of dicts describing the plugins
    
fiftyone/plugins/utils.py