lib python pour streamer écran pc (très rapidement comme pour du Gaming)

a marqué ce sujet comme résolu.

Bonjour, je développe une thèse sur la création d’un outil d’analyse de partie de jeux videos (FPS) avec des réseaux de neurones et je cherche un moyen pour capturer les images du pc et les envoyer sur mon serveur pour faire une analyse en temps réel.

Sur le serveur j’ai la puissance requise pour l’analyse de mes données en temps réel, je fais des simulation et j’arrive à supporter 80 images/s en 720p

Mais maintenant je voudrais ne plus faire du pré enregistrer et prendre l’image lors de partie de jeux en temps réel mais je ne trouve pas le moyen de capturer assez d’images/secondes, j’ai essayer de faire des captures d’écran avec opencv et de les envoyer via ethernet au serveur mais je n’ai que 10 images/seconde.

le probleme de viens pas du nréseau c’est un réseau local 1gb et le réseaux ne sature pas. C’est opencv le probleme qui n’est pas assez rapide, je voudrais dans l’idéal avoir du 60 images/seconde en 720p et l’image peut etre compresser c’est pas un trop un probleme

mais je ne trouve pas de lib pouvant faire cela auriez vous une idée ? par avance merci.

Quel latence est acceptable pour toi ? Il y a le protocole rtsp mais il peut avoir une latence de ~1 seconde. Je pense qu’il faudrait effectuer une pré analyse côté client, pour gagner du temps. Surtout que la compression peut demander du temps, du processeur et détériorer ta détection.

Tu as quelques pistes ici :

+0 -0

Il va falloir que tu t’intéresses au même techniques de capture du flux vidéo que celle que tu utilises pour faire du pré-enregistré.

J’imagine que pour l’instant le pré-enregistrer, tu utilises un logiciel pour ça. Ce logiciel, c’est certainement Nvidia ou AMD qui te le fourni (ou un logiciel utilisant l’API de nvidia ou d’AMD).

Bref, tu ne peux pas demander à l’OS d’allez à la vitesse de la carte graphique. Tu dois absolument le faire au plus bas niveau possible et je pense que pour NVIDIA, ce sera au niveau de leur API Video Codec SDK.

Bien-sûr il faut une connexion Serveur <— PC béton ! Une latence très faible et un débit élevé. L’idéale étant de ne pas avoir besoin de compresser l’image.

C’est une demande bien spécifique que tu as, je ne pourrais pas t’aider plus. :/

Une technique que tu pourrais creuser également ce sont les PC « Shadow ».

+0 -0

Tu as vraiment besoin d’analyser les images en 720p ? Pour du traitement d’image ça me semble overkill.

Suivant ce qu’a besoin de faire ton analyse tu devrais pouvoir t’en sortir également en divisant la résolution de tes images par 2. Ça devrait largement reduire la bande passante, d’autant plus si tes images ne sont pas compressées.

De même, j’ai un peu de mal à comprendre pourquoi l’outil d’analyse aurait besoin d’un flux à 80 FPS. Que fait ton analyse précisément ? Tu trackes des objets dans le flux vidéo ? Si oui on peut comprendre que ce soit un peu plus fiable avec un débit élevé mais il y a sûrement un juste milieu à trouver entre 10 et 80 FPS.

Dans l’analyse de flux vidéos, 10 FPS ça compte comme du temps réel : ça suffit à détecter un comportement suspect sur une caméra de vidéo-surveillance. 720p et 80 FPS ce sont surtout des paramètres qui satisfont l’oeil humain.

+0 -0

Salut,

la solution canonique à ton problème, c’est ffmpeg ou gstreamer. Avant de parler de réseau, de rtsp, rtmp, opencv, etc, il faut que tu saches à quel paramètre de qualité tu dois te placer pour pouvoir encoder à 60 fps.

https://trac.ffmpeg.org/wiki/Capture/Desktop

Si tu veux vraiment du temps réel, tu voudras probablement éviter le décodage matériel et utiliser x264 en -preset ultrafast et en changeant la résolution et le crf (https://slhck.info/video/2017/02/24/crf-guide.html) pour l’encodage à la place.

ffmpeg va t’afficher le nombre de frame que tu arrives à encoder. Si tu as ce qu’il faut, on peut passer à la partie réseau et voir d’abord quelle est ton infrastructure réseau et ta latence acceptable. Si ça passe pas, il faudra probablement passer par une carte d’acquisition à la place.

De l’autre côté, est-ce que sur une vidéo 720p à 60fps tu arrives à faire ton traitement opencv en temps réel ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte