first commit

This commit is contained in:
2022-03-13 09:58:04 +01:00
commit e8bd1dbb41
24 changed files with 512 additions and 0 deletions

15
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.
// Pointez pour afficher la description des attributs existants.
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/css/fronts/go3v2.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

45
assets/css/style.css Normal file
View File

@@ -0,0 +1,45 @@
@font-face {
font-family: 'viaoda_libreregular';
src: url('fronts/go3v2.woff2') format('woff2'),
url('fronts/go3v2.woff') format('woff');
font-weight: normal;
font-style: normal;
}
body {
background-image: -moz-linear-gradient(to right, #00ccff, #1900ff);
background-image: -webkit-linear-gradient(to right, #00ccff, #1900ff);
background-image: -ms-linear-gradient(to right, #00ccff, #1900ff);
background-image: linear-gradient(to right, #00ccff, #1900ff);
}
h1 {
font-family: 'viaoda_libreregular';
font-weight: normal;
font-style: normal;
font-size: 60pt;
text-align: center ;
}
.center {
margin-left: auto ;
margin-right: auto ;
}
p {
font-family: 'viaoda_libreregular';
font-weight: normal;
font-size: 16pt;
font-style: normal;
}
img {
display: block ;
width: 35% ; /* Les images occupent 35% de la largeur de la page */
}
/* Concerne la balise <table>...</table> */
table {
margin-top: 3em ;
margin-bottom: 3em ;
}

56
assets/css/style_iris.css Normal file
View File

@@ -0,0 +1,56 @@
@font-face {
font-family: 'viaoda_libreregular';
src: url('fronts/28DaysLater.woff2') format('woff2'),
url('fronts/28DaysLater.woff') format('woff');
font-weight: normal;
font-style: normal;
}
body {
/*width: 1920px;
height: 1080px;*/
background-image: url("../pic/monkey.jpg");
background-size: cover;
background-repeat: no-repeat;
/*background-size: 1920px;*/
}
h1 {
font-family: 'viaoda_libreregular';
font-weight: normal;
font-style: normal;
font-size: 60pt;
text-align: center ;
}
.center {
margin-left: auto ;
margin-right: auto ;
}
p {
font-family: 'viaoda_libreregular';
font-weight: normal;
font-size: 20pt;
font-style: normal;
}
li {
font-family: 'viaoda_libreregular';
font-weight: normal;
font-size: 20pt;
font-style: normal;
}
img {
position: absolute;
object-position: right;
width:30%;
height: auto;
}
table {
margin-top: 3em ;
margin-bottom: 3em ;
}

151
assets/iris.csv Normal file
View File

@@ -0,0 +1,151 @@
150,4,setosa,versicolor,virginica
5.1,3.5,1.4,0.2,0
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
5.0,3.6,1.4,0.2,0
5.4,3.9,1.7,0.4,0
4.6,3.4,1.4,0.3,0
5.0,3.4,1.5,0.2,0
4.4,2.9,1.4,0.2,0
4.9,3.1,1.5,0.1,0
5.4,3.7,1.5,0.2,0
4.8,3.4,1.6,0.2,0
4.8,3.0,1.4,0.1,0
4.3,3.0,1.1,0.1,0
5.8,4.0,1.2,0.2,0
5.7,4.4,1.5,0.4,0
5.4,3.9,1.3,0.4,0
5.1,3.5,1.4,0.3,0
5.7,3.8,1.7,0.3,0
5.1,3.8,1.5,0.3,0
5.4,3.4,1.7,0.2,0
5.1,3.7,1.5,0.4,0
4.6,3.6,1.0,0.2,0
5.1,3.3,1.7,0.5,0
4.8,3.4,1.9,0.2,0
5.0,3.0,1.6,0.2,0
5.0,3.4,1.6,0.4,0
5.2,3.5,1.5,0.2,0
5.2,3.4,1.4,0.2,0
4.7,3.2,1.6,0.2,0
4.8,3.1,1.6,0.2,0
5.4,3.4,1.5,0.4,0
5.2,4.1,1.5,0.1,0
5.5,4.2,1.4,0.2,0
4.9,3.1,1.5,0.2,0
5.0,3.2,1.2,0.2,0
5.5,3.5,1.3,0.2,0
4.9,3.6,1.4,0.1,0
4.4,3.0,1.3,0.2,0
5.1,3.4,1.5,0.2,0
5.0,3.5,1.3,0.3,0
4.5,2.3,1.3,0.3,0
4.4,3.2,1.3,0.2,0
5.0,3.5,1.6,0.6,0
5.1,3.8,1.9,0.4,0
4.8,3.0,1.4,0.3,0
5.1,3.8,1.6,0.2,0
4.6,3.2,1.4,0.2,0
5.3,3.7,1.5,0.2,0
5.0,3.3,1.4,0.2,0
7.0,3.2,4.7,1.4,1
6.4,3.2,4.5,1.5,1
6.9,3.1,4.9,1.5,1
5.5,2.3,4.0,1.3,1
6.5,2.8,4.6,1.5,1
5.7,2.8,4.5,1.3,1
6.3,3.3,4.7,1.6,1
4.9,2.4,3.3,1.0,1
6.6,2.9,4.6,1.3,1
5.2,2.7,3.9,1.4,1
5.0,2.0,3.5,1.0,1
5.9,3.0,4.2,1.5,1
6.0,2.2,4.0,1.0,1
6.1,2.9,4.7,1.4,1
5.6,2.9,3.6,1.3,1
6.7,3.1,4.4,1.4,1
5.6,3.0,4.5,1.5,1
5.8,2.7,4.1,1.0,1
6.2,2.2,4.5,1.5,1
5.6,2.5,3.9,1.1,1
5.9,3.2,4.8,1.8,1
6.1,2.8,4.0,1.3,1
6.3,2.5,4.9,1.5,1
6.1,2.8,4.7,1.2,1
6.4,2.9,4.3,1.3,1
6.6,3.0,4.4,1.4,1
6.8,2.8,4.8,1.4,1
6.7,3.0,5.0,1.7,1
6.0,2.9,4.5,1.5,1
5.7,2.6,3.5,1.0,1
5.5,2.4,3.8,1.1,1
5.5,2.4,3.7,1.0,1
5.8,2.7,3.9,1.2,1
6.0,2.7,5.1,1.6,1
5.4,3.0,4.5,1.5,1
6.0,3.4,4.5,1.6,1
6.7,3.1,4.7,1.5,1
6.3,2.3,4.4,1.3,1
5.6,3.0,4.1,1.3,1
5.5,2.5,4.0,1.3,1
5.5,2.6,4.4,1.2,1
6.1,3.0,4.6,1.4,1
5.8,2.6,4.0,1.2,1
5.0,2.3,3.3,1.0,1
5.6,2.7,4.2,1.3,1
5.7,3.0,4.2,1.2,1
5.7,2.9,4.2,1.3,1
6.2,2.9,4.3,1.3,1
5.1,2.5,3.0,1.1,1
5.7,2.8,4.1,1.3,1
6.3,3.3,6.0,2.5,2
5.8,2.7,5.1,1.9,2
7.1,3.0,5.9,2.1,2
6.3,2.9,5.6,1.8,2
6.5,3.0,5.8,2.2,2
7.6,3.0,6.6,2.1,2
4.9,2.5,4.5,1.7,2
7.3,2.9,6.3,1.8,2
6.7,2.5,5.8,1.8,2
7.2,3.6,6.1,2.5,2
6.5,3.2,5.1,2.0,2
6.4,2.7,5.3,1.9,2
6.8,3.0,5.5,2.1,2
5.7,2.5,5.0,2.0,2
5.8,2.8,5.1,2.4,2
6.4,3.2,5.3,2.3,2
6.5,3.0,5.5,1.8,2
7.7,3.8,6.7,2.2,2
7.7,2.6,6.9,2.3,2
6.0,2.2,5.0,1.5,2
6.9,3.2,5.7,2.3,2
5.6,2.8,4.9,2.0,2
7.7,2.8,6.7,2.0,2
6.3,2.7,4.9,1.8,2
6.7,3.3,5.7,2.1,2
7.2,3.2,6.0,1.8,2
6.2,2.8,4.8,1.8,2
6.1,3.0,4.9,1.8,2
6.4,2.8,5.6,2.1,2
7.2,3.0,5.8,1.6,2
7.4,2.8,6.1,1.9,2
7.9,3.8,6.4,2.0,2
6.4,2.8,5.6,2.2,2
6.3,2.8,5.1,1.5,2
6.1,2.6,5.6,1.4,2
7.7,3.0,6.1,2.3,2
6.3,3.4,5.6,2.4,2
6.4,3.1,5.5,1.8,2
6.0,3.0,4.8,1.8,2
6.9,3.1,5.4,2.1,2
6.7,3.1,5.6,2.4,2
6.9,3.1,5.1,2.3,2
5.8,2.7,5.1,1.9,2
6.8,3.2,5.9,2.3,2
6.7,3.3,5.7,2.5,2
6.7,3.0,5.2,2.3,2
6.3,2.5,5.0,1.9,2
6.5,3.0,5.2,2.0,2
6.2,3.4,5.4,2.3,2
5.9,3.0,5.1,1.8,2
1 150 4 setosa versicolor virginica
2 5.1 3.5 1.4 0.2 0
3 4.9 3.0 1.4 0.2 0
4 4.7 3.2 1.3 0.2 0
5 4.6 3.1 1.5 0.2 0
6 5.0 3.6 1.4 0.2 0
7 5.4 3.9 1.7 0.4 0
8 4.6 3.4 1.4 0.3 0
9 5.0 3.4 1.5 0.2 0
10 4.4 2.9 1.4 0.2 0
11 4.9 3.1 1.5 0.1 0
12 5.4 3.7 1.5 0.2 0
13 4.8 3.4 1.6 0.2 0
14 4.8 3.0 1.4 0.1 0
15 4.3 3.0 1.1 0.1 0
16 5.8 4.0 1.2 0.2 0
17 5.7 4.4 1.5 0.4 0
18 5.4 3.9 1.3 0.4 0
19 5.1 3.5 1.4 0.3 0
20 5.7 3.8 1.7 0.3 0
21 5.1 3.8 1.5 0.3 0
22 5.4 3.4 1.7 0.2 0
23 5.1 3.7 1.5 0.4 0
24 4.6 3.6 1.0 0.2 0
25 5.1 3.3 1.7 0.5 0
26 4.8 3.4 1.9 0.2 0
27 5.0 3.0 1.6 0.2 0
28 5.0 3.4 1.6 0.4 0
29 5.2 3.5 1.5 0.2 0
30 5.2 3.4 1.4 0.2 0
31 4.7 3.2 1.6 0.2 0
32 4.8 3.1 1.6 0.2 0
33 5.4 3.4 1.5 0.4 0
34 5.2 4.1 1.5 0.1 0
35 5.5 4.2 1.4 0.2 0
36 4.9 3.1 1.5 0.2 0
37 5.0 3.2 1.2 0.2 0
38 5.5 3.5 1.3 0.2 0
39 4.9 3.6 1.4 0.1 0
40 4.4 3.0 1.3 0.2 0
41 5.1 3.4 1.5 0.2 0
42 5.0 3.5 1.3 0.3 0
43 4.5 2.3 1.3 0.3 0
44 4.4 3.2 1.3 0.2 0
45 5.0 3.5 1.6 0.6 0
46 5.1 3.8 1.9 0.4 0
47 4.8 3.0 1.4 0.3 0
48 5.1 3.8 1.6 0.2 0
49 4.6 3.2 1.4 0.2 0
50 5.3 3.7 1.5 0.2 0
51 5.0 3.3 1.4 0.2 0
52 7.0 3.2 4.7 1.4 1
53 6.4 3.2 4.5 1.5 1
54 6.9 3.1 4.9 1.5 1
55 5.5 2.3 4.0 1.3 1
56 6.5 2.8 4.6 1.5 1
57 5.7 2.8 4.5 1.3 1
58 6.3 3.3 4.7 1.6 1
59 4.9 2.4 3.3 1.0 1
60 6.6 2.9 4.6 1.3 1
61 5.2 2.7 3.9 1.4 1
62 5.0 2.0 3.5 1.0 1
63 5.9 3.0 4.2 1.5 1
64 6.0 2.2 4.0 1.0 1
65 6.1 2.9 4.7 1.4 1
66 5.6 2.9 3.6 1.3 1
67 6.7 3.1 4.4 1.4 1
68 5.6 3.0 4.5 1.5 1
69 5.8 2.7 4.1 1.0 1
70 6.2 2.2 4.5 1.5 1
71 5.6 2.5 3.9 1.1 1
72 5.9 3.2 4.8 1.8 1
73 6.1 2.8 4.0 1.3 1
74 6.3 2.5 4.9 1.5 1
75 6.1 2.8 4.7 1.2 1
76 6.4 2.9 4.3 1.3 1
77 6.6 3.0 4.4 1.4 1
78 6.8 2.8 4.8 1.4 1
79 6.7 3.0 5.0 1.7 1
80 6.0 2.9 4.5 1.5 1
81 5.7 2.6 3.5 1.0 1
82 5.5 2.4 3.8 1.1 1
83 5.5 2.4 3.7 1.0 1
84 5.8 2.7 3.9 1.2 1
85 6.0 2.7 5.1 1.6 1
86 5.4 3.0 4.5 1.5 1
87 6.0 3.4 4.5 1.6 1
88 6.7 3.1 4.7 1.5 1
89 6.3 2.3 4.4 1.3 1
90 5.6 3.0 4.1 1.3 1
91 5.5 2.5 4.0 1.3 1
92 5.5 2.6 4.4 1.2 1
93 6.1 3.0 4.6 1.4 1
94 5.8 2.6 4.0 1.2 1
95 5.0 2.3 3.3 1.0 1
96 5.6 2.7 4.2 1.3 1
97 5.7 3.0 4.2 1.2 1
98 5.7 2.9 4.2 1.3 1
99 6.2 2.9 4.3 1.3 1
100 5.1 2.5 3.0 1.1 1
101 5.7 2.8 4.1 1.3 1
102 6.3 3.3 6.0 2.5 2
103 5.8 2.7 5.1 1.9 2
104 7.1 3.0 5.9 2.1 2
105 6.3 2.9 5.6 1.8 2
106 6.5 3.0 5.8 2.2 2
107 7.6 3.0 6.6 2.1 2
108 4.9 2.5 4.5 1.7 2
109 7.3 2.9 6.3 1.8 2
110 6.7 2.5 5.8 1.8 2
111 7.2 3.6 6.1 2.5 2
112 6.5 3.2 5.1 2.0 2
113 6.4 2.7 5.3 1.9 2
114 6.8 3.0 5.5 2.1 2
115 5.7 2.5 5.0 2.0 2
116 5.8 2.8 5.1 2.4 2
117 6.4 3.2 5.3 2.3 2
118 6.5 3.0 5.5 1.8 2
119 7.7 3.8 6.7 2.2 2
120 7.7 2.6 6.9 2.3 2
121 6.0 2.2 5.0 1.5 2
122 6.9 3.2 5.7 2.3 2
123 5.6 2.8 4.9 2.0 2
124 7.7 2.8 6.7 2.0 2
125 6.3 2.7 4.9 1.8 2
126 6.7 3.3 5.7 2.1 2
127 7.2 3.2 6.0 1.8 2
128 6.2 2.8 4.8 1.8 2
129 6.1 3.0 4.9 1.8 2
130 6.4 2.8 5.6 2.1 2
131 7.2 3.0 5.8 1.6 2
132 7.4 2.8 6.1 1.9 2
133 7.9 3.8 6.4 2.0 2
134 6.4 2.8 5.6 2.2 2
135 6.3 2.8 5.1 1.5 2
136 6.1 2.6 5.6 1.4 2
137 7.7 3.0 6.1 2.3 2
138 6.3 3.4 5.6 2.4 2
139 6.4 3.1 5.5 1.8 2
140 6.0 3.0 4.8 1.8 2
141 6.9 3.1 5.4 2.1 2
142 6.7 3.1 5.6 2.4 2
143 6.9 3.1 5.1 2.3 2
144 5.8 2.7 5.1 1.9 2
145 6.8 3.2 5.9 2.3 2
146 6.7 3.3 5.7 2.5 2
147 6.7 3.0 5.2 2.3 2
148 6.3 2.5 5.0 1.9 2
149 6.5 3.0 5.2 2.0 2
150 6.2 3.4 5.4 2.3 2
151 5.9 3.0 5.1 1.8 2

19
assets/js/main.js Normal file
View File

@@ -0,0 +1,19 @@
function checkFeatures() {
nbFeatures = 0
if (document.forms["features"]["sepal-length"].value != '') {
nbFeatures = nbFeatures + 1 ;
}
if (document.forms["features"]["sepal-width"].value != '') {
nbFeatures = nbFeatures + 1 ;
}
if (document.forms["features"]["petal-length"].value != '') {
nbFeatures = nbFeatures + 1 ;
}
if (document.forms["features"]["petal-width"].value != '') {
nbFeatures = nbFeatures + 1 ;
}
if (nbFeatures < 2) {
alert("Waring: You need to put at least 2 characteristics.");
return false ;
}
}

BIN
assets/pic/Setosa.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
assets/pic/Versicolor.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
assets/pic/Virginica.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
assets/pic/monkey.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

90
cgi-bin/iris.py Normal file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env python
from knn import *
import cgi
import cgitb
L = []
S = []
K = []
U = []
cgitb.enable()
irisFile = ("assets/iris.csv")
form = cgi.FieldStorage() # Renvoie les données du formulaire sous
# la forme d'un dictionnaire.
if 'sepal-length' in form:
sepalLength = float(form['sepal-length'].value)
L.append(sepalLength)
S.append("longueur des sépales")
K.append(0)
U.append(float(form['sepal-length'].value))
if 'sepal-width' in form:
sepalWidth = float(form['sepal-width'].value)
L.append(sepalWidth)
S.append("largeure des sépales")
K.append(1)
U.append(float(form['sepal-width'].value))
if 'petal-length' in form:
petalLength = float(form['petal-length'].value)
L.append(petalLength)
S.append("longueur des pépales")
K.append(2)
U.append(float(form['petal-length'].value))
if 'petal-width' in form:
petalWidth = float(form['petal-width'].value)
L.append(petalWidth)
S.append("largeur des pépales")
K.append(3)
U.append(float(form['petal-width'].value))
if len(K) == 2:
nmb = (K[0], K[1])
elif len(K) == 3:
nmb = (K[0], K[1], K[2])
else:
nmb = (K[0], K[1], K[2], K[3])
if len(U) == 2:
meze = (U[0], U[1])
elif len(U) == 3:
meze = (U[0], U[1], U[2])
else:
meze = (U[0], U[1], U[2], U[3])
a = readPoints(irisFile, (nmb))
prout = prediction(a, (meze), 5)
if prout == 0:
espir = 'Setosa'
elif prout == 1:
espir = 'Versicolor'
else:
espir = 'Virginica'
a = len(L)
i= 0
txt=""
while i < a:
txt = txt + "<ul> <li> <p> " + "La valeur est de " + str(L[i]) + " pour la " + S[i] + " </p> </li> </ul> \n"
i = i + 1
print (f'''
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="../assets/css/style_iris.css" />
<title>Résultat</title>
</head>
<body>
<h1 class="titre">Reconnaissance d'une iris</h1>
{txt}
<p>Il s'agit probablement de l'espèce <strong>{espir}</strong></p>
<div style = "position:relative; left:850px; bottom:250px";
<center><img src = ../assets/pic/{espir}.jpeg></center>
</body>
''')

85
cgi-bin/knn.py Normal file
View File

@@ -0,0 +1,85 @@
#!/usr/bin/env python
def readPoints(filename, indexes):
""" Renvoie les informations du fichier filename sous la forme
d'un dictionnaire dont
* une clé est un point
* la valeur associée est la classe d'appartenance du point.
indexes : indices des attributs à récupérer.
"""
p = '['
fichier = open(filename, 'r')
iris = {}
fichier.readline()
for line in fichier:
line = line.split(',')
line[4] = line[4][0] #retire le \n
for u in range(len(indexes)):
j = [float(line[indexes[u]]) for u in range(len(indexes))]
j = tuple(j)
iris[j] = line[4]
fichier.close()
return iris
def dist(P1, P2):
""" Renvoie la distance entre les points P1 et P2.
P1 et P2 sont deux points dans un espace de dimension quelconque.
"""
P = 0
x = []
for i in range(len(P1)):
x.append(float(P2[i]) - float(P1[i])) #on mesure chacune des longueurs (vecteur)
for i in (x):
P = P + i**2 #formule de module
P = P**0.5 # puissance 0.5 = racine carré
return P
def prediction(clsPoints, P, k):
""" Renvoie la classe d'appartenance du point en utilisant le
jeu de données clsPoints et en appliquant la méthode des
k plus proches voisins.
"""
D = clsPoints
fleur0 =0
fleur1 =0
fleur2 =0
l = []
D2 = {}
for i in D.keys():
l.append(dist(i, P))
D2[dist(i, P)] = i
liste = sorted(l)
for u in range(k):
if D[D2[liste[u]]] == '0':
fleur0 += 1
elif D[D2[liste[u]]] == '1':
fleur1 += 1
else:
fleur2 += 1
end = [fleur0, fleur1, fleur2]
if max(end) == fleur0:
return 0
elif max(end) == fleur1:
return 1
else:
return 2

27
index.html Normal file
View File

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="assets/css/style.css" />
<script src="assets/js/main.js"></script>
<title>Famille Iris</title>
</head>
<body>
<h1 class="titre"><a href="https://fr.wikipedia.org/wiki/Iris_(genre_v%C3%A9g%C3%A9tal)">Iris</a></h1>
<p> il existe plusieurs fleus d'iris, ce site vous permet de déduire l'esp<a href= https://www.monkee.games/4.html>è</a>ce en fonction des caractéristiques de l'espèces</p>
<p> il faut au minimum deux critères pour une recherche pertinente</p>
<form action="cgi-bin/iris.py" name="features"><center><p>longueur des sépales</p></center><tr> <td> <center><input name="sepal-length" step="0.1" size="7" type="number"> </td></tr></center><br>
<center><p>largeur des sépales</p></center> <tr> <td> <center><input name="sepal-width" step="0.1" size="7" type="number"></center> </td></tr><br>
<center><p>longueur des pétales</p></center><tr> <td> <center><input name="petal-length" step="0.1" size="7" type="number"></center> </td></tr><br>
<center><p>largeur des pétales</p></center><tr> <td> <center><input name="petal-width" step="0.1" size="7" type="number"></center> </td></tr> </p><br>
<center>
<input class="favorite styled"
type="submit"
onclick="return checkFeatures()"
value="Trouver l'iris">
</center>
</form>
<script src="assets/js/main.js"></script>
</body>

8
iris.code-workspace Normal file
View File

@@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}

16
iris.html.dev Normal file
View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="assets/css/style_iris.css" />
<title>Résultat</title>
</head>
<body>
<h1 class="titre">Reconnaissance d'une iris</h1>
<ul><li>Longeur des sépales: $longeur$</li></ul><br>
<ul><li>Largeur des sépales: $largeur$</li></ul>
<p>Il s'agit probablement de l'espèce <strong>$espèce$</strong></p>
<div style = "position:relative; left:850px; bottom:250px";
<center><img src = assets/pic/versi.jpeg></center>
</body>