Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/WildMeOrg/scoutbot

The computer vision for Wild Me's Scout project
https://github.com/WildMeOrg/scoutbot

Last synced: about 2 months ago
JSON representation

The computer vision for Wild Me's Scout project

Awesome Lists containing this project

README

        

================
Wild Me ScoutBot
================

|Tests| |Codecov| |Wheel| |Docker| |ReadTheDocs| |Huggingface|

.. contents:: Quick Links
:backlinks: none

.. sectnum::

How to Install
--------------

.. code-block:: bash

pip install scoutbot

or, from source:

.. code-block:: bash

git clone https://github.com/WildMeOrg/scoutbot
cd scoutbot
pip install -e .

To then add GPU acceleration, you need to replace `onnxruntime` with `onnxruntime-gpu`:

.. code-block:: bash

pip uninstall -y onnxruntime
pip install onnxruntime-gpu

How to Run
----------

You can run the tile-based Gradio demo with:

.. code-block:: bash

python app.py

or, you can run the image-based Gradio demo with:

.. code-block:: bash

python app2.py

To run with Docker:

.. code-block:: bash

docker run \
-it \
--rm \
-p 7860:7860 \
-e CONFIG=phase1 \
-e WIC_BATCH_SIZE=512 \
--gpus all \
--name scoutbot \
wildme/scoutbot:main \
python3 app2.py

To run with Docker Compose:

.. code-block:: yaml

version: "3"

services:
scoutbot:
image: wildme/scoutbot:main
command: python3 app2.py
ports:
- "7860:7860"
environment:
CONFIG: phase1
WIC_BATCH_SIZE: 512
restart: unless-stopped
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["all"]
capabilities: [gpu]

and run ``docker compose up -d``.

How to Build and Deploy
-----------------------

Docker Hub
==========

The application can also be built into a Docker image and is hosted on Docker Hub as ``wildme/scoutbot:latest``. Any time the ``main`` branch is updated or a tagged release is made (see the PyPI instructions below), an automated GitHub CD action will build and deploy the newest image to Docker Hub automatically.

To do this manually, use the code below:

.. code-block:: bash

docker login

export DOCKER_BUILDKIT=1
export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx create --name multi-arch-builder --use

docker buildx build \
-t wildme/scoutbot:latest \
--platform linux/amd64 \
--push \
.

PyPI
====

To upload the latest ScoutBot version to the Python Package Index (PyPI), follow the steps below:

#. Edit ``scoutbot/__init__.py:65`` and set ``VERSION`` to the desired version

.. code-block:: python

VERSION = 'X.Y.Z'

#. Push any changes and version update to the ``main`` branch on GitHub and wait for CI tests to pass

.. code-block:: bash

git pull origin main
git commit -am "Release for Version X.Y.Z"
git push origin main

#. Tag the ``main`` branch as a new release using the `SemVer pattern `_ (e.g., ``vX.Y.Z``)

.. code-block:: bash

git pull origin main
git tag vX.Y.Z
git push origin vX.Y.Z

#. Wait for the automated GitHub CD actions to build and push to `PyPI `_ and `Docker Hub `_.

Tests and Coverage
------------------

You can run the automated tests in the ``tests/`` folder by running:

.. code-block:: bash

pip install -r requirements.optional.txt
pytest

You may also get a coverage percentage by running:

.. code-block:: bash

coverage html

and open the `coverage/html/index.html` file in your browser.

Building Documentation
----------------------

There is Sphinx documentation in the ``docs/`` folder, which can be built by running:

.. code-block:: bash

cd docs/
pip install -r requirements.optional.txt
sphinx-build -M html . build/

Logging
-------

The script uses Python's built-in logging functionality called ``logging``. All print functions are replaced with ``log.info()``, which sends the output to two places:

#. the terminal window, and
#. the file `scoutbot.log`

Code Formatting
---------------

It's recommended that you use ``pre-commit`` to ensure linting procedures are run
on any code you write. See `pre-commit.com `_ for more information.

Reference `pre-commit's installation instructions `_ for software installation on your OS/platform. After you have the software installed, run ``pre-commit install`` on the command line. Now every time you commit to this project's code base the linter procedures will automatically run over the changed files. To run pre-commit on files preemtively from the command line use:

.. code-block:: bash

pip install -r requirements.optional.txt
pre-commit run --all-files

The code base has been formatted by `Brunette `_, which is a fork and more configurable version of `Black `_. Furthermore, try to conform to ``PEP8``. You should set up your preferred editor to use ``flake8`` as its Python linter, but pre-commit will ensure compliance before a git commit is completed. This will use the ``flake8`` configuration within ``setup.cfg``, which ignores several errors and stylistic considerations. See the ``setup.cfg`` file for a full and accurate listing of stylistic codes to ignore.

.. |Tests| image:: https://github.com/WildMeOrg/scoutbot/actions/workflows/testing.yml/badge.svg?branch=main
:target: https://github.com/WildMeOrg/scoutbot/actions/workflows/testing.yml
:alt: GitHub CI

.. |Codecov| image:: https://codecov.io/gh/WildMeOrg/scoutbot/branch/main/graph/badge.svg?token=FR6ITMWQNI
:target: https://app.codecov.io/gh/WildMeOrg/scoutbot
:alt: Codecov

.. |Wheel| image:: https://github.com/WildMeOrg/scoutbot/actions/workflows/python-publish.yml/badge.svg
:target: https://github.com/WildMeOrg/scoutbot/actions/workflows/python-publish.yml
:alt: Python Wheel

.. |Docker| image:: https://img.shields.io/docker/image-size/wildme/scoutbot/latest
:target: https://hub.docker.com/r/wildme/scoutbot
:alt: Docker

.. |ReadTheDocs| image:: https://readthedocs.org/projects/scoutbot/badge/?version=latest
:target: https://wildme-scoutbot.readthedocs.io/en/latest/?badge=latest
:alt: ReadTheDocs

.. |Huggingface| image:: https://img.shields.io/badge/HuggingFace-running-success
:target: https://huggingface.co/spaces/WildMeOrg/scoutbot
:alt: Huggingface