Skip to content

rndM/SenseBioTek

Repository files navigation

🌿 SenseBioTek — Opportunities Scraper

Interface web Flask + moteur de scraping pour identifier des opportunités d'automatisation olfactive bio-inspirée.


Développé pour SenseBioTekInnovation en détection olfactive intelligente par Renaud MOUREN (renaud.mouren@learner.42.tech) dans le cadre du Hackathon "Sprint for Impact 2026".


📋 Table des matières


🤝 Contexte Sprint for Impact

Sprint for Impact est un hackathon territorial orienté innovation appliquée, réunissant startups, étudiants, mentors et jurys d'investisseurs sur 3 jours.

L'événement met l'accent sur:

  • la collaboration entre entrepreneurs et écoles du territoire
  • l'accélération de sujets concrets de développement produit
  • un format rythmé par pitchs, mentorat, travail en équipe et restitution finale

L'édition 2026 a eu lieu du 31 mars au 2 avril à Marseille.


🎯 Description

Cette application développée pour SenseBioTek permet d'identifier des opportunités d'innovation pour des nez électroniques (Enose) en analysant automatiquement :

  1. Des systèmes de détection olfactive biologiques : chiens renifleurs, insectes, plantes bio-indicatrices, lichens, champignons, etc.
  2. Des processus manuels ou subjectifs : panels de dégustation, inspections humaines, méthodes artisanales.
  3. Des problèmes liés aux odeurs : nuisances, contrôles qualité, diagnostics médicaux.

L'IA analyse ensuite ces données pour proposer des solutions d'automatisation via des capteurs électroniques, en évaluant le potentiel d'innovation de chaque cas.

🔍 Cas d'usage typiques

Domaine Détection biologique Opportunité Enose SenseBioTek
🐕 Sécurité Chiens renifleurs (explosifs) Réseau de capteurs MOX + IA embarquée
🍷 Agroalimentaire Panels de dégustateurs humains Capteurs COV en ligne pour maturité
🌿 Environnement Lichens indicateurs de pollution Stations micro-capteurs IoT low-cost
🏥 Médical Analyse d'haleine par experts Capteurs portables pour diagnostic précoce
🍄 Agriculture Mycélium détectant stress des sols Capteurs enfouis + analyse temps réel

✨ Fonctionnalités

🔎 Recherche web

  • Collecte via DDGS : recherche textuelle par keyword
  • Extraction de contenu : récupération du texte complet via trafilatura (optionnelle)
  • Déduplication des URLs : réduction des doublons entre keywords

🧠 Analyse des opportunités

  • OpenRouter si disponible : génération d'opportunités structurées via LLM
  • Fallback heuristique : si l'IA n'est pas disponible, l'analyse continue avec un mode local
  • Format JSON structuré : sortie prête pour intégration et exploitation UI

⚙️ Flexibilité et contrôle

  • Mots-clés externalisés : édition via keywords.txt sans modifier le code
  • Suggestions de keywords : génération depuis l'interface web
  • Historique SQLite : analyses et opportunités consultables dans l'UI

💾 Export et traçabilité

  • Deux fichiers JSON : résultats complets + opportunités seules
  • Métadonnées : timestamp, configuration, statistiques
  • Encodage UTF-8 : compatibilité avec caractères spéciaux

📦 Installation

Prérequis

  • Python 3.10 ou supérieur
  • pip (gestionnaire de packages Python)

Étapes d'installation

# 1. Aller dans le dossier du projet
cd sensebiotek-scraper

# 2. Lancer via script (recommandé)
# Le script crée/active automatiquement l'environnement virtuel
# et installe les dépendances si nécessaire.
./start_linux.sh
# ou: ./start_mac.command
# ou: start_windows.bat

Option manuelle (avancée) :

python3 -m venv sens-nose
source sens-nose/bin/activate  # Linux/Mac
# ou : sens-nose\Scripts\activate  # Windows
pip install -r requirements.txt
python -m flask --app app.app run --debug

Vérification de l'installation

# Tester les imports critiques
python -c "
from ddgs import DDGS
import trafilatura
from openai import OpenAI
print('✅ Toutes les dépendances sont installées')
"

⚙️ Configuration

🔑 Fichier .env (obligatoire pour l'IA)

Créez un fichier .env à la racine du projet :

# CLÉS API — au moins une clé IA est requise

# OpenRouter (OPTIONNEL — fallback IA)
# → https://openrouter.ai/keys
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxx

# Google Gemini (RECOMMANDÉ — backend prioritaire)
# → https://aistudio.google.com/apikey
GOOGLE_API_KEY=AIzaSyD-xxxxxxxxxxxxxxxxxxxx

⚠️ Important : Ne committez jamais votre fichier .env dans un dépôt public.

📄 Fichier keywords.txt (mots-clés personnalisés)

L'application charge automatiquement les keywords depuis keywords.txt :

# SenseBioTek — Mots-clés pour Bio-Opportunities Scraper
# Format : un mot-clé par ligne
# Les lignes commençant par # sont des commentaires (ignorées)
# Les lignes vides sont ignorées

# 🌾 Agriculture & Alimentation
crop disease detection volatile organic compounds
fruit ripeness ethylene sensor automation
cheese ripening monitoring aroma electronic nose

# 🏥 Médical & Santé
breath analysis disease detection volatile biomarkers
wound infection detection odor point-of-care sensor

# 🐕 Bio-détecteurs animaux
sniffer dog limitations cost explosive detection replacement
truffle hunting pig automation electronic nose

# 🇫🇷 Keywords en français
nez électronique application industrielle capteurs gaz
détection maladie plante odeur automatisation agriculture

# Ajoutez vos propres keywords ci-dessous :

Sources de keywords

  1. Interface web : sélection et ajout de keywords
  2. Base SQLite : suggestions persistées et historisées
  3. Fichier externe : keywords.txt

📊 Dépendances externes (pratique)

Service Usage
DDGS Recherche web de documents
OpenRouter Analyse IA (optionnelle)
Gemini Suggestions de keywords dans l'UI (optionnel)

🚀 Utilisation

Interface web (GUI)

# Interface web (recommandé)
python -m flask --app app.app run --debug

# Ou via scripts de lancement
./start_linux.sh
./start_mac.command
start_windows.bat

Les scripts de lancement appliquent automatiquement:

  • vérification Python 3.10+
  • refus de démarrage si .env est versionné
  • fallback vers le port 5001 si 5000 est déjà occupé (sauf si PORT est forcé)

Parcours utilisateur

  1. Ouvrir Nouvelle analyse.
  2. Sélectionner ou ajouter des keywords.
  3. Lancer l'analyse et suivre la progression en temps réel.
  4. Consulter les résultats et l'historique.

📊 Format des résultats

Fichiers générés

output/
├── sensebiotek_full_YYYYMMDD_HHMMSS_ffffff.json    # Données brutes + analyse complète
└── sensebiotek_opps_YYYYMMDD_HHMMSS_ffffff.json    # Opportunités seules (partageable)

Structure d'une opportunité (JSON)

{
  "bio_detector": "Chien renifleur",
  "domaine": "Sécurité aéroportuaire",
  "detecte": "Explosifs et substances illicites",
  "solution_sens_nose": "Réseau de capteurs MOX + PID embarqués sur robot mobile avec IA edge",
  "potentiel": "Émergent",
  "argument_commercial": "Réduction de 70% des coûts opérationnels, détection 24/7 sans fatigue",
  "complexite_technique": "Moyenne"
}

Niveaux de potentiel d'innovation

Niveau Icône Description Action recommandée
Blue Ocean 🔷 Aucune implémentation Enose documentée 🎯 Priorité maximale : prototyper rapidement
Émergent 🔹 Recherches académiques, pas de produit commercial 🔬 Monitorer l'état de l'art
Saturé Solutions commerciales déjà disponibles 📊 Analyser les différentiateurs ou ignorer

🔧 Dépannage

Aucune clé IA disponible

Cause : Le fichier .env est manquant ou ne contient ni GOOGLE_API_KEY, ni OPENROUTER_API_KEY.

Solution :

# Vérifier que le fichier existe
ls -la .env

# Vérifier son contenu
cat .env

ModuleNotFoundError: No module named 'xxx'

Cause : Une dépendance n'est pas installée.

Solution :

pip install -r requirements.txt

Port 5000 is in use

Cause : Une autre application écoute déjà sur le port 5000.

Solutions :

  1. Utiliser les scripts de lancement (fallback auto vers 5001)
  2. Forcer un port manuellement : PORT=5001 ./start_linux.sh

Rate limit ou 429 Too Many Requests

Cause : Vous avez dépassé le quota de l'API utilisée.

Solutions :

  1. Réduire le nombre de keywords dans l'interface
  2. Vérifier la clé OpenRouter dans .env
  3. Attendre : les quotas se réinitialisent selon le fournisseur

❌ Résultats peu pertinents ou incomplets

Cause : Peu de documents collectés ou contexte de recherche faible.

Solutions :

  1. Affiner les keywords dans Nouvelle analyse
  2. Lancer une nouvelle collecte avec des formulations plus précises

❌ Extraction trafilatura échoue systématiquement

Cause : Version incompatible ou pages dynamiques/protégées.

Solutions :

  1. Mettre à jour trafilatura : pip install --upgrade trafilatura
  2. Relancer une analyse avec moins de keywords (certaines pages bloquent l'extraction)

📁 Structure du projet

sensebiotek-scraper/
├── app/                       # Interface Flask
│   ├── app.py
│   ├── database.py
│   ├── utils.py
│   ├── static/
│   └── templates/
├── scraper/                   # Moteur de collecte/analyse/export
│   ├── __init__.py
│   ├── config.py
│   └── engine.py
├── keywords.txt               # Mots-clés personnalisés (éditable)
├── requirements.txt           # Dépendances Python
├── start_linux.sh             # Lanceur Linux
├── start_mac.command          # Lanceur macOS
├── start_windows.bat          # Lanceur Windows
├── output/                    # Dossier de sortie (généré)
└── README.md                  # Ce fichier

Fichier requirements.txt

python-dotenv>=1.0.0
ddgs>=0.5.0
trafilatura>=2.0.0
requests>=2.31.0
openai>=1.0.0
google-generativeai>=0.4.0
flask>=3.0.0

Gemini est utilisé via le SDK google-generativeai.

Lancer l'application

# Interface web (recommandé)
python -m flask --app app.app run --debug

# Ou via les scripts de lancement
./start_linux.sh
./start_mac.command
start_windows.bat

📄 Licence

Ce projet est distribué sous licence MIT.

MIT License

Copyright (c) 2026 SenseBioTek

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

📞 Contact

SenseBioTek — Innovation en détection olfactive intelligente

  • 🌐 Site web : https://sensebiotek.com
  • 📧 Email : contact@sensebiotek.com
  • 💼 LinkedIn : linkedin.com/company/sensebiotek

Contributeur principal :


Conservez les fichiers JSON générés dans output/ pour comparer les sessions d'analyse dans le temps.


© 2026 SenseBioTek — distribué sous licence MIT. 🌿👃🤖

Projet développé dans le cadre du Hackathon "Sprint for Impact"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors