Skip to content
This repository has been archived by the owner on Apr 15, 2021. It is now read-only.

Commit

Permalink
Debugging Python code for RPi demo
Browse files Browse the repository at this point in the history
  • Loading branch information
jnclink committed Mar 23, 2021
1 parent 37150b4 commit e83dcf0
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 38 deletions.
4 changes: 1 addition & 3 deletions python_prototype/EVEEX/bitstream_RPi.py
Original file line number Diff line number Diff line change
Expand Up @@ -607,9 +607,7 @@ def send_tail_bitstream(self):
tail_bitstream = self.bit_generator.construct_end_message()

self.client.send_data_to_server(tail_bitstream)

# NB : Ici, pas de "wait_for_response" car la frame va être traitée côté
# récepteur
self.client.wait_for_response()


def send_frame_RLE(self):
Expand Down
77 changes: 57 additions & 20 deletions python_prototype/EVEEX/main_PC_recepteur.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
Code fait en conjonction avec "main_RPi_emettrice.py".
"""

from time import time
import numpy as np
import cv2

from logger import Logger, LogLevel
from image_visualizer import ImageVisualizer
Expand All @@ -31,18 +31,16 @@

# Valeurs standards de macroblock_size : 8, 16 et 32
# Doit être <= 63
macroblock_size = 16
global macroblock_size

# il faut s'assurer d'avoir les bonnes dimensions de l'image, ET que macroblock_size
# divise bien ces 2 dimensions
img_width = 96
img_height = 96
# il faut s'assurer que macroblock_size divise bien les 2 dimensions suivantes
global img_width
global img_height

# format standard
img_size = (img_width, img_height)
global img_size

# création de l'opérateur orthogonal de la DCT
A = Encoder.DCT_operator(macroblock_size)
# opérateur orthogonal de la DCT
global A

img_visu = ImageVisualizer()
dec = Decoder()
Expand All @@ -52,6 +50,7 @@


print("\n")
global t_debut_algo

bufsize = 4096

Expand Down Expand Up @@ -105,6 +104,9 @@ def decode_frame_entierement():
dec_rle_data = dec.decode_bitstream_RLE(received_data)

# frame RLE --> frame YUV
global img_size
global macroblock_size
global A
dec_yuv_data = dec.recompose_frame_via_DCT(dec_rle_data, img_size, macroblock_size, A)

# frame YUV --> frame BGR (/!\ ET NON RGB /!\)
Expand All @@ -121,16 +123,42 @@ def decode_frame_entierement():


def on_received_data(data):
global received_data

received_data += data

binary_MSG_TYPE = data[16 : 18]
if data[0] == "S":
global img_width
global img_height
global img_size
global t_debut_algo
global macroblock_size
global A

t_debut_algo = time()

split_data = data.split(".")
# split_data[0] = "SIZE_INFO"
img_width = int(split_data[1])
img_height = int(split_data[2])

# format standard
img_size = (img_width, img_height)

log.debug(f"Taille reçue : {img_size}")

macroblock_size = int(split_data[3])
A = Encoder.DCT_operator(macroblock_size)

log.debug(f"Macroblock_size reçu : {macroblock_size}")
print("")

# "11" est en fait la valeur de TAIL_MSG (= 3) en binaire
if binary_MSG_TYPE == "11":
decode_frame_entierement()
received_data = ""
else:
global received_data
received_data += data

binary_MSG_TYPE = data[16 : 18]

# "11" est en fait la valeur de TAIL_MSG (= 3) en binaire
if binary_MSG_TYPE == "11":
decode_frame_entierement()
received_data = ""


# en fait tout se fait via la fonction de callback
Expand All @@ -139,8 +167,17 @@ def on_received_data(data):
serv.th_Listen.join()
serv.mySocket.close()

cv2.destroyAllWindows()
t_fin_algo = time()

duree_algo = t_fin_algo - t_debut_algo
nb_fps_moyen = compteur_images_recues / duree_algo

print("\n")
log.debug(f"Durée de l'algorithme : {duree_algo:.3f} s")
log.debug(f"Macroblock size : {macroblock_size}x{macroblock_size}")
log.debug(f"Nombre moyen de FPS (réception / décodage) : {nb_fps_moyen:.2f}")

print("")
log.debug("Fin récepteur")

if generer_fichier_log:
Expand Down
15 changes: 12 additions & 3 deletions python_prototype/EVEEX/main_RPi_emettrice.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

DEFAULT_QUANTIZATION_THRESHOLD = 10

import sys
from time import time
import numpy as np

Expand Down Expand Up @@ -46,6 +47,10 @@
# au multiple de 16 le plus proche par la PiCamera)
img_height = 96

if (img_width % macroblock_size != 0 or img_height % macroblock_size != 0) or (img_width % 32 !=0 or img_height % 16 != 0):
log.error("Dimensions des frames invalides !")
sys.exit()

# format standard
img_size = (img_width, img_height)

Expand All @@ -59,6 +64,7 @@


print("\n")
t_debut_demo = time()

bufsize = 4096

Expand All @@ -68,6 +74,9 @@
cli = Client(HOST, PORT, bufsize, affiche_messages=False)
cli.connect_to_server()

# on envoie d'abord les dimensions de la vidéo au récepteur (+ la taille des macroblocs)
cli.send_data_to_server(f"SIZE_INFO.{img_width}.{img_height}.{macroblock_size}")


def encode_et_envoie_frame(image_BGR, frame_id):
if frame_id == 1 and affiche_debug:
Expand Down Expand Up @@ -105,8 +114,6 @@ def encode_et_envoie_frame(image_BGR, frame_id):
nb_secondes_preview = 1
piCameraObject.launch_simple_preview(nb_secondes_preview, close_camera=False)

t_debut_demo = time()

# ==> LANCEMENT DE LA PICAMERA (GÉNÉRATION DE FRAMES)
piCameraObject.start_generating_frames()

Expand All @@ -123,8 +130,10 @@ def encode_et_envoie_frame(image_BGR, frame_id):

print("")
log.debug(f"Durée de la démonstration : {duree_demo:.3f} s")
log.debug(f"Nombre moyen de FPS : {nb_fps_moyen:.2f}")
log.debug(f"Macroblock size : {macroblock_size}x{macroblock_size}")
log.debug(f"Nombre moyen de FPS (émission / encodage) : {nb_fps_moyen:.2f}")

print("")
log.debug("Fin émetteur")

if generer_fichier_log:
Expand Down
12 changes: 8 additions & 4 deletions python_prototype/EVEEX/main_emetteur_video.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
Transformation de la vidéo considérée en liste de frames
"""

print("")
log.debug(f"Conversion \"vidéo {video_name} --> liste de frames\" en cours ...")

OS = sys.platform
Expand Down Expand Up @@ -81,17 +82,20 @@


print("\n")
t_debut_algo = time()

bufsize = 4096

HOST = "localhost"
PORT = 3456
#HOST = "192.168.8.218" # adresse IP du PC récepteur
#PORT = 22 # port SSH

cli = Client(HOST, PORT, bufsize, affiche_messages=False)
cli.connect_to_server()

# on envoie d'abord les dimensions de la vidéo au récepteur
cli.send_data_to_server(f"SIZE_INFO.{img_width}.{img_height}")
# on envoie d'abord les dimensions de la vidéo au récepteur (+ la taille des macroblocs)
cli.send_data_to_server(f"SIZE_INFO.{img_width}.{img_height}.{macroblock_size}")


def encode_et_envoie_frame(image_BGR, frame_id):
Expand Down Expand Up @@ -121,8 +125,6 @@ def encode_et_envoie_frame(image_BGR, frame_id):
print("")


t_debut_algo = time()

# envoi effectif des frames
for frame_id in range(1, nb_frames + 1):
frame = frames[frame_id - 1]
Expand All @@ -141,8 +143,10 @@ def encode_et_envoie_frame(image_BGR, frame_id):

print("")
log.debug(f"Durée de l'algorithme : {duree_algo:.3f} s")
log.debug(f"Macroblock size : {macroblock_size}x{macroblock_size}")
log.debug(f"Nombre moyen de FPS (émission / encodage) : {nb_fps_moyen:.2f}")

print("")
log.debug("Fin émetteur vidéo")

if generer_fichier_log:
Expand Down
27 changes: 20 additions & 7 deletions python_prototype/EVEEX/main_recepteur_video.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,16 @@

# Valeurs standards de macroblock_size : 8, 16 et 32
# Doit être <= 63
macroblock_size = 16
global macroblock_size

# il faut s'assurer que macroblock_size divise bien ces 2 dimensions
global img_width
global img_height

global img_size

# création de l'opérateur orthogonal de la DCT
A = Encoder.DCT_operator(macroblock_size)
# opérateur orthogonal de la DCT
global A

dec = Decoder()

Expand All @@ -56,6 +56,8 @@

HOST = "localhost"
PORT = 3456
#HOST = "192.168.8.218" # adresse IP du PC récepteur
#PORT = 22 # port SSH

serv = Server(HOST, PORT, bufsize, affiche_messages=False)

Expand Down Expand Up @@ -109,6 +111,8 @@ def decode_frame_entierement():

# frame RLE --> frame YUV
global img_size
global macroblock_size
global A
dec_yuv_data = dec.recompose_frame_via_DCT(dec_rle_data, img_size, macroblock_size, A)

# frame YUV --> frame BGR (/!\ ET NON RGB /!\)
Expand All @@ -130,18 +134,25 @@ def on_received_data(data):
global img_height
global img_size
global t_debut_algo
global macroblock_size
global A

t_debut_algo = time()

splitted_data = data.split(".")
# splitted_data[0] = "SIZE_INFO"
img_width = int(splitted_data[1])
img_height = int(splitted_data[2])
split_data = data.split(".")
# split_data[0] = "SIZE_INFO"
img_width = int(split_data[1])
img_height = int(split_data[2])

# format standard
img_size = (img_width, img_height)

log.debug(f"Taille reçue : {img_size}")

macroblock_size = int(split_data[3])
A = Encoder.DCT_operator(macroblock_size)

log.debug(f"Macroblock_size reçu : {macroblock_size}")
print("")

else:
Expand Down Expand Up @@ -169,6 +180,7 @@ def on_received_data(data):

print("\n")
log.debug(f"Durée de l'algorithme : {duree_algo:.3f} s")
log.debug(f"Macroblock size : {macroblock_size}x{macroblock_size}")
log.debug(f"Nombre moyen de FPS (réception / décodage) : {nb_fps_moyen:.2f}")

if enregistrer_frames_recues:
Expand All @@ -177,6 +189,7 @@ def on_received_data(data):
VideoHandler.frames2vid(frames_recues, saved_video_filename)
log.info("Enregistrement terminé !")

print("")
log.debug("Fin récepteur vidéo")

if generer_fichier_log:
Expand Down
2 changes: 1 addition & 1 deletion python_prototype/EVEEX/test_PiCamera.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def start_generating_frames(self, display_frames_on_RPi=True):

# envoi de la frame au PC récepteur (cela dépend de la fonction de
# callback utilisée)
self.callback(self.frame, self.compteur_images_generees)
self.callback(self.frame, self.compteur_images_generees + 1)

self.compteur_images_generees += 1

Expand Down

0 comments on commit e83dcf0

Please sign in to comment.