web-dev-qa-db-fra.com

Comment diffuser une vidéo openCV sur une page Web HTML?

Je fabrique un robot qui aura une webcam sur celui-ci pour fournir une détection d'objet simple. Pour le moment, je voudrais simplement diffuser la vidéo sur une page Web hébergée sur le robot et pouvoir la visionner à partir d'un autre appareil. J'ai écrit un script de test simple en Python (je vais éventuellement passer au C++, mon langage de choix) qui peut obtenir un flux de ma webcam et en faire ensuite tout ce dont j'ai besoin. Le problème, alors, est que je ne peux pas écrire la vidéo dans un fichier lorsque l'application est en cours d'exécution. Le fichier n'est écrit qu'après que j'ai quitté le script. J'ai déjà un serveur Web en cours d'exécution et je peux écrire le code de base en HTML pour héberger une vidéo à partir d'un fichier, et tout cela fonctionne.

Pour résumer: Est-ce que openCV2 en Python et/ou C++ est capable de diffuser de la vidéo en utilisant uniquement openCV? Dans le cas contraire, quelle bibliothèque recommanderiez-vous d’essayer de capturer un objet de capture de CV ou un objet Mat et diffuser en continu sur une page Web? En HTML, le tag est-il une bonne idée de diffuser une vidéo en continu?

Merci beaucoup pour le conseil, je peux utiliser tous les indicateurs * que je peux obtenir!

Si vous avez besoin de quelque chose de clarifié/code affiché/explications plus approfondies que celles que j’ai données, veuillez demander et je le ferai!

16
PyroAVR

La question de la transmission en continu de trames à partir d’OpenCV et de Python a été traitée dans le fil suivant: Transférer les images OpenCV brutes dans FFmpeg

Cela n'a pas fonctionné pour moi, mais ils prétendent que cela a fonctionné pour eux. 

La raison pour laquelle cela ne fonctionne pas dans mon cas semble être que pour certaines trames de sortie, des octets supplémentaires ont été ajoutés ou perdus, quelque part entre la sortie vers stdout dans capture.py et l'entrée vers FFMPEG. Par conséquent, le nombre d'octets ne correspond pas au nombre d'images. Je ne sais pas pourquoi c'est le cas. J'ai utilisé Windows 7.

Je serai curieux d'entendre quelle est votre expérience si vous essayez ceci. J'ai aussi essayé une version modifiée de capture.py en utilisant cv2, et j'ai échoué pour les mêmes raisons. 

3

Essayez de lire ceci et ceci .

Donc, en gros, vous devez utiliser OpenCV pour capturer les images et les regrouper dans des formats spécifiques adaptés au protocole de transmission en continu. Utilisez ensuite HTML5 pour le mettre sur votre page. Vous devrez peut-être utiliser VLC ou FFMepg pour emballer votre cv :: Mat. J'espère que cela vous sera utile.

1
tomriddle_1234

Dans des conditions de laboratoire, vous envoyez des images complètes

Vous semblez être dans des conditions de laboratoire. Il existe donc une solution simpliste, mais utilisable: il vous suffit de diffuser des PNG en Base64 à l'aide de Websockets. Du côté client (navigateur Web), vous venez de recevoir les images base64 et de les charger directement dans la src d’un <img>. Cela fonctionne très bien pour les scénarios de laboratoire, bien que lent.

0
Ariel M.