Skip to content

Commit

Permalink
Create README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
isaric committed Jan 1, 2024
1 parent 1775038 commit 9d90861
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# python-slack-fr

## Introduction

This is a python service that uses the face-recognition library and the slack client library to read from specified slack channels new messages.

If a message contains an image, the service will apply the face-recognition library to check for faces in the images.
For any discovered face, the service will check a mongodb collection with saved facial embeddings for a match of the detected faces.
Faces that are matched will be reported via slack message to a different specified channel along with the name of the matched embedding drawn onto
the image and the face marked with a rectangle.

Faces that are not matched to existing embeddings will be saved into the mongodb collection and a message will be sent to the same slack channel
mentioned in the previous sentence. As in the previous case, an image will be sent with the unknown faces marked with a rectangle.

The service admin should change the default name - "uknown" - to a designation for that embedding (ex. the name or alias of the detected face).
This can only be done by direct connection to the mongodb instance as a seperate admin interface does not exsist.

## How to run

The service has a single dependency - a MongoDB database. It uses only a single collection for all operations.
If running on a Raspberry Pi 4, be aware that there are no official MongoDB images that will work. Please look for
alternate repositories or make your own MongoDB image. I am linking my own example [here](https://github.com/isaric/mongodb-raspberrypi-docker).

Using the Flask library, the service exposes a single endpoint that will accept Slack Event payloads.
It is up to the operator to make sure Slack Events are configured and routed to that service. For documentation on
Slack Events and how to activate them, please check the relevant documentation [here](https://api.slack.com/apis/connections/events-api).
The service should be reachable from a public url over SSL.

### Environment variables

There are five environment variables that need to be specifed in order for the service to boot and work properly.

- SLACK_API_TOKEN - the bot token needed to access channels, read and post messages and media
- MONGO_CONNECTION_STRING - for connecting to the MongoDB database
- READ_SLACK_CHANNEL_ID - a comma seperated list of slack channel ids from which images should be read
- WRITE_SLACK_CHANNEL_ID - a single slack channel id to which messages from the service will be posted
- SLACK_VERIFICATION_TOKEN - the verification token that will be present on every incoming Slack Event guaranteeing its authenticity

### Docker and docker-compose

You can use the Docker image provided using the Github Container Registry in this repository. There is a seperate tag for ARM64 and AMD64
architectures. You can also use the provided dockerfiles to make your own image. The base images used are also my own compilation based on
others work.

The docker-compose file provided in the repository gives an example of how to run the service with dependencies and all of the environment
variables that need to be specified.

## Considerations

It is up to the operator to ensure compliance with local laws governing the use of facial recognition technology and personal data.

If you encounter any bugs or have changes you think would fit into this project, please file them in the Issues tab. They are welcome.

0 comments on commit 9d90861

Please sign in to comment.