IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Mjpeg depuis camera usb, et serveur http


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut Mjpeg depuis camera usb, et serveur http
    Bonjour, je cherche à afficher sur un serveur web ma camera usb au format mjpeg. J'ai trouvé un exemple sur github mais pour python 2, j'ai tenté de faire adapter par chat gpt le code, hors il ne marche pas, la page affiche: La connexion a été réinitialisée

    Voici le code génré par chat gpt en python 3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    import cv2
    import io
    import threading
    import time
    from http.server import BaseHTTPRequestHandler, HTTPServer
    from socketserver import ThreadingMixIn
     
    # Capture vidéo
    capture = cv2.VideoCapture(0)  # Changez l'index si nécessaire
     
    # Vérifiez que la caméra est ouverte
    if not capture.isOpened():
        print("Erreur : Impossible d'ouvrir la caméra.")
        exit(1)
     
     
    class CamHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path.endswith('.mjpg'):
                self.send_response(200)
                self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=--jpgboundary')
                self.end_headers()
     
                while True:
                    try:
                        # Lire une image depuis la caméra
                        ret, frame = capture.read()
                        if not ret:
                            print("Erreur lors de la capture de l'image.")
                            break
     
                        # Convertir l'image en JPEG
                        _, jpeg = cv2.imencode('.jpg', frame)
                        image_data = jpeg.tobytes()
     
                        # Envoyer l'image au client
                        self.wfile.write(b"--jpgboundary\r\n")
                        self.send_header('Content-Type', 'image/jpeg')
                        self.send_header('Content-Length', str(len(image_data)))
                        self.end_headers()
                        self.wfile.write(image_data)
                        self.wfile.write(b"\r\n")
     
                        time.sleep(0.1)  # Ajustez cette valeur si nécessaire
     
                    except Exception as e:
                        print(f"Erreur lors de l'envoi du flux MJPEG : {e}")
                        break
                return
     
            if self.path.endswith('.html'):
                self.send_response(200)
                self.send_header('Content-Type', 'text/html')
                self.end_headers()
                html = '''
                <html>
                <head></head>
                <body>
                    <h1>Flux MJPEG</h1>
                    <img src="/cam.mjpg" alt="Flux de la caméra"/>
                </body>
                </html>
                '''
                self.wfile.write(html.encode('utf-8'))
                return
     
     
    class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
        """Gère les requêtes dans un thread séparé."""
     
     
    def run_server():
        server = ThreadedHTTPServer(('0.0.0.0', 8081), CamHandler)
        print("Serveur démarré à http://127.0.0.1:8081")
        server.serve_forever()
     
     
    if __name__ == '__main__':
        # Lancer le serveur dans un thread séparé
        server_thread = threading.Thread(target=run_server)
        server_thread.start()
     
        try:
            while True:
                time.sleep(1)  # Maintenir le script en cours d'exécution
        except KeyboardInterrupt:
            print("Arrêt du serveur...")
            capture.release()
            server_thread.join()
    Le code python de départ est a cette adresse:

    https://gist.github.com/n3wtron/4624820

    Quelqu'un aurait t'il déja fais un code qui fonctionne en python 3?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Migrer un code python2 à python3 n'est pas trivial surtout si ce code utilise lui-même des dépendances déchues.
    Il est certainement plus simple de partir directement sur du python3.
    Décompose ce que tu souhaites faire: Tu peux capture les images de ta caméra à l'aide de OpenCv, créer un serveur par exemple avec Flash et éventuellement travailler tes images avec Pillow...

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    j'ai contourné le problème, voici ce que j'utilise et qui marche trés bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    from flask import Flask, Response
    import cv2
     
    app = Flask(__name__)
    cap = cv2.VideoCapture(1)
     
    def generate_frames():
        while True:
            success, frame = cap.read()
            if not success:
                break
            else:
                ret, buffer = cv2.imencode('.jpg', frame)
                frame = buffer.tobytes()
                yield (b'--frame\r\n'
                       b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
     
    @app.route('/video_feed')
    def video_feed():
        return Response(generate_frames(),
                        mimetype='multipart/x-mixed-replace; boundary=frame')
     
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8080)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer image vers serveur HTTP depuis application
    Par Invité dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 09/05/2017, 15h44
  2. BULK INSERT depuis un serveur https
    Par niko0083 dans le forum Développement
    Réponses: 3
    Dernier message: 18/05/2011, 06h34
  3. Sockets SSL ( serveur HTTPS )
    Par hexadecime dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/10/2007, 18h02
  4. [Net] Creation serveur HTTP en C++
    Par Yannos94 dans le forum C++
    Réponses: 13
    Dernier message: 14/11/2005, 12h05
  5. [Réseau] Headers vers un serveur http
    Par gexti dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 04/05/2004, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo