CCINP Informatique Commune PSI 2018Sujet, corrigé et rapport du jury
Système d'aide à l'arbitrage: le Hawk-eye
- Problème de Cauchy et méthode d'Euler
- Programmation Python : tableaux, fonctions, structures de données
- Traitement d'image et triangulation
- Bases de données et langage SQL (clé primaire, jointures)
- Conversion d'unités et ordres de grandeur
Téléchargements
Présentation du sujet
AccessibleSystème d'aide à l'arbitrage Hawk-Eye : modélisation, reconstruction de trajectoire et bases de donnéesAfficher ou masquer la section
Présentation du sujet
AccessibleLe sujet étudie le système Hawk-Eye d'aide à l'arbitrage utilisé notamment au tennis. Il modélise la trajectoire de la balle par un problème de Cauchy résolu par la méthode d'Euler, reconstruit la trajectoire 3D de la balle à partir d'images vidéo (taille de fichiers, position 2D puis 3D par triangulation, impact au sol), puis exploite les données du système via des requêtes SQL sur une base de données.
- 1Partie I : Présentation générale du systèmePrésenter le principe et le fonctionnement du système Hawk-Eye.
- 2Partie II : Modélisation de la trajectoire de la balleMettre en équations différentielles le mouvement de la balle sous forme d'un problème de Cauchy et le résoudre par la méthode d'Euler.
- 3Partie III : Tracking et reconstruction de la trajectoire de la balle de tennisDéterminer la taille des fichiers vidéo, calculer la position 2D puis 3D de la balle par triangulation, assembler les positions et déterminer l'impact au sol.
- 4Partie IV : Exploitation des données fournies par le Hawk-eyeInterroger en SQL une base de données à partir des données du système.
Accessible. Le rapport indique que la plupart des candidats ont abordé l'intégralité du sujet, que le questionnement était assez progressif, et que la grande majorité des questions ont été abordées par presque tous les candidats et bien traitées en général.
L'épreuve en chiffres
Moyenne 10,16 / 20 · 5 249 présentsAfficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 10,16/ 20
- Présents
- 5 249
Source : document officiel du concours. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.
Ce qu'a observé le jury
6 erreurs relevéesFormulation incomplète du vecteur · Initialisation de la méthode d'Euler mal reprise · Confusion entre bit et octetAfficher ou masquer la section
Ce qu'a observé le jury
6 erreurs relevéesLe sujet, qui couvrait une grande partie du programme d'informatique, a permis de classer correctement les candidats. La plupart d'entre eux ont abordé l'intégralité du sujet, y compris les questions de la dernière partie sur les bases de données, et ont traité le sujet linéairement. Les correcteurs notent cependant une qualité de rédaction très inégale selon les copies.
Les erreurs les plus sanctionnées
- 1Formulation incomplète du vecteurQ1
Trop de candidats ont cherché à intégrer directement les équations plutôt que d'éliminer les variables autres que u, v, x, y et t, ce qui conduisait à des erreurs.
- 2Initialisation de la méthode d'Euler mal repriseQ2
L'initialisation de l'algorithme d'Euler a souvent posé problème, l'expression du pas T/N pourtant fournie n'étant pas toujours reprise par les candidats.
- 3Confusion entre bit et octetQ4
Cette question, abordée par presque tous mais souvent traitée de manière maladroite, a donné lieu à des confusions entre les unités bit et octet, sans toujours fournir de valeur numérique accompagnée de son unité.
- 4Structure de liste mal compriseQ11b, Q11c
Les candidats ont souvent mal compris la structure de la liste balle, qui est une liste à une seule dimension alternant les composantes x et y.
- 5Rotations et translation mal ordonnéesQ14
Cette question a suscité beaucoup d'erreurs, notamment sur l'utilisation du produit scalaire et sur l'ordre des rotations et de la translation.
- 6Clé primaire mal définieQ19
La définition d'une clé primaire est souvent détournée au profit d'une de ses conséquences, comme la jointure de tables, alors que c'est bien la définition, insistant sur l'unicité des enregistrements, qui était demandée.
Ce qui a été bien réussi
- La plupart des candidats ont abordé l'intégralité du sujet, y compris les questions de la dernière partie sur les bases de données.
- Les questions 3, 7 à 10, 12, 13, 15, 17, 18, 20 et 21 sont abordées par presque tous les candidats et bien traitées en général.
- Le calcul demandé à la question 5 a été en général posé correctement par la plupart des candidats.
Conseils du jury
- Éliminer soigneusement les variables intermédiaires demandées plutôt que de se lancer dans une intégration directe non pertinente.
- Reprendre l'expression fournie par l'énoncé, comme le pas T/N, plutôt que d'en réinventer une autre.
- Toujours donner une valeur numérique accompagnée de son unité, même sans calculatrice.
- Soigner la présentation du code : indentation claire, couleur différente pour le code et les commentaires, noms de variables explicites, respect strict de la syntaxe Python.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
ÉPREUVE SPÉCIFIQUE - FILIÈRE PSI
INFORMATIQUE
Vendredi 4 mai :
8h − 11h
Les calculatrices sont interdites
Les différents algorithmes doivent être rendus dans leur forme définitive sur la copie en respectant les éléments de syntaxe du langage (les brouillons ne sont pas acceptés).
Il est demandé au candidat de bien vouloir rédiger ses réponses en précisant bien le numéro de la question traitée et, si possible, dans l'ordre des questions. La réponse ne doit pas se cantonner à la rédaction de l'algorithme sans explication, les programmes doivent être expliqués et commentés.
Annexe : page 16
SYSTÈME D'AIDE À L'ARBITRAGE : LE HAWK-EYE
Partie I - Présentation générale du système

.jpg)
Partie II - Modélisation de la trajectoire de la balle
- la vitesse de frappe par la raquette du joueur;
- l'angle de frappe;
- les frottements dans l'air;
- la vitesse de rotation donnée à la balle par la raquette du joueur.

Paramétrage
- La balle a une masse
m et un rayonR . - Le mouvement de la balle est étudié dans le référentiel
R lié au terrain et supposé galiléen. On lui associe le repère (O, x⃗, y⃗, z⃗ ), avecO le point de coordonnées (0, 0, 0 ). - La position initiale de la balle est définie dans le référentiel supposé galiléen lié au terrain au point
I par(x_0, y_0, z_0) . - La balle est repérée par la position de son centre d'inertie
G auquel est associé le vecteurOG^(→−) = (x + x_0) ⋅ x⃗ + (y + y_0) ⋅ y⃗ + (z + z_0) ⋅ z⃗ . - La vitesse de la balle est notée
V⃗ = v_x x⃗ + v_y y⃗ + v_z z⃗ et sa vitesse initialeV_0^(→−) . - L'angle de frappe entre le plan
(O, x⃗, z⃗) etV_0^(→−) estα . - La vitesse de rotation sur elle-même de la balle est notée
Ω⃗ = Ωz⃗ . -
g⃗ = − gy⃗ est l'accélération de la pesanteur.
Hypothèses
- On supposera dans toute la suite de cette partie que la balle ne se déplace que dans le plan
(O, x⃗, y⃗) . Par conséquent, à chaque instant,v_z = 0 . - Les différents efforts s'exerçant sur la balle de tennis sont représentés sur la figure 4, page 4.
t⃗ est un vecteur unitaire tangent à la trajectoire et dirigé suivant le sens de la trajectoire.n⃗ est un vecteur unitaire normal à la trajectoire.

Équation du mouvement de la balle
Q1. Mettre les équations (2) et (3) sous la forme d'un problème de Cauchy du type :
La résolution numérique des équations différentielles (2) et (3) repose sur leur discrétisation temporelle et conduit à déterminer à différents instants
On note
def euler(T,N,F,Y0) :
Y=zeros((len(Y0),N))
t=arange(0,T,T/N)
#conditions initiales à compléter
for i in range(1,N) :
#zone à compléter
return (t,Y)
Partie III - Tracking et reconstruction de la trajectoire de la balle de tennis
- Étape (1) : on détermine les limites du terrain;
- Étape (2) : on réalise le calibrage de la caméra (détermination de sa position, son orientation et ses paramètres intrinsèques);
- Étape (3) : on identifie les pixels représentant la balle et on calcule la position 2D dans chaque image de chaque caméra;
- Étape (4) : on calcule la position 3D de la balle par triangularisation;
- Étape (5) : on assemble les images obtenues;
- Étape (6) : on détermine l'impact de la balle avec le sol sur le terrain;
- Étape (7) : on reconstruit la trajectoire 3D de la balle que l'on affichera pour les spectateurs.
III. 1 - Détermination de la taille des fichiers récupérés
- len(image1)
- len(image1[12][244])
- len(image1[12][244][2])
III. 2 - Calcul de la position 2D de la balle (étape (3)
L'algorithme doit renvoyer les coordonnées
L'algorithme proposé se déroule en plusieurs étapes :
- première étape : détecter tous les objets en mouvement grâce à l'analyse de deux images successives,
- deuxième étape : éliminer les objets en mouvement qui ne peuvent pas correspondre à une balle de tennis selon des critères géométriques,
- troisième étape : éliminer les "balles fausses" détectées en prenant en compte la trajectoire de la balle.
Les images sont celles décrites en début de sous-partie III. 2 et correspondent à des tableaux à 3 dimensions de type list :
calculer pour chaque pixel la somme des différences au carré associées à chaque couleur
En cas de variation importante de couleur,
Compte-tenu de la position des caméras latérales et de leur résolution, une balle de tennis occupe au minimum 4 pixels.
Nous allons commencer par éliminer tous les pixels en mouvement qui sont isolés dans le tableau : aucun des pixels adjacents parmi les 8 possibles n'est considéré en mouvement.
Proposer deux schémas permettant d'illustrer le cas d'un pixel isolé et donc à éliminer et celui d'un pixel à conserver.
On considère un pixel de coordonnées (p,c) tel que ce pixel ne soit pas situé sur le bord de l'image. Parmi les 4 tests suivants, choisir celui qui permet de détecter si ce pixel est isolé et, si c'est le cas, de l'éliminer.
Test 1
Test 2
Test 3
if image[p][c]==1:
nb_pixel=-1
for k in [p-1,p,p+1]:
for j in [c-1,c,c+1]:
nb_pixel += image[k][j]
if nb_pixel==0:
image[p][c]=0
Test 4
if image[p][c]==1:
nb_pixel=-1
for k in range(}p-1,p+1)\mathrm{ :
for j in range ( }\textrm{c}-1,\textrm{c}+1\mathrm{ ):
nb_pixel += image[k][j]
if nb_pixel==0:
image[p][c]=0
point = input("Rentrer le numéro du point litigieux à
analyser")
dirs = listdir("sequence_" + point)
for image in dirs:
index_max = 0
index = int(image[6:11])
if index >= index_max:
index_max = index
seq_balle =[[x0,y0]]# [x0,y0] position initiale de la balle
# donnée par un autre traitement
for image in dirs:
index_init = index_max - 3000 # indice de la première
image de la séquence analysée
if int (image [6:11])== index_init :
image2=imread("sequence_"+ point +"/"+image)
elif int(image[6:11])> index_init :
image1 = deepcopy(image2)
image2=imread("sequence_"+ point +"/"+image)
liste_balles = traitement(image1,image2)
seq_balle.append(liste_balles)
Éléments de documentation
- la commande listdir s'applique à un dossier et renvoie une liste de tous les noms de fichiers contenus dans ce dossier,
- la commande imread construit un tableau
n × m × 3 à partir d'une image bitmap (. bmp), - la fonction traitement renvoie une liste des positions des balles éventuelles détectées dans une image. Cette fonction fait appel aux fonctions précédemment programmées. (Il n'est pas demandé de détailler cette fonction).
- Si plusieurs balles sont présentes dans cette zone (balles candidates), on choisira celle dont la position sera la plus proche du centre. En cas d'égalité, on conservera arbitrairement l'une des 2 positions.
- Si aucune balle n'est présente dans la zone, on renverra pour l'image
i + 1 la liste [None, None] et on cherchera directement une balle dans l'image suivantei + 2 en doublant les dimensions de la zone de recherche2Lx − 1 et2Ly − 1 et en prenant comme pixel central :x_c = x_i + 2d_(xi − 1) ety_c = y_i + 2d_(yi − 1) .

- Balle détectée à l'image précédente
(D) Balle détectée
a) Écrire une fonction deplacement(pos1,pos2) qui prend en argument 2 listes à 2 éléments (pos1 et pos2) et qui renvoie le vecteur déplacement associé (sous la forme d'une liste à deux éléments). On précisera le type des éléments constituants les listes.
Écrire la ou les instructions permettant d'affecter aux variables
b) Écrire une fonction distance_quad(xc,yc,liste_balle_i) où
c) Écrire une fonction cherche_balle(xc,yc,Lx,Ly,liste_balle_i) où xc,yc sont les coordonnées du pixel central, Lx, Ly les dimensions de la zone de recherche et liste_balle_i la liste des balles possibles. Cette fonction doit renvoyer une liste contenant les coordonnées de la balle détectée ou la liste [None, None] si aucune balle n'est détectée. Cette fonction fera appel à la fonction distance_quad.
d) Écrire une fonction traj_balle qui prend en argument la liste seq_balle définie précédemment et la vitesse initiale vit_init (liste à 2 éléments). Cette fonction doit renvoyer la liste des "balles bonnes" présentes dans la zone de recherche :
III. 3 - Calcul de la position 3D de la balle par triangularisation (étape (4)

Hypothèses
- On s'intéressera ici à la triangularisation sur deux caméras : les caméras 1 et 2 .
- On suppose que la balle est bien détectée par les deux caméras et que les coordonnées relevées correspondent au centre de la balle. Les coordonnées du centre de la balle à l'instant
i sont notées respectivement :P_1 de coordonnées(x_1, y_1) pour la caméra 1 etP_2 de coordonnées (x_2, y_2 ) pour la caméra 2 dans leurs repères respectifs. - On suppose que les deux caméras sont disposées à la même hauteur autour du terrain et que leur plan focal est identique.
- On suppose que le temps est bien synchronisé sur les deux caméras.
- On suppose que tous les paramètres de calibration des deux caméras sont connus (matrices intrinsèques et extrinsèques, distance focale, position...).

vecteur défini dans la base 0 et
Q14. Écrire une fonction pos_glo(pos1i, T1, Rx1, Ry1) qui prend en argument la liste pos1i et les matrices de translation et rotations T1, Rx1 et Ry1, qui calcule et renvoie une liste des coordonnées de la balle dans le repère global à l'instant
III. 4 - Assemblage des positions 3D (étape (5)
Q15. Écrire une fonction traj3D(coord_loc,T1,Rx1,Ry1) qui prend en argument la liste coord_loc et renvoie une liste de l'assemblage dans l'ordre chronologique des
III. 5 - Détermination de l'impact de la balle avec le sol sur le terrain (étape 6)
Cette partie de l'algorithme est primordiale, en effet, c'est à partir du résultat obtenu par cette partie de l'algorithme que l'arbitre rendra sa décision. Le système réel permet de déterminer la forme de l'impact entre la balle et le sol en fonction de la déformation de la balle. Afin de faciliter la résolution du problème, la déformation de la balle ne sera pas prise en compte.
Hypothèses
- On suppose que la balle est indéformable (et donc que le point d'impact est ponctuel) et de rayon
0, 033 m . - La position du terrain (et donc les lignes) est parfaitement connue dans le repère global.
- On considère dans notre cas que le point étudié se fait durant l'échange de balle entre les joueurs et non sur un service.
- On suppose que le terrain est parfaitement plat.
Si la position
III. 6 - Reconstruction de la trajectoire 3D de la balle (étape (7)
Partie IV - Exploitation des données fournies par le Hawk-eye
La table MATCHS contient les différents matchs d'un tournoi avec les attributs :
- id : identifiant de type entier, clé primaire;
- nom : nom du match de type texte;
- numero : numéro du match dans la planification du tournoi;
- date : date où le match s'est déroulé;
- joueur1 : nom du premier joueur;
- joueur2 : nom du deuxième joueur (les joueurs 1 et 2 sont rangés par ordre alphabétique);
- autres attributs non détaillés...
- id : identifiant de type entier, clé primaire;
- mid : identifiant du match correspondant à la définition de type entier;
- nombre : nombre d'échanges de type entier;
- fichier : nom du fichier image de la trajectoire (stockée) correspondant au point;
- autres attributs non détaillés...
Q20. Écrire une requête SQL permettant d'afficher les identifiants des matchs joués par Federer, joueur pris pour exemple.
FIN
ANNEXE
Rappels des syntaxes en Python
| Python | ||||||
| tableau à une dimension |
|
|||||
| accéder à un élément | v[0] renvoie 1 | |||||
| ajouter un élément |
|
|||||
| tableau à deux dimensions (matrice) : | M=array(([1,2,3],[3,4,5])) | |||||
| accéder à un élément | M[1,2] ou M[1][2] donne 5 | |||||
| extraire une portion de tableau (2 premières colonnes) | M[:,0:2] | |||||
| tableau de 0 ( 2 lignes, 3 colonnes) | zeros((2,3)) | |||||
| dimension d'un tableau T de taille (
|
T. shape donne [i,j] | |||||
| produit matrice-vecteur (est identique pour le produit matrice-matrice) |
|
|||||
| séquence équirépartie quelconque de 0 à 10.1 (exclus) par pas de 0.1 | arange(0,10.1,0.1) | |||||
| définir une chaîne de caractères | mot="Python" | |||||
| taille d'une chaîne | len(mot) | |||||
| extraire des caractères | mot[2:7] | |||||
| boucle For |
|
|||||
| condition If |
|
|||||
| définir une fonction qui possède un argument et renvoie 2 résultats |
|
|||||
| tracé d'une courbe de deux listes de points
|
plot(x,y) | |||||
| tracé d'une courbe de trois listes de points
|
gca(projection='3d').plot(x,y,z) | |||||
| ajout d'un titre sur les axes d'une figure |
|
|||||
| ajout d'un titre principal sur une figure | title(texte) |
Questions fréquentes
4 questionsSur quels chapitres porte le sujet CCINP informatique commune PSI 2018 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet CCINP informatique commune PSI 2018 ?
Il porte sur le problème de Cauchy et la méthode d'Euler, la programmation Python, le traitement d'image et la triangulation, ainsi que les bases de données et le langage SQL.
Quelles erreurs le jury a-t-il le plus relevées sur ce sujet CCINP informatique PSI 2018 ?
Une confusion entre bit et octet, une initialisation de la méthode d'Euler mal reprise, une structure de liste mal comprise, et une clé primaire mal définie en base de données.
Ce sujet CCINP informatique PSI 2018 sur le Hawk-Eye est-il difficile ?
Il est plutôt accessible : le rapport indique que la plupart des candidats ont traité l'intégralité du sujet et que la majorité des questions ont été bien traitées en général.
Faut-il connaître le SQL pour ce sujet CCINP informatique PSI 2018 ?
Oui, la dernière partie porte sur l'exploitation des données du Hawk-Eye par des requêtes SQL, avec des notions de clé primaire et de jointure.
Pas de description pour le moment
