WhisperWatch est un projet innovant de veille technique qui permet de scraper des vidéos YouTube, de transcrire leur contenu audio en texte, et de stocker les métadonnées ainsi que les transcriptions dans une base de données. Il se concentre sur des sujets techniques tels que le Cloud et le MLOps, facilitant ainsi la veille technologique à partir de vidéos YouTube.
- Scraping de vidéos YouTube : Extraction des métadonnées des vidéos YouTube en fonction de critères définis.
- Transcription audio en texte : Utilisation du modèle Whisper pour transcrire l'audio des vidéos en texte.
- Stockage audio et texte : Sauvegarde des fichiers audio dans MinIO et des transcriptions dans une base de données SQL.
- Support des métadonnées YouTube : Stockage des métadonnées pertinentes des vidéos (titre, description, URL, date de publication).
- Veille automatisée : Utilisation de tâches Celery pour automatiser la récupération et la transcription de nouvelles vidéos YouTube.
- Docker et Docker Compose installés
- Python 3.10+
- PostgreSQL pour la base de données SQL
- MinIO comme stockage d'objets (équivalent à S3)
- Redis pour le broker Celery
- yt-dlp pour télécharger l'audio des vidéos YouTube
git clone https://github.com/username/whisperwatch.git
cd whisperwatch
Renommer le fichier .env.example
en .env
et configurer les variables d'environnement :
cp db/.env.example db/.env
Dans le fichier .env
, configurer les paramètres suivants :
MINIO_ENDPOINT=http://localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET_NAME=bucket
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=db
POSTGRES_HOST=host
POSTGRES_PORT=5432
DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_BACKEND=redis://redis:6379/0
Lancer la base de données PostgreSQL, MinIO et Redis à l'aide de Docker Compose :
cd db
docker compose up --build -d
Créer un environnement virtuel et installer les dépendances :
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Effectuer les migrations avec Alembic pour créer les tables users
et videos
dans la base de données :
alembic upgrade head
Lancer l'API FastAPI :
uvicorn app.main:app --reload
L'API sera accessible à l'adresse suivante : http://127.0.0.1:8000.
GET /api/
: Récupérer une liste de vidéos (avec pagination).POST /api/
: Créer une nouvelle entrée vidéo (scraping et transcription automatique).GET /api/{video_id}
: Récupérer les détails d'une vidéo spécifique.PUT /api/{video_id}
: Mettre à jour les détails d'une vidéo.DELETE /api/{video_id}
: Supprimer une vidéo de la base de données.
Pour ajouter une nouvelle vidéo :
curl -X POST "http://127.0.0.1:8000/api/" \
-H "Content-Type: application/json" \
-d '{
"youtube_id": "cOE2miIh1_o",
"title": "title",
"description": "A comprehensive guide to.",
"published_at": "2024-09-05T12:00:00",
"video_url": "https://www.youtube.com/watch?v=cOE2miIh1_o"
}'
Le service de transcription est géré par Whisper, qui convertit l'audio des vidéos YouTube en texte. Ces transcriptions sont ensuite stockées dans la base de données et peuvent être récupérées via l'API.
.
├── app/
│ ├── api/
│ │ └── video_api.py # Endpoints pour les vidéos
│ ├── core/
│ │ └── config.py # Configuration de l'application
│ ├── crud/
│ │ └── crud_video.py # Logique CRUD pour les vidéos
│ ├── db/
│ │ └── database.py # Configuration de la base de données
│ ├── models/
│ │ └── video.py # Modèle SQLAlchemy pour les vidéos
│ ├── schemas/
│ │ └── video.py # Schémas Pydantic pour les vidéos
│ ├── services/
│ │ ├── download_service.py # Téléchargement de l'audio
│ │ ├── transcription_service.py # Transcription des vidéos
│ │ ├── s3_service.py # Gestion du stockage MinIO
│ └── main.py # Point d'entrée de l'API
├── db/
│ ├── docker-compose.yml # Docker Compose pour PostgreSQL, Redis et MinIO
│ └── .env.example # Variables d'environnement
├── alembic/
│ └── versions/ # Migrations Alembic
├── requirements.txt # Dépendances Python
├── README.md # Documentation du projet
L'automatisation de la veille technique est gérée via Celery. Les tâches Celery exécutent régulièrement des recherches et des transcriptions automatiques sur des sujets définis dans le cadre de la veille.
celery -A app.worker worker --loglevel=info
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus d’informations. ``