mirror of
https://github.com/correl/dejavu.git
synced 2024-11-23 11:09:52 +00:00
Added Docker option
This commit is contained in:
parent
16d7f1d5d3
commit
c7be599ff4
7 changed files with 116 additions and 14 deletions
63
README.md
63
README.md
|
@ -8,15 +8,58 @@ Dejavu can memorize audio by listening to it once and fingerprinting it. Then by
|
||||||
|
|
||||||
Note that for voice recognition, Dejavu is not the right tool! Dejavu excels at recognition of exact signals with reasonable amounts of noise.
|
Note that for voice recognition, Dejavu is not the right tool! Dejavu excels at recognition of exact signals with reasonable amounts of noise.
|
||||||
|
|
||||||
## Installation and Dependencies:
|
## Quickstart with Docker
|
||||||
|
|
||||||
Read [INSTALLATION.md](INSTALLATION.md)
|
First, install [Docker](https://docs.docker.com/get-docker/).
|
||||||
|
|
||||||
## Setup
|
```shell
|
||||||
|
# build and then run our containers
|
||||||
|
$ docker-compose build
|
||||||
|
$ docker-compose up -d
|
||||||
|
|
||||||
First, install the above dependencies.
|
# get a shell inside the container
|
||||||
|
$ docker-compose run python /bin/bash
|
||||||
|
Starting dejavu_db_1 ... done
|
||||||
|
root@f9ea95ce5cea:/code# python example_docker_postgres.py
|
||||||
|
Fingerprinting channel 1/2 for test/woodward_43s.wav
|
||||||
|
Fingerprinting channel 1/2 for test/sean_secs.wav
|
||||||
|
...
|
||||||
|
|
||||||
Second, you'll need to create a MySQL database where Dejavu can store fingerprints. For example, on your local setup:
|
# connect to the database and poke around
|
||||||
|
root@f9ea95ce5cea:/code# psql -h db -U postgres dejavu
|
||||||
|
Password for user postgres: # type "password", as specified in the docker-compose.yml !
|
||||||
|
psql (11.7 (Debian 11.7-0+deb10u1), server 10.7)
|
||||||
|
Type "help" for help.
|
||||||
|
|
||||||
|
dejavu=# \dt
|
||||||
|
List of relations
|
||||||
|
Schema | Name | Type | Owner
|
||||||
|
--------+--------------+-------+----------
|
||||||
|
public | fingerprints | table | postgres
|
||||||
|
public | songs | table | postgres
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
dejavu=# select * from fingerprints limit 5;
|
||||||
|
hash | song_id | offset | date_created | date_modified
|
||||||
|
------------------------+---------+--------+----------------------------+----------------------------
|
||||||
|
\x71ffcb900d06fe642a18 | 1 | 137 | 2020-06-03 05:14:19.400153 | 2020-06-03 05:14:19.400153
|
||||||
|
\xf731d792977330e6cc9f | 1 | 148 | 2020-06-03 05:14:19.400153 | 2020-06-03 05:14:19.400153
|
||||||
|
\x71ff24aaeeb55d7b60c4 | 1 | 146 | 2020-06-03 05:14:19.400153 | 2020-06-03 05:14:19.400153
|
||||||
|
\x29349c79b317d45a45a8 | 1 | 101 | 2020-06-03 05:14:19.400153 | 2020-06-03 05:14:19.400153
|
||||||
|
\x5a052144e67d2248ccf4 | 1 | 123 | 2020-06-03 05:14:19.400153 | 2020-06-03 05:14:19.400153
|
||||||
|
(10 rows)
|
||||||
|
|
||||||
|
# then to shut it all down...
|
||||||
|
$ docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to be able to use the microphone with the Docker container, you'll need to do a [little extra work](https://stackoverflow.com/questions/43312975/record-sound-on-ubuntu-docker-image). I haven't had the time to write this up, but if anyone wants to make a PR, I'll happily merge.
|
||||||
|
|
||||||
|
## Docker alternative on local machine
|
||||||
|
|
||||||
|
Follow instructions in [INSTALLATION.md](INSTALLATION.md)
|
||||||
|
|
||||||
|
Next, you'll need to create a MySQL database where Dejavu can store fingerprints. For example, on your local setup:
|
||||||
|
|
||||||
$ mysql -u root -p
|
$ mysql -u root -p
|
||||||
Enter password: **********
|
Enter password: **********
|
||||||
|
@ -24,15 +67,7 @@ Second, you'll need to create a MySQL database where Dejavu can store fingerprin
|
||||||
|
|
||||||
Now you're ready to start fingerprinting your audio collection!
|
Now you're ready to start fingerprinting your audio collection!
|
||||||
|
|
||||||
Obs: The same from above goes for postgres database if you want to use it.
|
You may also use Postgres, of course. The same method applies.
|
||||||
|
|
||||||
## Quickstart
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ git clone https://github.com/worldveil/dejavu.git ./dejavu
|
|
||||||
$ cd dejavu
|
|
||||||
$ python example.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## Fingerprinting
|
## Fingerprinting
|
||||||
|
|
||||||
|
|
22
docker-compose.yaml
Normal file
22
docker-compose.yaml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
build:
|
||||||
|
context: ./docker/postgres
|
||||||
|
environment:
|
||||||
|
- POSTGRES_DB=dejavu
|
||||||
|
- POSTGRES_USER=postgres
|
||||||
|
- POSTGRES_PASSWORD=password
|
||||||
|
networks:
|
||||||
|
- db_network
|
||||||
|
python:
|
||||||
|
build:
|
||||||
|
context: ./docker/python
|
||||||
|
volumes:
|
||||||
|
- .:/code
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
networks:
|
||||||
|
- db_network
|
||||||
|
networks:
|
||||||
|
db_network:
|
0
docker/.gitkeep
Normal file
0
docker/.gitkeep
Normal file
2
docker/postgres/Dockerfile
Normal file
2
docker/postgres/Dockerfile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
FROM postgres:10.7-alpine
|
||||||
|
COPY init.sql /docker-entrypoint-initdb.d/
|
2
docker/postgres/init.sql
Normal file
2
docker/postgres/init.sql
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
-- put any SQL you'd like to run on creation of the image
|
||||||
|
-- in this file :)
|
8
docker/python/Dockerfile
Normal file
8
docker/python/Dockerfile
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
FROM python:3.7
|
||||||
|
RUN apt-get update -y && apt-get upgrade -y
|
||||||
|
RUN apt-get install \
|
||||||
|
gcc nano \
|
||||||
|
ffmpeg libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 \
|
||||||
|
postgresql postgresql-contrib -y
|
||||||
|
RUN pip install numpy scipy matplotlib pydub pyaudio psycopg2
|
||||||
|
WORKDIR /code
|
33
example_docker_postgres.py
Normal file
33
example_docker_postgres.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import json
|
||||||
|
|
||||||
|
from dejavu import Dejavu
|
||||||
|
from dejavu.logic.recognizer.file_recognizer import FileRecognizer
|
||||||
|
from dejavu.logic.recognizer.microphone_recognizer import MicrophoneRecognizer
|
||||||
|
|
||||||
|
# load config from a JSON file (or anything outputting a python dictionary)
|
||||||
|
config = {
|
||||||
|
"database": {
|
||||||
|
"host": "db",
|
||||||
|
"user": "postgres",
|
||||||
|
"password": "password",
|
||||||
|
"database": "dejavu"
|
||||||
|
},
|
||||||
|
"database_type": "postgres"
|
||||||
|
}
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
# create a Dejavu instance
|
||||||
|
djv = Dejavu(config)
|
||||||
|
|
||||||
|
# Fingerprint all the mp3's in the directory we give it
|
||||||
|
djv.fingerprint_directory("test", [".wav"])
|
||||||
|
|
||||||
|
# Recognize audio from a file
|
||||||
|
results = djv.recognize(FileRecognizer, "mp3/Josh-Woodward--I-Want-To-Destroy-Something-Beautiful.mp3")
|
||||||
|
print(f"From file we recognized: {results}\n")
|
||||||
|
|
||||||
|
# Or use a recognizer without the shortcut, in anyway you would like
|
||||||
|
recognizer = FileRecognizer(djv)
|
||||||
|
results = recognizer.recognize_file("mp3/Josh-Woodward--I-Want-To-Destroy-Something-Beautiful.mp3")
|
||||||
|
print(f"No shortcut, we recognized: {results}\n")
|
Loading…
Reference in a new issue