Outils pour utilisateurs

Outils du site


streaming_over_network_with_opencv_et_zeromq

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
streaming_over_network_with_opencv_et_zeromq [2022/02/18 13:15] sergestreaming_over_network_with_opencv_et_zeromq [2022/02/25 13:15] (Version actuelle) – [Profondeur d'une OAK-D Lite] serge
Ligne 3: Ligne 3:
 **Z = Zero\\ **Z = Zero\\
 M = Messaging\\ M = Messaging\\
-Q = Quoi ?**+Q = Queuing**
 </WRAP> </WRAP>
  
- +**Pas de latence, peu ce consommation CPU, en python super facile à implémenter**\\ 
- +**mais pas de réception dans VLC et Pure Data.**\\ 
 +Utiliser **[[streamer_des_images_opencv_avec_v4l2-loopback|Streamer des images OpenCV avec v4l2-loopback]]**
 =====ZeroMQ===== =====ZeroMQ=====
 **[[https://zeromq.org/|zeromq.org]]** (également écrit ØMQ, 0MQ ou ZMQ) est une bibliothèque de messagerie asynchrone haute performance **[[https://zeromq.org/|zeromq.org]]** (également écrit ØMQ, 0MQ ou ZMQ) est une bibliothèque de messagerie asynchrone haute performance
- 
   * https://fr.wikipedia.org/wiki/ZeroMQ   * https://fr.wikipedia.org/wiki/ZeroMQ
   * https://en.wikipedia.org/wiki/ZeroMQ   * https://en.wikipedia.org/wiki/ZeroMQ
  
 +=====Ressources=====
 +  * **[[https://pyimagesearch.com/2019/04/15/live-video-streaming-over-network-with-opencv-and-imagezmq/|Live video streaming over network with OpenCV and ImageZMQ]]** FFMPEG ou GStreamer sont des options, mais c'est galère à implémenter.
 +  * **[[https://stackoverflow.com/questions/43817161/how-to-send-opencv-video-footage-over-zeromq-sockets|How to send OpenCV video footage over ZeroMQ sockets?]]** sur stackoverflow.com
 +  * https://zeromq.org/languages/python/
 +  * [[https://github.com/jeffbass/imagezmq|Transporting OpenCV images]]
  
-=====imageZMQ: Transporting OpenCV images=====+=====Implémentation dans Pure Data===== 
 +  * https://github.com/sansculotte/pd-zmq
  
-https://github.com/jeffbass/imagezmq\\ +====Installation de puredata==== 
-imageZMQ is a set of Python classes that transport OpenCV images from one computer to another using PyZMQ messaging. For example, here is a screen on a Mac computer showing simultaneous video streams from 8 Raspberry Pi cameras:+  sudo apt install multimedia-puredata libzmq3-dev 
 +   
 +====Compilation du patch zmq==== 
 +  git clone git@github.com:sansculotte/pd-zmq.git 
 +  cd pd-zmq 
 +  make 
 +   
 +====Utilisation des scripts fournis==== 
 +Ça envoie et reçoit des int/string, mais pas d'images !\\ 
 +Extrait de https://github.com/sansculotte/pd-zmq/blob/master/TODO\\ 
 +<code> 
 +LATER 
 +* proper architecture workflows 
 +** multiconnects/multicast (pgm?) 
 +* complex objects 
 +** [zmf_router] -- [broker] as abstraction? 
 +** [zmf_dealer] -/ 
 +** [zmf_pair] 
 +* implement streams to send audio blocks 
 +** binary modes 
 +* send/receive modes 
 +** binary (for audio/video frames) 
 +** string (for communication w external programs) 
 +</code> 
 +Le paquet de la première image est reçu, mais il ne passe passe rien ensuite ... 
 +=====Installation du module python===== 
 +Dans un environnement virtuel python (3.9)
  
 +<file text requirements.txt>
 +opencv-python
 +imagezmq
 +</file>
  
-=====Ressources===== +<code bash> 
-  * **[[https://pyimagesearch.com/2019/04/15/live-video-streaming-over-network-with-opencv-and-imagezmq/|Live video streaming over network with OpenCV and ImageZMQ]]** L'utilisation de FFMPEG ou GStreamer est définitivement une optionMais les deux peuvent être une douleur royale à travaillerAujourd'huije vais vous montrer ma solution préférée en utilisant les bibliothèques de transmission de messages en particulier ZMQ et ImageZMQcette dernière ayant été développée par le conférencier PyImageConf 2018Jeff BassJeff a mis une tonne de travail dans ImageZMQ et ses efforts se voient vraiment+sudo apt install python3-pip 
-  * **[[https://stackoverflow.com/questions/43817161/how-to-send-opencv-video-footage-over-zeromq-sockets|How to send OpenCV video footage over ZeroMQ sockets?]]** sur stackoverflow.com+python3 -m pip install --upgrade pip 
 +sudo apt install python3-venv 
 + 
 +cd /le/dossier/de/votre/projet 
 +python3 -m venv mon_env 
 +source mon_env/bin/activate 
 +python3 -m pip install -r requirements.txt 
 +ou 
 +python3 -m pip install opencv-python imagezmq 
 +</code> 
 + 
 +====Lancement d'un script==== 
 + 
 +  cd /le/dossier/de/votre/projet 
 +  ./mon_env/bin/python3 sender_cam.py  # sender_cam.py est le script ci_dessous 
 +   
 +====Sender avec python et receive dans pd==== 
 + 
 +Bon, là je suis nul en pd ! 
 +=====Exemples===== 
 +  * Exemples inspirés de: https://github.com/jeffbass/imagezmq/tree/master/examples 
 +====Caméra==== 
 +Le principe est simple, sender envoie "image", c'est une image en np.array\\ 
 +Cet array peut être définit par ce que vous voulez.\\ 
 + 
 +Les exemples utilisent souvent imutilsqui est une surcouche en python sur OpenCV, et qui a quelques bugs. On peut s'en passer facilement, il suffit de lire la doc OpenCV, par exemple pour retailler les imagesles convertir en jpg etc ... 
 + 
 +<file python sender_cam.py> 
 +import time 
 +import imagezmq 
 +import cv2 
 + 
 +sender = imagezmq.ImageSender(connect_to='tcp://127.0.0.1:5555'
 +my_name = "moi" 
 +cap = cv2.VideoCapture(2) 
 +time.sleep(2.0) 
 +while 1: 
 +    # image peut venir de n'importe quoi ! 
 +    # ici, c'est pour une caméra 
 +    ret, image = cap.read() 
 +    if ret: 
 +        cv2.imshow("moi", image) 
 +        sender.send_image(my_name, image) 
 +        print("send:", image.shape) 
 +    if cv2.waitKey(10) == 27: 
 +        break 
 +</file>
  
-https://zeromq.org/languages/python/+<file python receiver_cam.py> 
 +import cv2 
 +import imagezmq
  
 +image_hub = imagezmq.ImageHub()
 +while 1:
 +    your_name, image = image_hub.recv_image()
 +    print(your_name, image.shape)
 +    cv2.imshow(your_name, image)
 +    image_hub.send_reply(b'OK')
 +    if cv2.waitKey(10) == 27:
 +        break
 +</file>
  
  
  
-{{tag>opencv pd pure-data pure_data python sb vlc}}+{{tag>zmc opencv pd pure-data pure_data python sb}}
streaming_over_network_with_opencv_et_zeromq.1645190130.txt.gz · Dernière modification : 2022/02/18 13:15 de serge