Spaces:
Sleeping
Sleeping
Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .gitattributes +28 -0
- PP1-Collection_Database_new-cleaned.csv +241 -0
- README.md +10 -5
- app.py +1281 -0
- pictures_data/2022.0.86_medium.jpg +0 -0
- pictures_data/Abena_01_021.jpg +0 -0
- pictures_data/Abena_02_408.jpg +3 -0
- pictures_data/Abena_03_513.jpg +3 -0
- pictures_data/Abena_04_539.jpg +3 -0
- pictures_data/IMadeYou_01_053.jpg +3 -0
- pictures_data/IMadeYou_02_220.jpg +3 -0
- pictures_data/IMadeYou_03_406.jpg +3 -0
- pictures_data/IMadeYou_04_710.jpg +3 -0
- pictures_data/IMadeYou_05_828.jpg +3 -0
- pictures_data/IMadeYou_06_1243.jpg +3 -0
- pictures_data/Isabella_1_045.jpg +0 -0
- pictures_data/Isabella_2_1737.jpg +3 -0
- pictures_data/Isabella_3_1910.jpg +3 -0
- pictures_data/MAR-BVM-7-2022-0-100-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-100-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-105-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-105-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-125-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-128-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-128-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-130-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-130-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-131-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-132-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-132-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-133_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-134-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-134-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-134-003_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-135-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-135-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-136-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-136-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-138-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-138-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-139-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-139-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-147-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-147-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-148-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-148-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-149-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-149-002_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-153-001_medium.jpg +0 -0
- pictures_data/MAR-BVM-7-2022-0-153-002_medium.jpg +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,31 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
pictures_data/Abena_02_408.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
pictures_data/Abena_03_513.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
pictures_data/Abena_04_539.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
pictures_data/IMadeYou_01_053.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
pictures_data/IMadeYou_02_220.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
pictures_data/IMadeYou_03_406.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
pictures_data/IMadeYou_04_710.jpg filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
pictures_data/IMadeYou_05_828.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
pictures_data/IMadeYou_06_1243.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
pictures_data/Isabella_2_1737.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
pictures_data/Isabella_3_1910.jpg filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
pictures_data/Odamado_04_734.jpg filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
pictures_data/Odamado_06_1230.jpg filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
pictures_data/Odamado_07_1554.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
pictures_data/de-refter-msk-0721.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
pictures_data/het-kind-met-de-vissen-msk-0351.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
pictures_data/kind-slapend-op-zijn-trommel-msk-0317.jpg filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
pictures_data/lezend-kind-msk-0335.jpg filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
pictures_data/moederschap-msk-0639.jpg filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
pictures_data/nieuwsgierigheid-msk-0449.jpg filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
pictures_data/portret-van-een-jonge-man-17de18de-eeuw-msk-0033.jpg filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
pictures_data/spaarpot-geglazuurd-aardewerk-torhout-1ste-helft-20ste-eeuw-mos-7357.jpg filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
pictures_data/strandtoneel-msk-0235.jpg filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
pictures_data/tegel-faience-noord-nederland-18de-eeuw-mos-5161.jpg filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
pictures_data/tegel-faience-noord-nederland-18de-eeuw-mos-5162.jpg filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
pictures_data/winterlandschap-met-kinderen-msk-0337.jpg filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
src/art_pieces_db/resources/places/BE.csv.lzma filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
src/art_pieces_db/resources/places/FR.csv.lzma filter=lfs diff=lfs merge=lfs -text
|
PP1-Collection_Database_new-cleaned.csv
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1;;Le Fresnoy;movie;2016;Alexandru;;;child abuse, sadness, childhood, children drawings, family photo archive, autobiography;sad, angry, frustrated, bitter, intimate;"Making this film at this time in my life seems essential for me. I have always felt great shame talking about my childhood, even if it always made me sad."" This creative documentary made in animation from children's drawings, films and family photographs, uniquely evokes the traumas of a painful childhood in the small town of Frătăuții Vechi in Romania";And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;IMadeYou_01_053, IMadeYou_02_220, IMadeYou_03_406, IMadeYou_04_710, IMadeYou_05_828,
|
| 2 |
+
2;;Le Fresnoy;movie;2015;Isabelle;;Boulogne-sur-Mer;childhood portraits, city daily life, toy, boredom;agressive, confused, bored, threatened, lonely,;"“It is early. Still very early. Stop acting as if you’re an owl, Isabelle. Let us sleep, and get back to sleep. We’re not interested in your dreams and your poetry.”
|
| 3 |
+
|
| 4 |
+
Between the wild stories of Adriana, a modern little girl, and the poetry of Isabelle, accused of treason by her brothers in the 16th century,what is the connection? Between the literary text by André Pieyre de Mandiargues and the prerecorded worlds of love on a modern automatic doll, what possible, fantasised echoes can there be?
|
| 5 |
+
|
| 6 |
+
Here, Adriana is telling a story, Camille grumbling and Océane, in who knows what boredom, is trying to get her doll to speak its never-ending discourse. The trace of a programme or, on the contrary, the hope of a possible emancipation.
|
| 7 |
+
|
| 8 |
+
This film, freely inspired by André Pieyre de Mandiargues’ play Isabella Morra, came out of a shoot with children on a housing estate in the upper reaches of Boulogne-sur-Mer. Through material made up of everyday activities and portraits of children in their spontaneous theatricality, a play of resonances is established with the world of the text.";And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;Isabella_1_045, Isabella_2_1737, Isabella_3_1910
|
| 9 |
+
3;;Le Fresnoy;movie;2024;Emilien;;;cooking recipe, grand mother, family film archive, DNA storage;joyful, confused, interested, thankful, intimate;"I’ve just stored memories of my grandmother Mado in synthetic DNA. My memories have taken on physical form.
|
| 10 |
+
|
| 11 |
+
Before, in order to store our images and share our recipes, there was the Internet, but the web is getting old and is being privatised at breakneck speed, while its energy consumption promises us scorching tomorrows.
|
| 12 |
+
|
| 13 |
+
DNA is the future: its storage requires no energy, and it can be kept for eternity (even if fifty years would have been enough for me). But DNA is expensive to synthesise. With my budget, I can only afford to store 200 kilobytes of data; the suitcase of the future is small. What memories should I choose? And how should I do it? So far, there are no tutorials.
|
| 14 |
+
|
| 15 |
+
I saved a few traces: a letter to Mado, the recipe for the dessert that made her famous (the coconut flan), the image of a red disc that I will use in my film, a family photo and an imprint of her voice.
|
| 16 |
+
|
| 17 |
+
ODAMADO, an imperfect manual for saving memories in DNA.";If you had a very limited space to store memories, what are 3 memories you would keep?;Odamado_01_400, Odamado_02_433, Odamado_03_649, Odamado_04_734, Odamado_05_818, Odamado_06_1230, Odamado_07_1554
|
| 18 |
+
4;;Le Fresnoy;movie;2015;Amel;;;blanket, tradition, story, family, wool, gift, wedding, colors, green, white, pink;Happy, intimate, loving, thankful, valued;Abena (blanket in tunisian) is a video that mixes sound interviews and graphic animation, to tell the story of my blanket. A wollen blanket woven by my tunisian grandmother, my father,s mother, and given to my mother for her wedding.I collected what the members of my family had to say about this object, and kept the sound to weave the story of this blanket with the threads of everyone’story. Thes are differents stories wich talk about and toy with the same object without ever really referring to it. What particullary interested me is what revolves around this blanket, talking of it without naming it, speaking of it without saying it, describing it without showing it.;And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;Abena_01_021, Abena_02_408, Abena_03_513, Abena_04_539
|
| 19 |
+
5;MSK_0320;Abby;"Sculpture
|
| 20 |
+
(Marble)";1896;Godfried, Edmond, Pierre, Marie;;;White, stone, marble, child, barefoot, nightgown,;unfocussed, Lonely, Sad, distant, afraid, insecure, scared, sleepy, fragile;"Marble sculpture depicting a standing child in a nightgown, barefoot and with hands behind the back, lost in thought.The purity and restraint of this work attest to Devreese’s mastery. The sculpture represents Edmond Desmeth, son of Pierre and Marie Pauwels. It is based on a plaster model exhibited in Kortrijk in 1896.
|
| 21 |
+
Nineteenth-century society reflected profound social changes, particularly due to the rise of the middle class as an influential force. Art became an important means for this class to express their status and lifestyle.
|
| 22 |
+
Godefroid Devreese’s marble sculpture presents a boy in a nightgown and raises questions about his social standing. The sculpture is not only an artistic creation but also a sociological document that highlights the role of children in the nineteenth-century bourgeoisie.";Do you have childhood memories of waking up at night because of a nightmare? Or what was a memorable good dream you remember still?;de-kleine-filosoof-msk-0320
|
| 23 |
+
6;MSK_0721;Abby;Painting;1973;Marc;;;Cantine, children, tables, houseware, nanny, caretakers;"bored, confused,
|
| 24 |
+
Lonely, Scared, anxious, dissaproving";"In De refter, we are struck by the cold and penetrating gaze of the caretakers. The chilly colors and the vacant stares of the children leave a lasting impression. There is a tension in the image. The painting evokes a specific atmosphere of temporary calm—a calm imposed with a certain force through its sober, intimidating ambiance.
|
| 25 |
+
As a talented young artist, Marc Stockman left for Paris in 1955. There, he drew inspiration from the latest developments in modern painting: surrealism, abstraction, the fantastic, and American action painting. After a period of abstract work influenced by Kandinsky, the roots of Flemish expressionism resurfaced, and the human figure once again took center stage. From 1972 onward, Marc Stockman focused on a more direct approach to reality, aligned with American hyperrealism.
|
| 26 |
+
Starting from photographs and documents—often depicting everyday subjects—he constructed his canvases. The aim was no longer to interpret reality, but to convey its essence.";And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;de-refter-msk-0721
|
| 27 |
+
7;MOS_7357;Abby;"Sculpture
|
| 28 |
+
(Ceramic)";first half 20th century;;;Torhout, Bruges, Sint-Niklaas;Money box, Baby, hat, head, crying, ceramic;Angry, Desperate, Sad;"Money box in the shape of a crying child’s head with a green cap (or pinned helmet), featuring an opening at the bottom. Folk pottery. The growing sociological interest in social groups and classes during the late nineteenth and early twentieth centuries brought about a fascination with folk culture. Industrialization and its social consequences, along with the increasing presence of technology and the rise of mass production, triggered a counterreaction: a distinct visual language was developed to reflect local cultures.
|
| 29 |
+
Special attention was paid to everyday life and domesticity—an interest that also manifested in ceramic production. In Torhout, too, the focus of local ceramic production in the early twentieth century lay primarily on household wares. However, the region also saw more artistic or personalized creations, often made to order. The pottery from this period shows strong similarities with works produced in prominent centers such as Kortrijk, but also in places like Bruges and Sint-Niklaas.";And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;spaarpot-geglazuurd-aardewerk-torhout-1ste-helft-20ste-eeuw-mos-7357
|
| 30 |
+
9;MSK_0351;Abby;Painting;20th century;Hermann;;;Little girl, child, bowl, fish, painting;Curious, Playful, free;Portrait of a girl reaching into a fishbowl. A loosely executed yet confident painting that reflects a loving observation. Hermann Courtens (1884–1956) was the son of Baron Franz Courtens. He painted landscapes, but was especially known for his still lifes with flowers, interiors, children, and young girls—often in costume and set in intimate, domestic scenes.;Did you have pets when you were a kid? What's your best childhood memory with a pet?;het-kind-met-de-vissen-msk-0351
|
| 31 |
+
10;MSK_0033;Abby;Painting;18th century;Arnold;;;Portrait, painting, little boy, child, nice clothes, red;pressured, distant;Portrait of a young man with long blond hair and a shy gaze. The child portraits, attributed to the workshop of Arnold van Houbraken, fit within the long portrait tradition of the upper class, where the expectations of the parents are often reflected in the portraits of their young children.;And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;portret-van-een-jonge-man-17de18de-eeuw-msk-0033
|
| 32 |
+
11;MSK_0639;Abby;Drawing;20th century;Georges;;;Mother, child, Madonna, drawing;Loving, peaceful;A seated mother holds a child in her arms. A recurring motif in the work of the artist George Minne. Minne portrays motherhood in a non-stereotypical way, far removed from traditional Madonna images. The drawing shows a slender and sorrowful female figure, contrasting with the usual image of maternal care and strength.;And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;moederschap-msk-0639
|
| 33 |
+
13;MOS_5162;Abby;"Tile
|
| 34 |
+
(Ceramic)";18th century;;;Delft;Children, game, stilts tile, ceramic,;Happy, Playful, Free;Tile with a blue depiction of a children’s game: stilts. In the corners, small ox heads. The first shipment of Chinese porcelain (known as ‘kraak porcelain’) arrived in Amsterdam in 1602. Shortly after, the Delft pottery makers began copying Chinese porcelain. As they were unfamiliar with the process of making porcelain, their ceramics were produced in a much thinner version and made from finer, higher-quality yellow clay instead of coarse red clay. This led to the fact that, around 1620-1625, tiles were no longer just used as floor tiles, but were also sold as wall tiles, featuring various depictions of Chinese gardens, and later also scenes from daily life with main motifs such as flowers, flower vases, various animals, mythical creatures, insects, birds, portraits, riders and soldiers, and later also trades, cupids, and children’s games. Tiles depicting children's games in blue-and-white design were first circulated in 1630. By the mid-17th century, around 1650, a series of children’s game tiles were made in Rotterdam. Early children’s game tiles featured large figures. Soon after, a series of children's game tiles with 48 different depictions appeared in Rotterdam, with a spider motif in the corners. The spider became a popular corner motif from the second half of the 17th century, as it was easy to make and remained in circulation until the 20th century. A contemporary tile tableau by Tinus Vermeersch (MSK/1237) evokes the memory of similar Delft and Northern Dutch tiles from the 17th and 18th centuries.;What was your favorite game when you were a child?;tegel-faience-noord-nederland-18de-eeuw-mos-5162
|
| 35 |
+
14;MOS_5161;Abby;"Tile
|
| 36 |
+
(Ceramic)";18th century;;;;Children, game, marbles, tile, ceramic,;Happy, Playful, Free;Tile with a blue depiction of a children's game: marbles. In the corners, small ox heads. The first shipment of Chinese porcelain (known as ‘kraak porcelain’) arrived in Amsterdam in 1602. Shortly after, the Delft pottery makers began copying Chinese porcelain. As they were unfamiliar with the process of making porcelain, their ceramics were produced in a much thinner version and made from finer, higher-quality yellow clay instead of coarse red clay. This led to the fact that, around 1620-1625, tiles were no longer just used as floor tiles, but were also sold as wall tiles, featuring various depictions of Chinese gardens, and later also scenes from daily life with main motifs such as flowers, flower vases, various animals, mythical creatures, insects, birds, portraits, riders and soldiers, and later also trades, cupids, and children’s games. Tiles depicting children's games in blue-and-white design were first circulated in 1630. By the mid-17th century, around 1650, a series of children’s game tiles were made in Rotterdam. Early children’s game tiles featured large figures. Soon after, a series of children's game tiles with 48 different depictions appeared in Rotterdam, with a spider motif in the corners. The spider became a popular corner motif from the second half of the 17th century, as it was easy to make and remained in circulation until the 20th century. A contemporary tile tableau by Tinus Vermeersch (MSK/1237) evokes the memory of similar Delft and Northern Dutch tiles from the 17th and 18th centuries.;What was your favorite game when you were a child?;tegel-faience-noord-nederland-18de-eeuw-mos-5161
|
| 37 |
+
15;MSK_1199;Abby;Photograph;;Titus;;Ostende;boy;Lonely, Isolated, empty;Since 2011, Titus Simoens has been working on a series about students living under strict school regimes. In Blue, see, we see the boys from the Ostend maritime school IBIS. In the photo series Mount Song, Simoens shows the students of a Chinese kung fu school. The final part, Los Domadores, takes place in a boxing school in Cuba. In these school lives, an intense discipline brings order to the days, and the years are spent on specialized training that aims to offer the students future prospects. Simoens captures the small moments of doubt, camaraderie, loneliness, and joy in which these young people momentarily escape the heavy obedience required of them. This photo is part of the documentary series Blue, see, about the lives of children at the Ibis Maritime School in Ostend. The Ibis School is a boarding school for children with behavioral problems or difficult home situations. These children are trained to become fishermen or sailors. The training helps them develop more discipline and provides structure to their lives. The series shows the institutionalized lives of boys who share the same fate, becoming almost like family to one another. Despite the strict visual language, Titus manages to tell a human story, contrasting the camaraderie with the Spartan conditions of their training. The photo was used as the cover for Rats (2012) by the Kortrijk band Balthazar. Titus Simoens (1985) won the Nikon Young Promising Award in 2012. His work appears in numerous Belgian and international media and is exhibited in various museums. In 2014, he won the Monography Series Award from Nikon and Bozar, resulting in a solo exhibition at the Palais des Beaux-Arts in Brussels. That year, he was also featured in an episode of De Canvasconnectie on Canvas.;;
|
| 38 |
+
16;MSK_0449;Abby;Painting;19th century;Louis, Pierre;;;Little girl, painting, dress, flowers, pink, furniture;"Curious
|
| 39 |
+
Playful";Portrait of a girl, a child of the wealthy, rummaging through the drawer of a chest of drawers. In a typical bourgeois interior, the work provides an intimate insight into the daily life of the middle class. Louis Pierre Verwee (1804 – 1877) is the father of the renowned animal painter Alfred Verwee. He was a student of J.B. De Jonghe and Eugène Verboeckhoven. He mainly painted animal scenes and winter landscapes.;And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;nieuwsgierigheid-msk-0449
|
| 40 |
+
17;MSK_0235;Abby;Painting;19th century;Albert;;;Children, beach, poppet, holiday's, umbrella, sailing boat, sea;"Playful
|
| 41 |
+
Happy";Summer genre scene with two bourgeois children on the beach. Albert Roosenboom (Rotterdam 1845 – Ixelles 1893) was a student of Jean-Baptiste Meunier. He frequently painted women and, especially, children from the upper class, in bourgeois interiors or civilized surroundings;What was your favourite game when you were a child?;strandtoneel-msk-0235
|
| 42 |
+
18;MSK_0317;Abby;Sculpture;19th century;Constant;;;Litte boy, child, drum, sleeping, white, marble, sculpture, instrument;Peaceful;The marble sculpture 'Child Sleeping on His Drum' is an anecdotal, yet very skillfully executed work, fitting within the 19th-century tradition of sculpting sleeping children. It is the work of Constant Devreese (1823–1900) from 1880, a native of Kortrijk. Constant Devreese was the father of Godfried Devreese, who is best known for creating the Groeninge Monument;Do you have childhood memories of waking up at night because of a nightmare? Or what was a memorable good dream you remember still?;kind-slapend-op-zijn-trommel-msk-0317
|
| 43 |
+
19;MSK_0337;Abby;Painting;19th century;Harald, Bertrand;;;Snow, children, game, village, broter, sister, painting;Playful, happy, dissaproving, skeptical, excited;A genre scene in a Norwegian snow landscape. A suspicious girl, holding hands with a boy, is coming from school: two boys are ready to pelt them with snowballs.;What was your favourite game when you were a child?;winterlandschap-met-kinderen-msk-0337
|
| 44 |
+
20;MSK_0335;Abby;Painting;19th century;Henri;;;Little boy, book, dog, hat, reading, painting;Peaceful, interested, Sad, perplexed;"Genre scene of a boy sitting on a wooden floor. He is reading a book, surrounded by various objects; a white dog watches. Henri Baekelandt (1834 – 1855) was a student at the Academy of Kortrijk and was seen as a promising portrait and genre painter until his early death.";And You? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;lezend-kind-msk-0335
|
| 45 |
+
21;JL.2022.0.22;Maison des collections, Ville de Mons;Hand written paper note;1803;Sophie, Félicité;09/10/2025;Cuesmes;Signe de reconnaissance, feuille de papier, enfant trouvé, nourrice, bébé, abandon;Sad, preplexed;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 46 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.22
|
| 47 |
+
22;JL.2022.0.23;Maison des collections, Ville de Mons;Hand written paper note;1802;Nicolas;07/01/2025;;Signe de reconnaissance, billet de papier, ruban, enfant déposé, bons soins, bébé;hopeful, loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 48 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.23
|
| 49 |
+
23;JL.2022.0.24;Maison des collections, Ville de Mons;Engraving;1834;Michel, Cécile;;Paris;Signe de reconnaissance, gravure, martyr;Sad, perplexed,;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 50 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons. + Michel Corneille?";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.24
|
| 51 |
+
24;JL.2022.0.25;Maison des collections, Ville de Mons;Printed sheet;1800-1850;Pierre;;Tournai;Signe de reconnaissance, prière, vierge, Notre-dame, livre, page, impression;Sad, perplexed,;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 52 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons. + explication prière";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.25
|
| 53 |
+
25;JL.2022.0.26;Maison des collections, Ville de Mons;Rubans;1800-1850;;;;Signe de reconnaissance, rubans, tissu;Sad, perplexed,;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 54 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.26
|
| 55 |
+
26;JL.2022.0.27;Maison des collections, Ville de Mons;Hand written paper note;1800-1850;Constant;;;Signe de reconnaissance, morceau de tissu, billet de papier, enfant, mère, père, abandon, orphelin;Sad, worried, lonely;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 56 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Can you remember a childhood memory involving an important letter or note ? Can you share your story?;MAR-BVM-7-2022.0.27
|
| 57 |
+
27;JL.2022.0.28;Maison des collections, Ville de Mons;painted Drawing;1834;Dorothée, Joseph;;;Signe de reconnaissance, palme, fleurs, couleurs, encre, femme,;worried;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 58 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons. + explication Icono";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.28
|
| 59 |
+
28;JL.2022.0.29;Maison des collections, Ville de Mons;Hand written paper note;1813;Armand;;;Signe de reconnaissance, ruban, garçon, hospice, billet de papier, enfant déposé;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 60 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.29
|
| 61 |
+
29;JL.2022.0.30;Maison des collections, Ville de Mons;watercolor;1823;Jean, Baptiste, Octave;19/03/2025;;Signe de reconaissance, aquarelle, crucifix, baptème, hospice, bons soins;hopeful, loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 62 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.30
|
| 63 |
+
30;JL.2022.0.31;Maison des collections, Ville de Mons;hand written page of paper;1790;Eugénie, Sophie;29/07/2025;;Signe de reconnaissance, enfant, nourrice, baptème, papier, sceau de cire;hopeful, loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 64 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.31
|
| 65 |
+
31;JL.2022.0.32;Maison des collections, Ville de Mons;Hand written paper note;1797;Marie-Thérèse;11/04/2025;;Signe de reconnaissance, sceau de cire, ruban ligné, tissu, billet de papier, enfant, récompense, bons soins;hopeful, thankful,;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 66 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.32
|
| 67 |
+
32;JL.2022.0.33;Maison des collections, Ville de Mons;hand written document;1804;Joseph;31/07/2025;;Signe de reconnaissance, tissu, papier, triangle;thankful, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 68 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.33
|
| 69 |
+
33;JL.2022.0.35;Maison des collections, Ville de Mons;hand written page of paper;1819;Nicolas, Louis;;;Signe de reconnaissance, morceau de tissu, rayures, triangle, lettres brodées, bons soins, nourrice, baptème;hopeful, loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 70 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.35
|
| 71 |
+
34;JL.2022.0.36;Maison des collections, Ville de Mons;Printed sheet;1816;Arnould;;;Signe de reconnaissance, extrait, patron des brasseurs, saint, image, bleu, orange, église, brasserie, texte imprimé;sad, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 72 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you, when you were a child, did you have a saint, a relative or a character, real or imaginary, invoked by your parents or grandparents to protect you?;MAR-BVM-7-2022.0.36
|
| 73 |
+
35;JL.2022.0.38;Maison des collections, Ville de Mons;Engraving;1824;Louise;;;Signe de reconnaissance, gravure, bleu, saint;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 74 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you, when you were a child, did you have a saint, a relative or a character, real or imaginary, invoked by your parents or grandparents to protect you?;MAR-BVM-7-2022.0.38
|
| 75 |
+
36;JL.2022.0.40;Maison des collections, Ville de Mons;Medal;1800-1850;;;Rome;Signe de reconnaissance, médaille, métal, collier, cadeau, famille, Italie;loving, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 76 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.40
|
| 77 |
+
37;JL.2022.0.42;Maison des collections, Ville de Mons;Sheet of paper;1826;Agathe;;;Signe de reconnaissance, papier, découpe, bordure en zig-zag, cercle;sad, creative, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 78 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.42
|
| 79 |
+
38;JL.2022.0.43;Maison des collections, Ville de Mons;wood case;1815;;;;Signe de reconnaissance, message, étui, bois, décor, précieux, ivoir, pendentif,;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 80 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.43 / MAR-BVM-7-2022.0.43-45
|
| 81 |
+
39;JL.2022.0.46;Maison des collections, Ville de Mons;Hand written paper note;1834;Paul;;;Signe de reconnaissance, billet de papier, découpe, cercle, baptème;sad, hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 82 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.46
|
| 83 |
+
40;JL.2022.0.47;Maison des collections, Ville de Mons;Hand written paper note;1823;;25/06/2025;;Signe de reconnaissance, tissu brodé, bons soins, enfant déposé;hopeful;"Les bébés que l'on plaçait dans le tour étaient accompagnés de ""signes de reconnaissance"". On épinglait aux langes de l'enfant soit une image pieuse, soit une carte à jouer, soit une médaille ou un ruban, mais l'objet était toujours découpé de façon irrégulière et le-ou les - parents en conservaient l'autre moitié. Ceci indique clairement que c'était généralement à contrecœur que l'on se résignait à l'abandon, avec l'espoir de pouvoir récupérer l'enfant plus tard, dans des temps meilleurs. Le signe de reconnaissance est très souvent accompagné d'un papier plié contenant un message écrit émouvant : on donne le nom de baptême de l'enfant et on supplie d'en prendre soin.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-47
|
| 84 |
+
41;JL.2022.0.48;Maison des collections, Ville de Mons;Piece of fabric;1814;;11/10/2025;;Signe de reconnaisance, message, manuscrit, tissu brodé, triangle, tonneau, baptème, bonnet, chemise, rouge, violet, bleu, blanc, enveloppe;sad, hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 85 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have a childhood memory linked to a special piece of clothe of yours or a uniform you were wearing when you were little ?;MAR-BVM-7-2022.0.48
|
| 86 |
+
42;JL.2022.0.49;Maison des collections, Ville de Mons;Engraving;1818;Claire;01/05/2025;;Signe de reconnaissance, message, vert, rouge, couleurs, crucifix, enfant déposé, récompense;hopeful, thankful, devotion, awe;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 87 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.49
|
| 88 |
+
43;JL.2022.0.50;Maison des collections, Ville de Mons;medal;1814;Sophie, Benoit, Ghislain;;Saint-Ghislain;Signe de reconnaisance, message, baptème, médaille, présent, abbé, Saint Benoit, enfant;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 89 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.50
|
| 90 |
+
44;JL.2022.0.52;Maison des collections, Ville de Mons;Piece of Fabric;1816;;;;Signe de reconnaissance, jarretière, soie, devise, parents, amour, tissu;loving, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 91 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.52
|
| 92 |
+
45;JL.2022.0.54;Maison des collections, Ville de Mons;Engraving;1818;;11/12/2025;Walcourt;Signe de reconnaissance, triangle, papier, gravure, couleurs, bleu, orange, cheval, arbre, Vierge, prière, garcon, bons soins;worried, loving, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 93 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.54
|
| 94 |
+
46;JL.2022.0.58;Maison des collections, Ville de Mons;pious image;1817;Louis;;;Signe de reconnaissance, anges, enfant déposé, image, couleurs;thankful, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 95 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.58
|
| 96 |
+
47;JL.2022.0.59;Maison des collections, Ville de Mons;Playing card;1800-1850;Cesar;;;Signe de reconnaissance, carte, jeu de société, jeux, roi, carreaux;hopefull, sad, playful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 97 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";What was your favorite game when you were a child?;MAR-BVM-7-2022.0.59
|
| 98 |
+
48;JL.2022.0.60;Maison des collections, Ville de Mons;pious image;1800-1851;Georges;;;Signes de reconnaissance, image, couleurs, anges, enfant, Saint-Georges;hopeful, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 99 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you, when you were a child, did you have a saint, a relative or a character, real or imaginary, invoked by your parents or grandparents to protect you?;MAR-BVM-7-2022.0.60
|
| 100 |
+
49;JL.2022.0.62;Maison des collections, Ville de Mons;Engraving;1816;Gustave, Joseph, Jean;27/07/2025;;Signes de reconnaissance, gravure, lion, épée, oiseau, martyr, enfant;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 101 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.62
|
| 102 |
+
51;JL.2022.0.67;Maison des collections, Ville de Mons;Printed book page;1820;Joseph, Joachim, Anna, Marie;;;Signe de reconnaissance, image, famille, prière,;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 103 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? What was your childhood like? Happy, Sad, boring? Would you like to share one memorable memory from your childhood?;MAR-BVM-7-2022.0.67
|
| 104 |
+
52;JL.2022.0.74;Maison des collections, Ville de Mons;Piece of fabric;1800-1850;Désirée, Eloi;;;Signe de reconnaissace, tissu ligné, baptème, message;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 105 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.74
|
| 106 |
+
53;JL.2022.0.75;Maison des collections, Ville de Mons;Hand written note;1767;Guillaume;16/04/2025;;Signe de reconnaissance, baptème, papier, message, moitié;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 107 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.75
|
| 108 |
+
54;JL.2022.0.76;Maison des collections, Ville de Mons;Hand written note;1813;Antoine;;;Signe de reconnaissance, soldat, papier;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 109 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.76
|
| 110 |
+
55;JL.2022.0.78;Maison des collections, Ville de Mons;Piece of fabric;1812;Alexandrine, Françoise;26/02/2025;;Signe de reconnaissance, ruban, trèfles, baptème, enfant, jaune;loving, worried;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 111 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.78
|
| 112 |
+
56;JL.2022.0.80.2;Maison des collections, Ville de Mons;Handwritten note;1822;Henri;31/03/2025;;Signe de reconnaissance, mouchoir, baptème, enfant, message, billet de papier, tissu rouge;loving, worried;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 113 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.80.1 / MAR-BVM-7-2022.0.80.2
|
| 114 |
+
57;JL.2022.0.81;Maison des collections, Ville de Mons;Ribon;1815;Marie, Emilie, Françoise;01/10/2025;;Signe de reconnaissance, fille, nourrice, baptème, bons soins, ruban;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 115 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.81 - 2022.0.81
|
| 116 |
+
58;JL.2022.0.82;Maison des collections, Ville de Mons;pious image;1830;Nicolas, Bernard;;;Signe de reconnaissance, enfants, bassine, arbre, bleu, dorure, anges;sad, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 117 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";What's your best childhood memory linked with a celebration like Saint-Nicolas's day or christmas?;MAR-BVM-7-2022.0.82 - 2022.0.82
|
| 118 |
+
59;JL.2022.0.83;Maison des collections, Ville de Mons;small bag;1833;;;;Signe de reconnaissance, objet précieux, pochette, tissu, etiquette, bleu,;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 119 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.83 - 2022.0.83
|
| 120 |
+
60;JL.2022.0.84;Maison des collections, Ville de Mons;fabric and locket;1816;Benoit, Ghislain;;Saint-Ghislain;Signe de reconnaissance, tissu, rouge, fleurs, médaillon, Saint, pendentif, métal;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 121 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.84 - 2022.0.84
|
| 122 |
+
61;JL.2022.0.85;Maison des collections, Ville de Mons;crucifix and locket;1800-1850;Benoit, Ghislain;;Saint-Ghislain;Signe de reconnaissance, crucifix, crois, christ, metal, saint, abbé, médaillon, pendentif;loving, sad, devotion, awe;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 123 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.85
|
| 124 |
+
62;JL.2022.0.86;Maison des collections, Ville de Mons;locket;1837;Jeanne, Françoise, Chantal;;;Signe de reconnaissance, sainte, femme, doré, sœur, médaillon,;loving, sad, devotion, awe;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 125 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons. + explication Sainte jeanne-Françoise de chantal";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.86
|
| 126 |
+
63;JL.2022.0.88;Maison des collections, Ville de Mons;locket;1800-1850;;;;Signe de reconnaissance, médaillon, métal, pendentif, cerf, vierge, cadeau;sad, devotion, awe;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 127 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.88
|
| 128 |
+
64;JL.2022.0.80;Maison des collections, Ville de Mons;Piece of fabric;1813;;;;Signe de reconnaissance, tissu, décors, bruns, feuilles, entrelats, feuillage;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 129 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.80.1 / MAR-BVM-7-2022.0.80.2
|
| 130 |
+
65;JL.2022.0.91;Maison des collections, Ville de Mons;pious image;1800-1850;Sophie;;;Signe de reconnaissance, bleu, vert, rouge, baptème;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 131 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-91-001
|
| 132 |
+
66;JL.2022.0.95;Maison des collections, Ville de Mons;Piece of Printed sheet;1818;;07/06/2025;Liège;Signe de reconnaissance, billet de papier, baptème texte;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 133 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.95.001/MAR-BVM-7-2022.0.95.002
|
| 134 |
+
67;JL.2022.0.96;Maison des collections, Ville de Mons;Hand written note;1800-1850;Marie, Aldegonde;28/07/2025;;Signe de reconnaissance, billet de papier, ruban, blanc,soie;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 135 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.96
|
| 136 |
+
68;JL.2022.0.97;Maison des collections, Ville de Mons;Hand written note;1829;Virginie,;12/08/2025;;Signe de reconnaissance, billet de papier découpé, vagues, découpe,;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 137 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.97 -001
|
| 138 |
+
69;JL.2022.0.97b;Maison des collections, Ville de Mons;Printed image;1818;Lucie;;;Signe de reconnaissance,image imprimée, moitié, triangle, papier;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 139 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.97.003
|
| 140 |
+
70;JL.2022.0.99;Maison des collections, Ville de Mons;painted drawing on paper;1814;;;;Signe de reconnaissance, découpe, papier, feuillages, couleurs, peinture, bleu, enfant, christ, père,;loving, amazed;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 141 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.99
|
| 142 |
+
71;JL.2022.0.100;Maison des collections, Ville de Mons;Printed image;1818;Charles, Rose;;;Signes de reconnaissance, papier, saint, feuillage, fleurs, découpe, vague, moitié;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 143 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.100 -
|
| 144 |
+
72;JL.2022.0.105;Maison des collections, Ville de Mons;Playing card;1890;;;;Signe de reconnaissance, carte, jeu de société, dame, cœur, rouge;playful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 145 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";What was your favorite game when you were a child?;MAR-BVM-7-2022.0.105
|
| 146 |
+
73;JL.2022.0.123;Maison des collections, Ville de Mons;pious image;1800-1850;;;;Signe de reconnaissance, annonciation, femme, papier, découpe, zig-zag;loving, surprised;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 147 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.123
|
| 148 |
+
74;JL.2022.0.125;Maison des collections, Ville de Mons;pious image;1816;Flore, Marc;;;Signe de reconnaissance, papier, image imprimée, saint, lion, triangle, découpe, moitié;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 149 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.125
|
| 150 |
+
75;JL.2022.0.128;Maison des collections, Ville de Mons;drawing;1816;;;;Signe de reconnaissance, papier, aquarelle, couleurs, vert, orange, bleu, fleurs, découpe, moitié, triangle;creative, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 151 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.128
|
| 152 |
+
76;JL.2022.0.130;Maison des collections, Ville de Mons;printed image;1815;;;;Signe de reconnaissance, papier, moitié, anges, cœur, croix;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 153 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.130
|
| 154 |
+
77;JL.2022.0.131;Maison des collections, Ville de Mons;printed image;1815;Rosalie;;;Signe de reconnaissance, femme, bleu, papier, couleurs, moitié, triangle;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 155 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-131 - 2022.0.131 / MAR-BVM-7-2022.0.131
|
| 156 |
+
78;JL.2022.0.132;Maison des collections, Ville de Mons;Piece of fabric;1800-1850;;;;Signe de reconnaisance, entrelats, tissu, tissage, impression, angelots, feuillage, couronne;creative, sensitive;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 157 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.132
|
| 158 |
+
79;JL.2022.0.133;Maison des collections, Ville de Mons;Piece of fabric;1813;Zoé, Hélène;05/10/2025;;Signe de reconnaissance, note manuscrite, bons soins, tissu, récompense, baptème, enfant;hopeful, thankful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 159 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.133
|
| 160 |
+
80;JL.2022.0.134;Maison des collections, Ville de Mons;Piece of fabric;1813;Eugénie;14/10/2025;;Signe de reconnaissance, billet de papier, message, tissu, fleurs, blanc, baptème;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 161 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.134
|
| 162 |
+
81;JL.2022.0135;Maison des collections, Ville de Mons;Printed image;1815;Alexandrine, Sophie;04/03/2025;;Signe de reconnaissance, image imprimée, saint, papier, moitié, rouge, anges, baptème,;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 163 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.135
|
| 164 |
+
82;JL.2022.0.136;Maison des collections, Ville de Mons;Hand written note;1838;Julie;10/06/2025;;Signe de reconnaissance, enfant déposé, baptème, papier, découpe,;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 165 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-136
|
| 166 |
+
83;JL.2022.0.138;Maison des collections, Ville de Mons;pious image;1816;Juliette;26/07/2025;;Signe de reconnaissance, moitié, papier, image imprimée, couleurs, colombe, vierge, femme, bleu, rose, rouge, ruban blanc, baptème, enfant;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 167 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-138
|
| 168 |
+
84;JL.2022.0.139;Maison des collections, Ville de Mons;Piece of fabric;1820;;;;Signe de reconnaissance, tissu, rouge, motifs, fleurs, bleu;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 169 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-139
|
| 170 |
+
85;JL.2022.0.143;Maison des collections, Ville de Mons;Ribon;1802;Geneviève;16/10/2025;;Signe de reconnaissance, billet de papier, ruban, tissu, enfant trouvé;sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 171 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.143
|
| 172 |
+
86;JL.2022.0.145;Maison des collections, Ville de Mons;Hand written note;1802;Adrien;16/05/2025;;Signe de reconnaissance, billet de papier, ruban, noir,;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 173 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.145
|
| 174 |
+
87;JL.2022.0.147;Maison des collections, Ville de Mons;Piece of fabric;1800-1850;;;;Signe de reconnaissance, tissu, broderie, fleurs, motifs, rouge, blanc;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 175 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.147
|
| 176 |
+
88;JL.2022.0.148;Maison des collections, Ville de Mons;pious image;1800-1851;;;;Signe de reconnaissance, famille, père, mère, moitié, couleurs, vert, panier, végétaux, chérubin, papier, impression;loving, devotion;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 177 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.148
|
| 178 |
+
89;JL.2022.0.149;Maison des collections, Ville de Mons;crucifix;1800-1852;;;;Signe de reconnaissance, metal, pendentif, crucifix, christ, vierge, croix;loving, devotion;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 179 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.149
|
| 180 |
+
90;JL.2022.0.153;Maison des collections, Ville de Mons;piece of fabric;1804;Barthelemy, Joseph;;Ixelles;Signe de reconnaissance, ruban, rond, billet papier, baptème, enfant,;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 181 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-2022-0-153
|
| 182 |
+
91;JL.2022.0.154;Maison des collections, Ville de Mons;piece of fabric;1802;Laurent;;;Signe de reconnaissance, tissu, lignes, rayures, brun, enfant, billet de papier, baptème;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 183 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.154
|
| 184 |
+
92;JL.2022.0.155;Maison des collections, Ville de Mons;piece of fabric;1800-1850;;;;Signe de reconnaissance, végétal, tissu, noir, feuilles, rouge, fleurs, motifs, billet de papier, enfant, bonne nourrice, récompense;hopeful, thankful, loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 185 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.155
|
| 186 |
+
93;JL.2022.0.156;Maison des collections, Ville de Mons;locket;1800-1850;Benoit, Ghislain;;Saint-Ghislain;Signe de reconnaissance, cheveux, souvenirs, médaillons, métal, saint, pendentif, abbé;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 187 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.156
|
| 188 |
+
94;JL.2022.0.161;Maison des collections, Ville de Mons;Piece of fabric;1800-1850;Françoise;;;Signe de reconnaissance, tissu, message, billet de papier, rouge, triangle, pois, nourrice, bons soins, enfant, récompense;thankful, sad;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 189 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.161
|
| 190 |
+
95;JL.2022.0.165;Maison des collections, Ville de Mons;handwritten note;1800-1850;Joseph;;;Signe de reconnaissance, billet de papier, baptème, nom, moitié;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 191 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-165 / MAR-BVM-7-2022.0.165
|
| 192 |
+
96;JL.2022.0.170;Maison des collections, Ville de Mons;Drawing;1800-1850;;;;Signe de reconnaissance, papier, saints, épée, rouge, moitié, baptème;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 193 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-170
|
| 194 |
+
97;JL.2022.0.175;Maison des collections, Ville de Mons;Piece of fabric;1801;François, Louis;28/11/2025;;Signe de reconnaissance, tissu, damier rouge, billet de papier;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 195 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-175
|
| 196 |
+
98;JL.2022.0.179;Maison des collections, Ville de Mons;pious image;1801;Charlotte, Colette;;;Signe de reconnaissance, papier, serpent, bleu, moitié, baptème, enfant;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 197 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-179
|
| 198 |
+
99;JL.2022.0.180;Maison des collections, Ville de Mons;Playing card;1800-1850;Victoire;13/03/2025;;Signe de reconnaissance, valet de cœur,carte, jeu de société, menthe, moitié;hopeful, playful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 199 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";What was your favourite game when you were a child?;MAR-BVM-7-2022-0-180
|
| 200 |
+
100;JL.2022.0.182;Maison des collections, Ville de Mons;Playing card;1800-1850;Marie, Joseph;;;Signe de reconnaissance, carte, jeu de société, pique, noir, moitié, vague, découpe, baptème;hopeful, payful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 201 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";What was your favourite game when you were a child?;MAR-BVM-7-2022-0-182
|
| 202 |
+
101;JL.2022.0.191;Maison des collections, Ville de Mons;Engraving;1802;;27/04/2025;;Signe de reconnaissance, moitié, femme, couronne, collier, papier, bons soins, enfant,;thankful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 203 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-191
|
| 204 |
+
102;JL.2022.0.192;Maison des collections, Ville de Mons;pious image;1802;Charles;;;Signe de reconnaissance, christ, croix, enfant, bleu, papier, baptème, reconnaissance, bons soins;thankful, devotion, awe;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 205 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-192
|
| 206 |
+
103;JL.2022.0.196;Maison des collections, Ville de Mons;Printed image;1800-1850;Michiel, Eloi;;;Signe de reconnaissance, homme, couleurs, rouge, vert, bleu, épée, bonnet, gravure, moitié, bonté;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 207 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-196
|
| 208 |
+
104;JL.2022.0.200;Maison des collections, Ville de Mons;drawing;1800-1850;Andreas, Gabrielle;;;Signe de reconnaissance, fleurs, couleurs, roses, vert, moitié, papier, nourrice, directrice,;worried, thankful, creative;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 209 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-200
|
| 210 |
+
105;JL.2022.0.201;Maison des collections, Ville de Mons;drawing;1800-1850;Pauline;;;Signe de reconnaissance, dessins, papier, couleurs, rose, vert, rouge, œillets, fleurs, moitié, découpe, vague, feuillage, entrelats;hopeful, creative;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 211 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-201
|
| 212 |
+
106;JL.2022.0.204;Maison des collections, Ville de Mons;pious image;1800-1850;Louis;;;Signe de reconnaissance, palme, coleurs, vert, rouge, saint, moitié, enfant;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 213 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-204
|
| 214 |
+
107;JL.2022.0.206;Maison des collections, Ville de Mons;pious image;1800-1850;Joséphine;;;Signe de reconaissance, moitié, papier, couleurs, anges, chérubins, entrelats, vert, bleu, enfant, baptème,;worried, hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 215 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-206
|
| 216 |
+
108;JL.2022.0.212;Maison des collections, Ville de Mons;drawing;1802;Adelaide;;;Signe de reconnaissance, papier, couleurs, roses, fleurs, feuillage, bleu, rouge, vert, entrelats, moitié;hopeful, creative,;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 217 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-212
|
| 218 |
+
109;JL.2022.0.224;Maison des collections, Ville de Mons;Engraving;1800-1850;;;;Signe de reconnaissance, gravure, papier, prière, cœur, moitié, bons soins;hopeful, worried;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 219 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-224
|
| 220 |
+
110;JL.2022.0.225;Maison des collections, Ville de Mons;Playing card;1800-1850;Charles;;;Signe de reconnaissance, carte, carreaux, rouge, moitié, jeu de société,;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 221 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022-0-225
|
| 222 |
+
111;JL.2022.0.233;Maison des collections, Ville de Mons;pious image;1807;Joseph, Gabriel;16/04/2025;;Signe de reconnaissance, papier, gravure, anges, reprise, espoir, mère, réunion;joyful, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 223 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have any childhood memories of reunions with loved ones?;MAR-BVM-7-2022-0-233
|
| 224 |
+
112;JL.2022.0.234;Maison des collections, Ville de Mons;drawing;1800-1850;;;;Signe de reconnaissance, papier, couleurs, moitié, reprise, cœur, fleurs, rose, bouquet, réunion;joyful, creative;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 225 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have any childhood memories of reunions with loved ones?;MAR-BVM-7-2022-0-234
|
| 226 |
+
113;JL.2022.0.235;Maison des collections, Ville de Mons;pious image;1800-1850;Elisabeth;;;Signe de reconnaissance, gravure, sainte, couleurs, feuillages, arbres, papier, moitié, réunion, baptème;Joyful, creative;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 227 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have any childhood memories of reunions with loved ones?;MAR-BVM-7-2022-0-235
|
| 228 |
+
114;JL.2022.0.238;Maison des collections, Ville de Mons;Printed sheet;1800-1850;Henri, Victor;02/07/2025;;Signe de reconnaissance, papier, livre, fleurs, moitié, réunion, saint, imprimeur, libraire, adoration, anges;joyful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 229 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have any childhood memories of reunions with loved ones?;MAR-BVM-7-2022.0.238
|
| 230 |
+
115;JL.2022.0.247;Maison des collections, Ville de Mons;baby hat;1800-1850;;;;Signe de reconnaissance, vêtement, tissu, couleurs, broderie, fleurs, rouge, bébé,;loving, curious;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 231 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you have a childhood memory linked to a special piece of clothe of yours or a uniform you were wearing when you were little ?;MAR-BVM-7-2022-0-247
|
| 232 |
+
116;JL.2022.0.256;Maison des collections, Ville de Mons;bracelet;1800-1850;;;;Signe de reconnaissance, bracelet, bijoux, pierre, bleu;loving;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 233 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-256 / MAR-BVM-7-2022-0-256
|
| 234 |
+
117;JL.2022.0.37.1;Maison des collections, Ville de Mons;Hand written note;1812;Waudru;25/05/2025;;Signe de reconnaissance, billet de papier, mère, bureau de bienfaisance, petite fille, nourrice, bons soins, reconnaissance, amour, parent, moitié, image, batpème,;loving, sad, thankful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 235 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-37-1-001 / MAR-BVM-7-2022-0-37-1-002
|
| 236 |
+
118;JL.2022.0.37.2;Maison des collections, Ville de Mons;Locket;1800-1850;;04/02/2025;;Signe de reconnaissance, image pieuse, baptème, abbé, médaillon, pendentif, taureau, rouge, bleu, enfant;hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 237 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022-0-37-2 -001 / MAR-BVM-7-2022-0-37-2 -002 / MAR-BVM-7-2022-0-37-3 -002/ MAR-BVM-7-2022-0-37-3 -001
|
| 238 |
+
119;JL.2022.0.39;Maison des collections, Ville de Mons;Rosary;1818;Louis;24/08/2025;;Signe de reconaissance, prière, chapelet, collier, billet de papier, petit garçon;loving, hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 239 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";And you? Do you keep a special object from your childhood inherited by your parents? Can you share it's story?;MAR-BVM-7-2022.0.39
|
| 240 |
+
120;JL.2022.0.34.1-3;Maison des collections, Ville de Mons;pious image;1802;Narcisse;;;Signe de reconnaissance, enfant, ville, nourrice, image, moitié, couleurs, rouge, vert, bleu;worried, hopeful;"Signes de reconnaissance : images de piété, assignats, cartes à jouer, etc., coupés en deux fragments : l'un des fragments était attaché aux langes de l'enfant, l'autre était conservé par la mère, pour le cas où elle voulait reprendre l'enfant et justifier son
|
| 241 |
+
identité, par la présentation du fragment correspondant à celui que portait l'abandonné. Cette collection a été léguée par les hospices civils de Mons.";Do you know why your parents choose your name? What's the story behind?;MAR-BVM-7-2022.0.34
|
README.md
CHANGED
|
@@ -1,12 +1,17 @@
|
|
| 1 |
---
|
| 2 |
-
title: CreativUp Demo
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: gradio
|
| 7 |
sdk_version: 5.44.1
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Art Matcher - CreativUp Demo
|
| 3 |
+
emoji: 🎨
|
| 4 |
+
colorFrom: purple
|
| 5 |
+
colorTo: pink
|
| 6 |
sdk: gradio
|
| 7 |
sdk_version: 5.44.1
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
+
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# Art Matcher - Beta Test
|
| 14 |
+
|
| 15 |
+
Découvrez l'œuvre d'art qui vous correspond dans notre collection !
|
| 16 |
+
|
| 17 |
+
Cette application utilise vos informations personnelles et vos préférences visuelles pour trouver l'œuvre qui vous correspond le mieux.
|
app.py
ADDED
|
@@ -0,0 +1,1281 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
Web Demo v2 pour la base de données d'œuvres d'art - Version Sécurisée et Optimisée
|
| 4 |
+
Interface multi-étapes avec matching basé sur prénom, date, ville et émotions
|
| 5 |
+
Optimisé pour les performances avec caching et indexation
|
| 6 |
+
Version sécurisée avec validation des entrées et gestion d'état propre
|
| 7 |
+
"""
|
| 8 |
+
|
| 9 |
+
import gradio as gr
|
| 10 |
+
import os
|
| 11 |
+
import sys
|
| 12 |
+
import logging
|
| 13 |
+
import random
|
| 14 |
+
import re
|
| 15 |
+
from datetime import datetime
|
| 16 |
+
from typing import List, Dict, Tuple, Optional, Any, Set
|
| 17 |
+
from collections import Counter, defaultdict
|
| 18 |
+
from functools import lru_cache
|
| 19 |
+
from dataclasses import dataclass, field
|
| 20 |
+
import pandas as pd
|
| 21 |
+
|
| 22 |
+
logging.basicConfig(
|
| 23 |
+
level=logging.INFO,
|
| 24 |
+
format="[%(asctime)s] %(levelname)s: %(message)s",
|
| 25 |
+
datefmt="%Y-%m-%d %H:%M:%S",
|
| 26 |
+
)
|
| 27 |
+
logger = logging.getLogger(__name__)
|
| 28 |
+
|
| 29 |
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "src"))
|
| 30 |
+
|
| 31 |
+
from art_pieces_db.database import Database
|
| 32 |
+
from art_pieces_db.query import TargetProfile, WeightedLeximaxOptimizer, Optimizer
|
| 33 |
+
from art_pieces_db.emotions import EmotionWheel
|
| 34 |
+
from art_pieces_db.utils import str_to_date
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
@dataclass
|
| 38 |
+
class ScoringWeights:
|
| 39 |
+
"""Centralise toutes les constantes de scoring pour éviter les magic numbers"""
|
| 40 |
+
|
| 41 |
+
PRESELECTION_NAME_WEIGHT: float = 3.0
|
| 42 |
+
PRESELECTION_DATE_WEIGHT: float = 1.0
|
| 43 |
+
PRESELECTION_PLACE_WEIGHT: float = 2.0
|
| 44 |
+
PRESELECTION_EMOTION_WEIGHT: float = 0.0
|
| 45 |
+
|
| 46 |
+
MIN_PRESELECTION_COUNT: int = 20
|
| 47 |
+
MAX_IMAGES_PER_SELECTION: int = 3 # nombre d'images par sélection
|
| 48 |
+
TOTAL_ROUNDS: int = 3 # nombre de rounds avant la recommandation finale
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
@dataclass
|
| 52 |
+
class SessionState:
|
| 53 |
+
"""Gère l'état de session"""
|
| 54 |
+
|
| 55 |
+
firstname: str = ""
|
| 56 |
+
birthday: str = ""
|
| 57 |
+
city: str = ""
|
| 58 |
+
|
| 59 |
+
current_round: int = 0
|
| 60 |
+
selected_images: List[str] = field(default_factory=list)
|
| 61 |
+
current_image_ids: List[str] = field(default_factory=list)
|
| 62 |
+
|
| 63 |
+
preselected_pieces: Optional[pd.DataFrame] = None
|
| 64 |
+
|
| 65 |
+
def reset(self):
|
| 66 |
+
"""Réinitialise l'état de session"""
|
| 67 |
+
self.firstname = ""
|
| 68 |
+
self.birthday = ""
|
| 69 |
+
self.city = ""
|
| 70 |
+
self.current_round = 0
|
| 71 |
+
self.selected_images = []
|
| 72 |
+
self.current_image_ids = []
|
| 73 |
+
self.preselected_pieces = None
|
| 74 |
+
|
| 75 |
+
def is_complete(self) -> bool:
|
| 76 |
+
"""Vérifie si la sélection est complète"""
|
| 77 |
+
return self.current_round >= ScoringWeights.TOTAL_ROUNDS
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
class SecurityValidator:
|
| 81 |
+
"""Classe pour centraliser les validations de sécurité"""
|
| 82 |
+
|
| 83 |
+
PATH_TRAVERSAL_PATTERN = re.compile(r"\.\.|\.\/")
|
| 84 |
+
VALID_FILENAME_PATTERN = re.compile(r"^[\w\-\.\s]+$")
|
| 85 |
+
VALID_INPUT_PATTERN = re.compile(
|
| 86 |
+
r"^[\w\-\s\'\.,àâäéèêëïîôûùüÿæœçÀÂÄÉÈÊËÏÎÔÛÙÜŸÆŒÇ]+$", re.UNICODE
|
| 87 |
+
)
|
| 88 |
+
DATE_PATTERN = re.compile(r"^\d{1,2}/\d{1,2}$")
|
| 89 |
+
|
| 90 |
+
@classmethod
|
| 91 |
+
def validate_filename(cls, filename: str) -> bool:
|
| 92 |
+
"""Valide qu'un nom de fichier est sécurisé"""
|
| 93 |
+
if not filename:
|
| 94 |
+
return False
|
| 95 |
+
|
| 96 |
+
# Vérifier les tentatives de path traversal
|
| 97 |
+
if cls.PATH_TRAVERSAL_PATTERN.search(filename):
|
| 98 |
+
logger.warning(f"Tentative de path traversal détectée: {filename}")
|
| 99 |
+
return False
|
| 100 |
+
|
| 101 |
+
# Vérifier que le nom ne contient que des caractères autorisés
|
| 102 |
+
base_name = os.path.basename(filename)
|
| 103 |
+
if not cls.VALID_FILENAME_PATTERN.match(base_name):
|
| 104 |
+
logger.warning(f"Nom de fichier invalide: {filename}")
|
| 105 |
+
return False
|
| 106 |
+
|
| 107 |
+
return True
|
| 108 |
+
|
| 109 |
+
@classmethod
|
| 110 |
+
def sanitize_input(cls, input_str: str, max_length: int = 100) -> str:
|
| 111 |
+
"""Nettoie et valide une entrée utilisateur"""
|
| 112 |
+
if not input_str:
|
| 113 |
+
return ""
|
| 114 |
+
|
| 115 |
+
# Tronquer si trop long
|
| 116 |
+
input_str = input_str[:max_length].strip()
|
| 117 |
+
|
| 118 |
+
if not cls.VALID_INPUT_PATTERN.match(input_str):
|
| 119 |
+
# Garder seulement les caractères valides
|
| 120 |
+
cleaned = "".join(c for c in input_str if cls.VALID_INPUT_PATTERN.match(c))
|
| 121 |
+
logger.info(f"Input sanitized: '{input_str}' -> '{cleaned}'")
|
| 122 |
+
return cleaned
|
| 123 |
+
|
| 124 |
+
return input_str
|
| 125 |
+
|
| 126 |
+
@classmethod
|
| 127 |
+
def validate_date(cls, date_str: str) -> Tuple[bool, Optional[datetime]]:
|
| 128 |
+
"""Valide et parse une date au format JJ/MM"""
|
| 129 |
+
if not date_str:
|
| 130 |
+
return False, None
|
| 131 |
+
|
| 132 |
+
if not cls.DATE_PATTERN.match(date_str):
|
| 133 |
+
return False, None
|
| 134 |
+
|
| 135 |
+
try:
|
| 136 |
+
day, month = map(int, date_str.split("/"))
|
| 137 |
+
if not (1 <= day <= 31 and 1 <= month <= 12):
|
| 138 |
+
return False, None
|
| 139 |
+
|
| 140 |
+
date_obj = datetime(year=2000, month=month, day=day)
|
| 141 |
+
return True, date_obj
|
| 142 |
+
except (ValueError, Exception) as e:
|
| 143 |
+
logger.error(f"Erreur de parsing de date: {e}")
|
| 144 |
+
return False, None
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
class ImageIndexer:
|
| 148 |
+
"""Classe pour indexer et mapper les images depuis la base de données CSV"""
|
| 149 |
+
|
| 150 |
+
# Constants for better maintainability
|
| 151 |
+
IMAGE_EXTENSIONS = (".jpg", ".png")
|
| 152 |
+
COMMON_SUFFIXES = [".jpg", ".png", "_medium"]
|
| 153 |
+
MAR_BVM_TEST_SUFFIXES = ["-001", "-002", "-003"]
|
| 154 |
+
|
| 155 |
+
def __init__(self, images_dir: str):
|
| 156 |
+
self.images_dir = os.path.abspath(images_dir)
|
| 157 |
+
self.available_files = set()
|
| 158 |
+
self.image_lookup = {} # normalized_name -> filename
|
| 159 |
+
self.mar_bvm_lookup = {} # Special handling for MAR-BVM files
|
| 160 |
+
self._build_index()
|
| 161 |
+
|
| 162 |
+
def _strip_file_extensions(self, filename: str) -> str:
|
| 163 |
+
"""Remove file extensions from filename"""
|
| 164 |
+
base_name = filename.lower()
|
| 165 |
+
if base_name.endswith("_medium.jpg"):
|
| 166 |
+
return base_name[:-11]
|
| 167 |
+
elif base_name.endswith((".jpg", ".png")):
|
| 168 |
+
return base_name[:-4]
|
| 169 |
+
return base_name
|
| 170 |
+
|
| 171 |
+
def _normalize_basic_patterns(self, name: str) -> str:
|
| 172 |
+
"""Apply basic normalization patterns"""
|
| 173 |
+
# Remove trailing comma and normalize whitespace
|
| 174 |
+
normalized = name.lower().strip().rstrip(",")
|
| 175 |
+
|
| 176 |
+
# Remove common suffixes
|
| 177 |
+
for suffix in self.COMMON_SUFFIXES:
|
| 178 |
+
if normalized.endswith(suffix):
|
| 179 |
+
normalized = normalized[: -len(suffix)]
|
| 180 |
+
|
| 181 |
+
# Normalize spaces and underscores to dashes
|
| 182 |
+
return re.sub(r"[\s_]+", "-", normalized)
|
| 183 |
+
|
| 184 |
+
def _normalize_mar_bvm_format(self, name: str) -> str:
|
| 185 |
+
"""Handle MAR-BVM specific normalization"""
|
| 186 |
+
if "mar-bvm" not in name:
|
| 187 |
+
return name
|
| 188 |
+
|
| 189 |
+
# Replace .0. with -0- and remaining dots with dashes
|
| 190 |
+
return name.replace(".0.", "-0-").replace(".", "-")
|
| 191 |
+
|
| 192 |
+
def _normalize_name(self, name: str) -> str:
|
| 193 |
+
"""Normalise un nom pour la comparaison"""
|
| 194 |
+
normalized = self._normalize_basic_patterns(name)
|
| 195 |
+
|
| 196 |
+
# Special handling for MAR-BVM format
|
| 197 |
+
if "mar-bvm" in normalized:
|
| 198 |
+
normalized = self._normalize_mar_bvm_format(normalized)
|
| 199 |
+
# For files starting with year (like 2022.0.86), keep dots
|
| 200 |
+
elif not normalized.startswith("20"):
|
| 201 |
+
normalized = normalized.replace(".", "-")
|
| 202 |
+
|
| 203 |
+
return normalized
|
| 204 |
+
|
| 205 |
+
def _create_mar_bvm_lookups(self, normalized: str, filename: str):
|
| 206 |
+
"""Create additional lookup entries for MAR-BVM files"""
|
| 207 |
+
if "mar-bvm" not in normalized:
|
| 208 |
+
return
|
| 209 |
+
|
| 210 |
+
parts = normalized.split("-")
|
| 211 |
+
for i, part in enumerate(parts):
|
| 212 |
+
if part.isdigit() and i >= 5: # After mar-bvm-7-2022-0
|
| 213 |
+
base_key = "-".join(parts[:6]) # mar-bvm-7-2022-0-22
|
| 214 |
+
if base_key not in self.mar_bvm_lookup:
|
| 215 |
+
self.mar_bvm_lookup[base_key] = []
|
| 216 |
+
self.mar_bvm_lookup[base_key].append(filename)
|
| 217 |
+
break
|
| 218 |
+
|
| 219 |
+
def _process_image_file(self, filename: str):
|
| 220 |
+
"""Process a single image file for indexing"""
|
| 221 |
+
if not SecurityValidator.validate_filename(filename):
|
| 222 |
+
logger.warning(f"Fichier ignoré pour raison de sécurité: {filename}")
|
| 223 |
+
return
|
| 224 |
+
|
| 225 |
+
if not filename.lower().endswith(self.IMAGE_EXTENSIONS):
|
| 226 |
+
return
|
| 227 |
+
|
| 228 |
+
self.available_files.add(filename)
|
| 229 |
+
|
| 230 |
+
base_name = self._strip_file_extensions(filename)
|
| 231 |
+
normalized = self._normalize_name(base_name)
|
| 232 |
+
self.image_lookup[normalized] = filename
|
| 233 |
+
self._create_mar_bvm_lookups(normalized, filename)
|
| 234 |
+
|
| 235 |
+
def _build_index(self):
|
| 236 |
+
"""Construit un index des images disponibles"""
|
| 237 |
+
try:
|
| 238 |
+
all_files = os.listdir(self.images_dir)
|
| 239 |
+
for filename in all_files:
|
| 240 |
+
self._process_image_file(filename)
|
| 241 |
+
|
| 242 |
+
logger.info(
|
| 243 |
+
f"Index des images construit: {len(self.available_files)} fichiers disponibles, "
|
| 244 |
+
f"{len(self.image_lookup)} entrées normalisées"
|
| 245 |
+
)
|
| 246 |
+
except Exception as e:
|
| 247 |
+
logger.error(f"Erreur lors de la construction de l'index: {e}")
|
| 248 |
+
self.available_files = set()
|
| 249 |
+
|
| 250 |
+
def _clean_input_name(self, image_name: str) -> str:
|
| 251 |
+
"""Clean and prepare input name for processing"""
|
| 252 |
+
# Basic cleaning
|
| 253 |
+
cleaned = image_name.strip().rstrip(",").rstrip("-").strip()
|
| 254 |
+
# Remove spaces before -001, -002, etc.
|
| 255 |
+
return re.sub(r"\s+(-\d)", r"\1", cleaned)
|
| 256 |
+
|
| 257 |
+
def _normalize_mar_bvm_input(self, image_name: str) -> str:
|
| 258 |
+
"""Handle MAR-BVM specific input normalization"""
|
| 259 |
+
if "MAR-BVM" not in image_name:
|
| 260 |
+
return image_name
|
| 261 |
+
|
| 262 |
+
# Handle missing "7-" in MAR-BVM-2022-0-153
|
| 263 |
+
if "MAR-BVM-2022-0-" in image_name:
|
| 264 |
+
image_name = image_name.replace("MAR-BVM-2022-0-", "MAR-BVM-7-2022-0-")
|
| 265 |
+
|
| 266 |
+
# Convert .0. to -0-
|
| 267 |
+
if ".0." in image_name:
|
| 268 |
+
image_name = image_name.replace(".0.", "-0-")
|
| 269 |
+
|
| 270 |
+
# Handle .001, .002 at the end (convert to -001, -002)
|
| 271 |
+
image_name = re.sub(r"\.(\d{3})$", r"-\1", image_name)
|
| 272 |
+
|
| 273 |
+
# Handle .1 or .2 suffix
|
| 274 |
+
if image_name.endswith(".1"):
|
| 275 |
+
image_name = image_name[:-2] + "-1"
|
| 276 |
+
elif image_name.endswith(".2"):
|
| 277 |
+
image_name = image_name[:-2] + "-2"
|
| 278 |
+
|
| 279 |
+
# Replace any remaining dots with dashes (but be careful not to mess up already processed parts)
|
| 280 |
+
return image_name.replace(".", "-")
|
| 281 |
+
|
| 282 |
+
def _try_mar_bvm_lookups(self, normalized: str) -> Optional[str]:
|
| 283 |
+
"""Try various MAR-BVM specific lookup strategies"""
|
| 284 |
+
# Check special MAR-BVM lookup
|
| 285 |
+
if normalized in self.mar_bvm_lookup and self.mar_bvm_lookup[normalized]:
|
| 286 |
+
return self.mar_bvm_lookup[normalized][0]
|
| 287 |
+
|
| 288 |
+
# Try with suffix variations
|
| 289 |
+
for suffix in self.MAR_BVM_TEST_SUFFIXES:
|
| 290 |
+
test_pattern = f"{normalized}{suffix}"
|
| 291 |
+
if test_pattern in self.image_lookup:
|
| 292 |
+
return self.image_lookup[test_pattern]
|
| 293 |
+
|
| 294 |
+
return None
|
| 295 |
+
|
| 296 |
+
def _try_year_format_lookup(self, image_name: str) -> Optional[str]:
|
| 297 |
+
"""Handle special case for files starting with year"""
|
| 298 |
+
if not image_name.startswith("20"):
|
| 299 |
+
return None
|
| 300 |
+
|
| 301 |
+
test_name = image_name.lower().replace(" ", "-")
|
| 302 |
+
return self.image_lookup.get(test_name)
|
| 303 |
+
|
| 304 |
+
def _try_partial_matching(self, normalized: str) -> Optional[str]:
|
| 305 |
+
"""Try partial matching as last resort"""
|
| 306 |
+
for key, filename in self.image_lookup.items():
|
| 307 |
+
if key.startswith(normalized) or normalized in key:
|
| 308 |
+
return filename
|
| 309 |
+
return None
|
| 310 |
+
|
| 311 |
+
def _split_multiple_names(self, image_name: str) -> List[str]:
|
| 312 |
+
"""Split image names that contain multiple names separated by commas or slashes"""
|
| 313 |
+
# First try comma separation
|
| 314 |
+
if "," in image_name:
|
| 315 |
+
return [name.strip() for name in image_name.split(",") if name.strip()]
|
| 316 |
+
|
| 317 |
+
# Then try slash separation
|
| 318 |
+
if "/" in image_name:
|
| 319 |
+
return [name.strip() for name in image_name.split("/") if name.strip()]
|
| 320 |
+
|
| 321 |
+
# Handle " - " separation (for cases like "MAR-BVM-7-2022.0.81 - 2022.0.81")
|
| 322 |
+
if " - " in image_name and image_name.count(" - ") == 1:
|
| 323 |
+
parts = [name.strip() for name in image_name.split(" - ")]
|
| 324 |
+
# Only use the first part if they look like duplicates
|
| 325 |
+
if len(parts) == 2:
|
| 326 |
+
first, second = parts
|
| 327 |
+
# Check if second part is a suffix of the first (like duplicate year)
|
| 328 |
+
if first.endswith(second) or second in first:
|
| 329 |
+
return [first]
|
| 330 |
+
return parts
|
| 331 |
+
|
| 332 |
+
return [image_name]
|
| 333 |
+
|
| 334 |
+
def find_image(self, image_name: str) -> Optional[str]:
|
| 335 |
+
"""Trouve un fichier image correspondant au nom donné"""
|
| 336 |
+
if not image_name:
|
| 337 |
+
return None
|
| 338 |
+
|
| 339 |
+
# Handle multiple image names in one field
|
| 340 |
+
possible_names = self._split_multiple_names(image_name)
|
| 341 |
+
|
| 342 |
+
# Try each name individually
|
| 343 |
+
for name in possible_names:
|
| 344 |
+
result = self._find_single_image(name)
|
| 345 |
+
if result:
|
| 346 |
+
return result
|
| 347 |
+
|
| 348 |
+
return None
|
| 349 |
+
|
| 350 |
+
def _find_single_image(self, image_name: str) -> Optional[str]:
|
| 351 |
+
"""Find a single image by name"""
|
| 352 |
+
# Clean and normalize the input
|
| 353 |
+
cleaned_name = self._clean_input_name(image_name)
|
| 354 |
+
processed_name = self._normalize_mar_bvm_input(cleaned_name)
|
| 355 |
+
normalized = self._normalize_name(processed_name)
|
| 356 |
+
|
| 357 |
+
# Try direct lookup first
|
| 358 |
+
if normalized in self.image_lookup:
|
| 359 |
+
return self.image_lookup[normalized]
|
| 360 |
+
|
| 361 |
+
# Try MAR-BVM specific lookups
|
| 362 |
+
if "mar-bvm" in normalized:
|
| 363 |
+
result = self._try_mar_bvm_lookups(normalized)
|
| 364 |
+
if result:
|
| 365 |
+
return result
|
| 366 |
+
|
| 367 |
+
# Try year format lookup
|
| 368 |
+
result = self._try_year_format_lookup(image_name)
|
| 369 |
+
if result:
|
| 370 |
+
return result
|
| 371 |
+
|
| 372 |
+
# Try partial matching as last resort
|
| 373 |
+
return self._try_partial_matching(normalized)
|
| 374 |
+
|
| 375 |
+
def get_all_files(self) -> Set[str]:
|
| 376 |
+
"""Retourne tous les fichiers disponibles"""
|
| 377 |
+
return self.available_files.copy()
|
| 378 |
+
|
| 379 |
+
|
| 380 |
+
class ArtMatcherV2:
|
| 381 |
+
"""Classe principale pour le matching d'œuvres d'art"""
|
| 382 |
+
|
| 383 |
+
def __init__(self, csv_path: str, images_dir: str):
|
| 384 |
+
"""Initialise le système avec la base de données et le répertoire d'images"""
|
| 385 |
+
self.db = Database(csv_path)
|
| 386 |
+
self.images_dir = os.path.abspath(images_dir)
|
| 387 |
+
self.emotion_wheel = EmotionWheel()
|
| 388 |
+
self.weights = ScoringWeights()
|
| 389 |
+
|
| 390 |
+
self.optimizer_helper = WeightedLeximaxOptimizer(TargetProfile(), {})
|
| 391 |
+
|
| 392 |
+
self.image_indexer = ImageIndexer(images_dir)
|
| 393 |
+
|
| 394 |
+
df = self.db.get_dataframe()
|
| 395 |
+
self.df_with_images = df[
|
| 396 |
+
df["name_image"].notna()
|
| 397 |
+
& (df["name_image"] != "")
|
| 398 |
+
& (df["name_image"].str.strip() != "")
|
| 399 |
+
].copy()
|
| 400 |
+
|
| 401 |
+
self.df_with_images["database_id_str"] = self.df_with_images[
|
| 402 |
+
"database_id"
|
| 403 |
+
].astype(str)
|
| 404 |
+
self.id_to_index = {
|
| 405 |
+
str(row["database_id"]): idx for idx, row in self.df_with_images.iterrows()
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
self.artwork_images = self._build_artwork_image_index()
|
| 409 |
+
|
| 410 |
+
self.temp_db_with_images = Database.__new__(Database)
|
| 411 |
+
self.temp_db_with_images.dataframe = self.df_with_images
|
| 412 |
+
|
| 413 |
+
logger.info(f"Base de données chargée: {self.db.n_pieces()} œuvres")
|
| 414 |
+
logger.info(f"Œuvres avec images: {len(self.df_with_images)}")
|
| 415 |
+
logger.info(f"Index des images: {len(self.artwork_images)} œuvres mappées")
|
| 416 |
+
|
| 417 |
+
def _sanitize_input(self, input_str: str) -> str:
|
| 418 |
+
"""Nettoie et valide une entrée utilisateur"""
|
| 419 |
+
return SecurityValidator.sanitize_input(input_str)
|
| 420 |
+
|
| 421 |
+
def _parse_date(self, date_str: str) -> Optional[datetime]:
|
| 422 |
+
"""Parse une date avec validation"""
|
| 423 |
+
is_valid, date_obj = SecurityValidator.validate_date(date_str)
|
| 424 |
+
return date_obj if is_valid else None
|
| 425 |
+
|
| 426 |
+
def _build_artwork_image_index(self) -> Dict[str, List[str]]:
|
| 427 |
+
"""Construit un index artwork_id -> [image_paths] au démarrage"""
|
| 428 |
+
artwork_images = {}
|
| 429 |
+
|
| 430 |
+
for idx, row in self.df_with_images.iterrows():
|
| 431 |
+
artwork_id = str(row["database_id"])
|
| 432 |
+
image_paths = []
|
| 433 |
+
|
| 434 |
+
if row["name_image"] and str(row["name_image"]).strip():
|
| 435 |
+
# Parse the image names - handle special separators
|
| 436 |
+
image_string = str(row["name_image"]).strip().strip('"')
|
| 437 |
+
|
| 438 |
+
# Handle cases with " / " or " - " separators
|
| 439 |
+
if " / " in image_string:
|
| 440 |
+
# Take first part before the slash
|
| 441 |
+
image_string = image_string.split(" / ")[0].strip()
|
| 442 |
+
|
| 443 |
+
# Special case: if it has " - 2022" it's a separator, not part of the name
|
| 444 |
+
if " - 2022" in image_string:
|
| 445 |
+
# Take the part before " - 2022"
|
| 446 |
+
image_string = image_string.split(" - 2022")[0].strip()
|
| 447 |
+
elif " - " in image_string and "MAR-BVM-7-2022-0-" not in image_string:
|
| 448 |
+
# For other MAR-BVM formats with " - " separator
|
| 449 |
+
parts = image_string.split(" - ")
|
| 450 |
+
if "MAR-BVM" in parts[0]:
|
| 451 |
+
image_string = parts[0].strip()
|
| 452 |
+
|
| 453 |
+
# Clean up trailing " -" or spaces before "-001"
|
| 454 |
+
image_string = re.sub(
|
| 455 |
+
r"\s+-\s*$", "", image_string
|
| 456 |
+
) # Remove trailing " -"
|
| 457 |
+
image_string = re.sub(
|
| 458 |
+
r"\s+(-\d)", r"\1", image_string
|
| 459 |
+
) # Remove spaces before -001
|
| 460 |
+
|
| 461 |
+
# Parse comma-separated list
|
| 462 |
+
images = [
|
| 463 |
+
img.strip()
|
| 464 |
+
for img in re.split(r"[,/]", image_string)
|
| 465 |
+
if img.strip()
|
| 466 |
+
]
|
| 467 |
+
|
| 468 |
+
for img_name in images:
|
| 469 |
+
# Find the actual file for this image name
|
| 470 |
+
matched_file = self.image_indexer.find_image(img_name)
|
| 471 |
+
if matched_file:
|
| 472 |
+
img_path = os.path.join(self.images_dir, matched_file)
|
| 473 |
+
image_paths.append(img_path)
|
| 474 |
+
|
| 475 |
+
if image_paths:
|
| 476 |
+
artwork_images[artwork_id] = image_paths
|
| 477 |
+
|
| 478 |
+
return artwork_images
|
| 479 |
+
|
| 480 |
+
def preselect_artworks(
|
| 481 |
+
self, firstname: str, birthday: str, city: str
|
| 482 |
+
) -> pd.DataFrame:
|
| 483 |
+
"""
|
| 484 |
+
Pré-sélectionne les œuvres selon la hiérarchie: prénom > date > ville
|
| 485 |
+
"""
|
| 486 |
+
logger.info("=== DÉBUT PRÉ-SÉLECTION ===")
|
| 487 |
+
|
| 488 |
+
# Nettoyer les entrées
|
| 489 |
+
firstname = self._sanitize_input(firstname)
|
| 490 |
+
city = self._sanitize_input(city)
|
| 491 |
+
|
| 492 |
+
logger.info(
|
| 493 |
+
f"Critères de pré-sélection: prénom='{firstname}', date='{birthday}', ville='{city}'"
|
| 494 |
+
)
|
| 495 |
+
|
| 496 |
+
birth_date = self._parse_date(birthday)
|
| 497 |
+
if birth_date:
|
| 498 |
+
logger.info(f"Date convertie: {birth_date.strftime('%d/%m')}")
|
| 499 |
+
|
| 500 |
+
profile = TargetProfile()
|
| 501 |
+
profile.set_target_name(firstname)
|
| 502 |
+
profile.set_target_date(birth_date)
|
| 503 |
+
profile.set_target_place(city)
|
| 504 |
+
|
| 505 |
+
weights = {
|
| 506 |
+
"related_names": self.weights.PRESELECTION_NAME_WEIGHT,
|
| 507 |
+
"related_dates": self.weights.PRESELECTION_DATE_WEIGHT,
|
| 508 |
+
"related_places": self.weights.PRESELECTION_PLACE_WEIGHT,
|
| 509 |
+
"related_emotions": self.weights.PRESELECTION_EMOTION_WEIGHT,
|
| 510 |
+
}
|
| 511 |
+
|
| 512 |
+
logger.info(
|
| 513 |
+
f"Poids utilisés: nom={weights['related_names']}, date={weights['related_dates']}, lieu={weights['related_places']}, émotions={weights['related_emotions']}"
|
| 514 |
+
)
|
| 515 |
+
|
| 516 |
+
optimizer = WeightedLeximaxOptimizer(profile, weights)
|
| 517 |
+
result = optimizer.optimize_max(self.temp_db_with_images)
|
| 518 |
+
|
| 519 |
+
preselected = result[result["score"] > (0, 0, 0)]
|
| 520 |
+
logger.info(f"Œuvres avec score > 0: {len(preselected)}")
|
| 521 |
+
|
| 522 |
+
if len(preselected) < self.weights.MIN_PRESELECTION_COUNT:
|
| 523 |
+
preselected = result.head(self.weights.MIN_PRESELECTION_COUNT)
|
| 524 |
+
logger.info(f"Ajustement au minimum requis: {len(preselected)} œuvres")
|
| 525 |
+
|
| 526 |
+
logger.info("Top 5 pré-sélections:")
|
| 527 |
+
for i, (idx, piece) in enumerate(preselected.head(5).iterrows()):
|
| 528 |
+
logger.info(
|
| 529 |
+
f" {i+1}. Œuvre #{piece['database_id']} - Score: {piece['score']}"
|
| 530 |
+
)
|
| 531 |
+
if firstname and piece["related_names"]:
|
| 532 |
+
name_score = Optimizer.name_similarity(
|
| 533 |
+
firstname, piece["related_names"]
|
| 534 |
+
)
|
| 535 |
+
if name_score > 0:
|
| 536 |
+
logger.info(
|
| 537 |
+
f" → Nom: {piece['related_names']} (score: {name_score:.2f})"
|
| 538 |
+
)
|
| 539 |
+
if birth_date and piece["related_dates"]:
|
| 540 |
+
date_score = Optimizer.date_similarity(
|
| 541 |
+
birth_date, piece["related_dates"]
|
| 542 |
+
)
|
| 543 |
+
if date_score > 0:
|
| 544 |
+
logger.info(
|
| 545 |
+
f" → Dates: {[d.strftime('%d/%m') for d in piece['related_dates']]} (score: {date_score:.2f})"
|
| 546 |
+
)
|
| 547 |
+
if city and piece["related_places"]:
|
| 548 |
+
place_score = self.optimizer_helper.place_similarity(
|
| 549 |
+
city, piece["related_places"]
|
| 550 |
+
)
|
| 551 |
+
if place_score > 0:
|
| 552 |
+
logger.info(
|
| 553 |
+
f" → Lieux: {piece['related_places']} (score: {place_score:.2f})"
|
| 554 |
+
)
|
| 555 |
+
|
| 556 |
+
logger.info("=== FIN PRÉ-SÉLECTION ===")
|
| 557 |
+
return preselected
|
| 558 |
+
|
| 559 |
+
def get_random_images_for_selection(
|
| 560 |
+
self, round_num: int, already_selected: List[str] = None
|
| 561 |
+
) -> List[Tuple[str, str]]:
|
| 562 |
+
"""
|
| 563 |
+
Retourne 3 images aléatoires depuis l'index pré-construit
|
| 564 |
+
Exclut les œuvres déjà sélectionnées dans les tours précédents
|
| 565 |
+
"""
|
| 566 |
+
logger.info(f"=== SÉLECTION D'IMAGES POUR LE TOUR {round_num} ===")
|
| 567 |
+
|
| 568 |
+
if already_selected:
|
| 569 |
+
logger.info(f"Œuvres déjà sélectionnées à exclure: {already_selected}")
|
| 570 |
+
|
| 571 |
+
available_artworks = list(self.artwork_images.keys())
|
| 572 |
+
|
| 573 |
+
# Exclure les œuvres déjà sélectionnées
|
| 574 |
+
if already_selected:
|
| 575 |
+
already_selected_set = set(already_selected)
|
| 576 |
+
available_artworks = [
|
| 577 |
+
a for a in available_artworks if a not in already_selected_set
|
| 578 |
+
]
|
| 579 |
+
|
| 580 |
+
logger.info(
|
| 581 |
+
f"Nombre total d'œuvres avec images disponibles: {len(available_artworks)}"
|
| 582 |
+
)
|
| 583 |
+
|
| 584 |
+
if len(available_artworks) < self.weights.MAX_IMAGES_PER_SELECTION:
|
| 585 |
+
logger.warning(
|
| 586 |
+
f"Seulement {len(available_artworks)} œuvres avec images disponibles"
|
| 587 |
+
)
|
| 588 |
+
direct_images = []
|
| 589 |
+
for filename in list(self.image_indexer.get_all_files())[:10]:
|
| 590 |
+
if filename.endswith(".jpg"):
|
| 591 |
+
img_path = os.path.join(self.images_dir, filename)
|
| 592 |
+
direct_images.append((img_path, "0"))
|
| 593 |
+
return direct_images[: self.weights.MAX_IMAGES_PER_SELECTION]
|
| 594 |
+
|
| 595 |
+
num_to_select = min(
|
| 596 |
+
self.weights.MAX_IMAGES_PER_SELECTION, len(available_artworks)
|
| 597 |
+
)
|
| 598 |
+
selected_artworks = random.sample(available_artworks, num_to_select)
|
| 599 |
+
|
| 600 |
+
logger.info(f"Œuvres sélectionnées aléatoirement: {selected_artworks}")
|
| 601 |
+
|
| 602 |
+
selected = []
|
| 603 |
+
for artwork_id in selected_artworks:
|
| 604 |
+
img_path = random.choice(self.artwork_images[artwork_id])
|
| 605 |
+
selected.append((img_path, artwork_id))
|
| 606 |
+
if artwork_id in self.id_to_index:
|
| 607 |
+
idx = self.id_to_index[artwork_id]
|
| 608 |
+
artwork = self.df_with_images.loc[idx]
|
| 609 |
+
logger.info(f" Image {len(selected)}: Œuvre #{artwork_id}")
|
| 610 |
+
logger.info(f" Type: {artwork['art_piece_type']}")
|
| 611 |
+
logger.info(f" Émotions: {artwork['related_emotions']}")
|
| 612 |
+
|
| 613 |
+
logger.info(f"=== FIN SÉLECTION IMAGES TOUR {round_num} ===")
|
| 614 |
+
return selected
|
| 615 |
+
|
| 616 |
+
def extract_emotions_from_image_id(self, database_id: str) -> List[str]:
|
| 617 |
+
"""
|
| 618 |
+
Extrait les émotions associées à une œuvre via son ID
|
| 619 |
+
Utilise l'index pré-calculé pour éviter les conversions répétées
|
| 620 |
+
"""
|
| 621 |
+
if database_id in self.id_to_index:
|
| 622 |
+
idx = self.id_to_index[database_id]
|
| 623 |
+
emotions = self.df_with_images.loc[idx, "related_emotions"]
|
| 624 |
+
if isinstance(emotions, list):
|
| 625 |
+
return emotions
|
| 626 |
+
return []
|
| 627 |
+
|
| 628 |
+
@lru_cache(maxsize=1024)
|
| 629 |
+
def _cached_emotion_similarity(self, emotion1: str, emotion2: str) -> float:
|
| 630 |
+
"""Cache les calculs de similarité émotionnelle"""
|
| 631 |
+
return self.emotion_wheel.calculate_emotion_similarity(emotion1, emotion2)
|
| 632 |
+
|
| 633 |
+
def calculate_emotion_profile(self, selected_ids: List[str]) -> Dict[str, float]:
|
| 634 |
+
"""
|
| 635 |
+
Calcule le profil émotionnel basé sur les images sélectionnées
|
| 636 |
+
"""
|
| 637 |
+
logger.info("=== CALCUL DU PROFIL ÉMOTIONNEL ===")
|
| 638 |
+
logger.info(f"Images sélectionnées: {selected_ids}")
|
| 639 |
+
|
| 640 |
+
emotion_counter = Counter()
|
| 641 |
+
|
| 642 |
+
for db_id in selected_ids:
|
| 643 |
+
emotions = self.extract_emotions_from_image_id(db_id)
|
| 644 |
+
logger.info(f" Image {db_id}: émotions = {emotions}")
|
| 645 |
+
emotion_counter.update(emotions)
|
| 646 |
+
|
| 647 |
+
total = sum(emotion_counter.values())
|
| 648 |
+
if total > 0:
|
| 649 |
+
emotion_profile = {
|
| 650 |
+
emotion: count / total for emotion, count in emotion_counter.items()
|
| 651 |
+
}
|
| 652 |
+
logger.info(f"Profil émotionnel calculé: {emotion_profile}")
|
| 653 |
+
else:
|
| 654 |
+
emotion_profile = {}
|
| 655 |
+
logger.info("Aucune émotion trouvée dans les images sélectionnées")
|
| 656 |
+
|
| 657 |
+
logger.info("=== FIN CALCUL PROFIL ÉMOTIONNEL ===")
|
| 658 |
+
return emotion_profile
|
| 659 |
+
|
| 660 |
+
def _get_artwork_image(self, artwork) -> Optional[str]:
|
| 661 |
+
"""Retourne le chemin de l'image pour une œuvre d'art"""
|
| 662 |
+
artwork_id = str(artwork["database_id"])
|
| 663 |
+
|
| 664 |
+
# Simply return the first image from our pre-built index
|
| 665 |
+
if artwork_id in self.artwork_images:
|
| 666 |
+
return self.artwork_images[artwork_id][0]
|
| 667 |
+
|
| 668 |
+
return None
|
| 669 |
+
|
| 670 |
+
def find_best_match(
|
| 671 |
+
self, firstname: str, birthday: str, city: str, selected_image_ids: List[str]
|
| 672 |
+
) -> Tuple[Optional[str], str, Dict]:
|
| 673 |
+
"""
|
| 674 |
+
Trouve la meilleure correspondance selon la hiérarchie du scénario:
|
| 675 |
+
1. Match exact (name/date/city) = gagnant automatique
|
| 676 |
+
2. Si pré-sélection existe: utiliser émotions pour départager
|
| 677 |
+
3. Si aucune pré-sélection: utiliser émotions seules
|
| 678 |
+
4. Type d'objet comme critère de départage final
|
| 679 |
+
"""
|
| 680 |
+
firstname = self._sanitize_input(firstname)
|
| 681 |
+
city = self._sanitize_input(city)
|
| 682 |
+
birth_date = self._parse_date(birthday)
|
| 683 |
+
|
| 684 |
+
logger.info(
|
| 685 |
+
f"Recherche de correspondance pour: {firstname}, {birthday}, {city}"
|
| 686 |
+
)
|
| 687 |
+
|
| 688 |
+
preselected = self.preselect_artworks(firstname, birthday, city)
|
| 689 |
+
|
| 690 |
+
logger.info("=== DÉTECTION DE MATCH EXACT ===")
|
| 691 |
+
for idx, piece in preselected.iterrows():
|
| 692 |
+
if firstname and piece["related_names"]:
|
| 693 |
+
name_score = Optimizer.name_similarity(
|
| 694 |
+
firstname, piece["related_names"]
|
| 695 |
+
)
|
| 696 |
+
if name_score >= 0.95:
|
| 697 |
+
logger.info(
|
| 698 |
+
f"🎯 MATCH EXACT TROUVÉ: prénom '{firstname}' → œuvre #{piece['database_id']} (score: {name_score:.2f})"
|
| 699 |
+
)
|
| 700 |
+
logger.info(f" Noms dans l'œuvre: {piece['related_names']}")
|
| 701 |
+
match_image = self._get_artwork_image(piece)
|
| 702 |
+
match_info = {
|
| 703 |
+
"title": f"Œuvre #{piece['database_id']}",
|
| 704 |
+
"type": piece["art_piece_type"],
|
| 705 |
+
"place": piece["art_piece_place"],
|
| 706 |
+
"emotions": piece["related_emotions"],
|
| 707 |
+
"explanation": piece["explanation"],
|
| 708 |
+
}
|
| 709 |
+
return (
|
| 710 |
+
match_image,
|
| 711 |
+
f"Prénom '{firstname}' correspond exactement",
|
| 712 |
+
match_info,
|
| 713 |
+
)
|
| 714 |
+
|
| 715 |
+
if birth_date and piece["related_dates"]:
|
| 716 |
+
date_score = Optimizer.date_similarity(
|
| 717 |
+
birth_date, piece["related_dates"]
|
| 718 |
+
)
|
| 719 |
+
if date_score == 1.0:
|
| 720 |
+
logger.info(
|
| 721 |
+
f"🎯 MATCH EXACT TROUVÉ: date '{birthday}' → œuvre #{piece['database_id']}"
|
| 722 |
+
)
|
| 723 |
+
logger.info(
|
| 724 |
+
f" Dates dans l'œuvre: {[d.strftime('%d/%m/%Y') for d in piece['related_dates']]}"
|
| 725 |
+
)
|
| 726 |
+
match_image = self._get_artwork_image(piece)
|
| 727 |
+
match_info = {
|
| 728 |
+
"title": f"Œuvre #{piece['database_id']}",
|
| 729 |
+
"type": piece["art_piece_type"],
|
| 730 |
+
"place": piece["art_piece_place"],
|
| 731 |
+
"emotions": piece["related_emotions"],
|
| 732 |
+
"explanation": piece["explanation"],
|
| 733 |
+
}
|
| 734 |
+
return (
|
| 735 |
+
match_image,
|
| 736 |
+
f"Date d'anniversaire {birthday} correspond exactement",
|
| 737 |
+
match_info,
|
| 738 |
+
)
|
| 739 |
+
|
| 740 |
+
if city and piece["related_places"]:
|
| 741 |
+
place_score = self.optimizer_helper.place_similarity(
|
| 742 |
+
city, piece["related_places"]
|
| 743 |
+
)
|
| 744 |
+
if place_score == 1.0:
|
| 745 |
+
logger.info(
|
| 746 |
+
f"🎯 MATCH EXACT TROUVÉ: ville '{city}' → œuvre #{piece['database_id']}"
|
| 747 |
+
)
|
| 748 |
+
logger.info(f" Lieux dans l'œuvre: {piece['related_places']}")
|
| 749 |
+
match_image = self._get_artwork_image(piece)
|
| 750 |
+
match_info = {
|
| 751 |
+
"title": f"Œuvre #{piece['database_id']}",
|
| 752 |
+
"type": piece["art_piece_type"],
|
| 753 |
+
"place": piece["art_piece_place"],
|
| 754 |
+
"emotions": piece["related_emotions"],
|
| 755 |
+
"explanation": piece["explanation"],
|
| 756 |
+
}
|
| 757 |
+
return (
|
| 758 |
+
match_image,
|
| 759 |
+
f"Ville '{city}' correspond exactement",
|
| 760 |
+
match_info,
|
| 761 |
+
)
|
| 762 |
+
|
| 763 |
+
logger.info("Aucun match exact trouvé, passage à la sélection par émotions")
|
| 764 |
+
|
| 765 |
+
emotion_profile = self.calculate_emotion_profile(selected_image_ids)
|
| 766 |
+
|
| 767 |
+
logger.info("=== STRATÉGIE DE MATCHING ===")
|
| 768 |
+
valid_preselection = preselected[preselected["score"] > (0, 0, 0)]
|
| 769 |
+
|
| 770 |
+
if len(valid_preselection) > 0:
|
| 771 |
+
logger.info(
|
| 772 |
+
f"📋 CAS A: {len(valid_preselection)} œuvres pré-sélectionnées - utilisation des émotions pour départager"
|
| 773 |
+
)
|
| 774 |
+
candidates = valid_preselection
|
| 775 |
+
else:
|
| 776 |
+
logger.info(
|
| 777 |
+
f"📋 CAS B: Aucune pré-sélection valide - recherche par émotions sur {len(self.df_with_images)} œuvres"
|
| 778 |
+
)
|
| 779 |
+
candidates = self.df_with_images
|
| 780 |
+
|
| 781 |
+
# Exclure les œuvres déjà sélectionnées par l'utilisateur
|
| 782 |
+
selected_artwork_ids = set(selected_image_ids)
|
| 783 |
+
candidates = candidates[
|
| 784 |
+
~candidates["database_id"].astype(str).isin(selected_artwork_ids)
|
| 785 |
+
]
|
| 786 |
+
logger.info(
|
| 787 |
+
f"Après exclusion des œuvres déjà sélectionnées {selected_artwork_ids}: {len(candidates)} candidats restants"
|
| 788 |
+
)
|
| 789 |
+
|
| 790 |
+
logger.info("=== CALCUL DES SCORES ÉMOTIONNELS ===")
|
| 791 |
+
best_matches = []
|
| 792 |
+
best_emotion_score = -1
|
| 793 |
+
|
| 794 |
+
for idx, piece in candidates.iterrows():
|
| 795 |
+
emotion_score = 0
|
| 796 |
+
|
| 797 |
+
if emotion_profile and piece["related_emotions"]:
|
| 798 |
+
for user_emotion, weight in emotion_profile.items():
|
| 799 |
+
best_similarity = 0
|
| 800 |
+
for piece_emotion in piece["related_emotions"]:
|
| 801 |
+
similarity = self._cached_emotion_similarity(
|
| 802 |
+
user_emotion, piece_emotion
|
| 803 |
+
)
|
| 804 |
+
if similarity > best_similarity:
|
| 805 |
+
best_similarity = similarity
|
| 806 |
+
emotion_score += best_similarity * weight
|
| 807 |
+
|
| 808 |
+
if len(piece["related_emotions"]) > 0:
|
| 809 |
+
emotion_score /= len(piece["related_emotions"])
|
| 810 |
+
|
| 811 |
+
if emotion_score > best_emotion_score:
|
| 812 |
+
best_emotion_score = emotion_score
|
| 813 |
+
best_matches = [piece]
|
| 814 |
+
logger.info(
|
| 815 |
+
f" Nouveau meilleur score émotionnel: {emotion_score:.3f} - Œuvre #{piece['database_id']}"
|
| 816 |
+
)
|
| 817 |
+
elif emotion_score == best_emotion_score and emotion_score > 0:
|
| 818 |
+
best_matches.append(piece)
|
| 819 |
+
logger.info(
|
| 820 |
+
f" Score égal au meilleur: {emotion_score:.3f} - Œuvre #{piece['database_id']}"
|
| 821 |
+
)
|
| 822 |
+
|
| 823 |
+
logger.info(
|
| 824 |
+
f"Nombre de meilleures correspondances: {len(best_matches)} avec score {best_emotion_score:.3f}"
|
| 825 |
+
)
|
| 826 |
+
|
| 827 |
+
if len(best_matches) > 1:
|
| 828 |
+
logger.info("=== DÉPARTAGE PAR TYPE D'OBJET ===")
|
| 829 |
+
selected_types = []
|
| 830 |
+
for img_id in selected_image_ids:
|
| 831 |
+
if img_id in self.id_to_index:
|
| 832 |
+
idx = self.id_to_index[img_id]
|
| 833 |
+
selected_types.append(
|
| 834 |
+
self.df_with_images.loc[idx, "art_piece_type"]
|
| 835 |
+
)
|
| 836 |
+
|
| 837 |
+
selected_types_counter = Counter(selected_types)
|
| 838 |
+
|
| 839 |
+
type_scored_matches = []
|
| 840 |
+
best_type_score = -1
|
| 841 |
+
|
| 842 |
+
for piece in best_matches:
|
| 843 |
+
type_score = selected_types_counter.get(piece["art_piece_type"], 0)
|
| 844 |
+
if type_score > best_type_score:
|
| 845 |
+
best_type_score = type_score
|
| 846 |
+
type_scored_matches = [piece]
|
| 847 |
+
elif type_score == best_type_score:
|
| 848 |
+
type_scored_matches.append(piece)
|
| 849 |
+
|
| 850 |
+
if len(type_scored_matches) > 1:
|
| 851 |
+
logger.info(
|
| 852 |
+
f" {len(type_scored_matches)} œuvres avec le même score de type ({best_type_score}) - sélection aléatoire"
|
| 853 |
+
)
|
| 854 |
+
best_match = random.choice(type_scored_matches)
|
| 855 |
+
match_reason = (
|
| 856 |
+
"Sélection aléatoire parmi les meilleures correspondances"
|
| 857 |
+
)
|
| 858 |
+
else:
|
| 859 |
+
best_match = type_scored_matches[0]
|
| 860 |
+
match_reason = f"Type d'objet '{best_match['art_piece_type']}' préféré"
|
| 861 |
+
logger.info(
|
| 862 |
+
f" Type '{best_match['art_piece_type']}' sélectionné avec score {best_type_score}"
|
| 863 |
+
)
|
| 864 |
+
elif len(best_matches) == 1:
|
| 865 |
+
best_match = best_matches[0]
|
| 866 |
+
match_reason = "Meilleure correspondance émotionnelle"
|
| 867 |
+
else:
|
| 868 |
+
logger.info("Aucune correspondance trouvée")
|
| 869 |
+
return None, "Aucune correspondance trouvée", {}
|
| 870 |
+
|
| 871 |
+
reasons = []
|
| 872 |
+
if len(valid_preselection) > 0:
|
| 873 |
+
if firstname and best_match["related_names"]:
|
| 874 |
+
name_score = Optimizer.name_similarity(
|
| 875 |
+
firstname, best_match["related_names"]
|
| 876 |
+
)
|
| 877 |
+
if name_score > 0:
|
| 878 |
+
reasons.append(f"prénom '{firstname}' trouvé")
|
| 879 |
+
|
| 880 |
+
if birth_date and best_match["related_dates"]:
|
| 881 |
+
date_score = Optimizer.date_similarity(
|
| 882 |
+
birth_date, best_match["related_dates"]
|
| 883 |
+
)
|
| 884 |
+
if date_score > 0:
|
| 885 |
+
reasons.append(
|
| 886 |
+
f"date {'exacte' if date_score == 1.0 else 'partielle'}"
|
| 887 |
+
)
|
| 888 |
+
|
| 889 |
+
if city and best_match["related_places"]:
|
| 890 |
+
place_score = self.optimizer_helper.place_similarity(
|
| 891 |
+
city, best_match["related_places"]
|
| 892 |
+
)
|
| 893 |
+
if place_score > 0:
|
| 894 |
+
reasons.append(f"ville '{city}' trouvée")
|
| 895 |
+
|
| 896 |
+
if best_emotion_score > 0:
|
| 897 |
+
reasons.append(
|
| 898 |
+
f"correspondance émotionnelle (score: {best_emotion_score:.2f})"
|
| 899 |
+
)
|
| 900 |
+
|
| 901 |
+
if len(reasons) == 0:
|
| 902 |
+
reasons.append(match_reason)
|
| 903 |
+
|
| 904 |
+
final_reason = " ; ".join(reasons)
|
| 905 |
+
|
| 906 |
+
logger.info(f"\n🏆 RÉSULTAT FINAL: Œuvre #{best_match['database_id']}")
|
| 907 |
+
logger.info(f" Raison: {final_reason}")
|
| 908 |
+
logger.info(f" Type: {best_match['art_piece_type']}")
|
| 909 |
+
logger.info(f" Lieu: {best_match['art_piece_place']}")
|
| 910 |
+
|
| 911 |
+
match_image = self._get_artwork_image(best_match)
|
| 912 |
+
|
| 913 |
+
match_info = {
|
| 914 |
+
"title": f"Œuvre #{best_match['database_id']}",
|
| 915 |
+
"type": best_match["art_piece_type"],
|
| 916 |
+
"place": best_match["art_piece_place"],
|
| 917 |
+
"emotions": best_match["related_emotions"],
|
| 918 |
+
"explanation": best_match["explanation"],
|
| 919 |
+
}
|
| 920 |
+
|
| 921 |
+
return match_image, final_reason, match_info
|
| 922 |
+
|
| 923 |
+
|
| 924 |
+
csv_path = "PP1-Collection_Database_new-cleaned.csv"
|
| 925 |
+
images_dir = "pictures_data"
|
| 926 |
+
|
| 927 |
+
if not os.path.exists(csv_path):
|
| 928 |
+
logger.error(f"Fichier CSV introuvable: {csv_path}")
|
| 929 |
+
if not os.path.exists(images_dir):
|
| 930 |
+
logger.error(f"Répertoire images introuvable: {images_dir}")
|
| 931 |
+
|
| 932 |
+
matcher = ArtMatcherV2(csv_path, images_dir)
|
| 933 |
+
|
| 934 |
+
|
| 935 |
+
def process_user_info(firstname: str, birthday: str, city: str, state: SessionState):
|
| 936 |
+
"""Traite les informations utilisateur avec validation"""
|
| 937 |
+
firstname = SecurityValidator.sanitize_input(firstname)
|
| 938 |
+
city = SecurityValidator.sanitize_input(city)
|
| 939 |
+
|
| 940 |
+
state.firstname = firstname
|
| 941 |
+
state.birthday = birthday
|
| 942 |
+
state.city = city
|
| 943 |
+
|
| 944 |
+
if not firstname or not birthday:
|
| 945 |
+
return (
|
| 946 |
+
gr.update(visible=True),
|
| 947 |
+
gr.update(visible=False),
|
| 948 |
+
gr.update(visible=False),
|
| 949 |
+
"Veuillez remplir au moins votre prénom et date de naissance.",
|
| 950 |
+
state,
|
| 951 |
+
)
|
| 952 |
+
|
| 953 |
+
is_valid, _ = SecurityValidator.validate_date(birthday)
|
| 954 |
+
if not is_valid:
|
| 955 |
+
return (
|
| 956 |
+
gr.update(visible=True),
|
| 957 |
+
gr.update(visible=False),
|
| 958 |
+
gr.update(visible=False),
|
| 959 |
+
"Format de date invalide. Utilisez JJ/MM (ex: 15/03)",
|
| 960 |
+
state,
|
| 961 |
+
)
|
| 962 |
+
|
| 963 |
+
return (
|
| 964 |
+
gr.update(visible=False),
|
| 965 |
+
gr.update(visible=True),
|
| 966 |
+
gr.update(visible=False),
|
| 967 |
+
"Informations enregistrées ! Passons à la sélection d'images.",
|
| 968 |
+
state,
|
| 969 |
+
)
|
| 970 |
+
|
| 971 |
+
|
| 972 |
+
def load_images_for_round(round_num: int, state: SessionState):
|
| 973 |
+
"""Charge 3 images pour un tour de sélection"""
|
| 974 |
+
images_data = matcher.get_random_images_for_selection(
|
| 975 |
+
round_num, state.selected_images
|
| 976 |
+
)
|
| 977 |
+
|
| 978 |
+
if len(images_data) < ScoringWeights.MAX_IMAGES_PER_SELECTION:
|
| 979 |
+
logger.warning(f"Seulement {len(images_data)} images disponibles")
|
| 980 |
+
return (
|
| 981 |
+
[None, None, None],
|
| 982 |
+
[],
|
| 983 |
+
f"Pas assez d'images disponibles (seulement {len(images_data)} trouvées)",
|
| 984 |
+
state,
|
| 985 |
+
)
|
| 986 |
+
|
| 987 |
+
images = [img[0] for img in images_data]
|
| 988 |
+
ids = [img[1] for img in images_data]
|
| 989 |
+
|
| 990 |
+
state.current_image_ids = ids
|
| 991 |
+
|
| 992 |
+
return (
|
| 993 |
+
images,
|
| 994 |
+
ids,
|
| 995 |
+
f"Tour {round_num + 1}/{ScoringWeights.TOTAL_ROUNDS} : Sélectionnez l'image qui vous attire le plus",
|
| 996 |
+
state,
|
| 997 |
+
)
|
| 998 |
+
|
| 999 |
+
|
| 1000 |
+
def select_image(choice: Optional[int], state: SessionState):
|
| 1001 |
+
"""Traite la sélection d'image"""
|
| 1002 |
+
if choice is None:
|
| 1003 |
+
return (
|
| 1004 |
+
gr.update(),
|
| 1005 |
+
gr.update(),
|
| 1006 |
+
gr.update(),
|
| 1007 |
+
gr.update(),
|
| 1008 |
+
"Veuillez sélectionner une image",
|
| 1009 |
+
state,
|
| 1010 |
+
)
|
| 1011 |
+
|
| 1012 |
+
if state.current_image_ids and len(state.current_image_ids) > choice:
|
| 1013 |
+
selected_id = state.current_image_ids[choice]
|
| 1014 |
+
else:
|
| 1015 |
+
return (
|
| 1016 |
+
gr.update(),
|
| 1017 |
+
gr.update(),
|
| 1018 |
+
gr.update(),
|
| 1019 |
+
gr.update(),
|
| 1020 |
+
"Erreur: image non trouvée",
|
| 1021 |
+
state,
|
| 1022 |
+
)
|
| 1023 |
+
|
| 1024 |
+
state.selected_images.append(selected_id)
|
| 1025 |
+
state.current_round += 1
|
| 1026 |
+
|
| 1027 |
+
logger.info(
|
| 1028 |
+
f"Tour {state.current_round}: Image {choice+1} sélectionnée (ID: {selected_id})"
|
| 1029 |
+
)
|
| 1030 |
+
|
| 1031 |
+
if state.current_round < ScoringWeights.TOTAL_ROUNDS:
|
| 1032 |
+
new_images, new_ids, message, state = load_images_for_round(
|
| 1033 |
+
state.current_round, state
|
| 1034 |
+
)
|
| 1035 |
+
return (
|
| 1036 |
+
gr.update(value=new_images[0]),
|
| 1037 |
+
gr.update(value=new_images[1]),
|
| 1038 |
+
gr.update(value=new_images[2]),
|
| 1039 |
+
gr.update(value=None),
|
| 1040 |
+
message,
|
| 1041 |
+
state,
|
| 1042 |
+
)
|
| 1043 |
+
else:
|
| 1044 |
+
return (
|
| 1045 |
+
gr.update(),
|
| 1046 |
+
gr.update(),
|
| 1047 |
+
gr.update(),
|
| 1048 |
+
gr.update(),
|
| 1049 |
+
"Sélection terminée ! Calcul de votre œuvre correspondante...",
|
| 1050 |
+
state,
|
| 1051 |
+
)
|
| 1052 |
+
|
| 1053 |
+
|
| 1054 |
+
def show_results(state: SessionState):
|
| 1055 |
+
"""Affiche les résultats finaux"""
|
| 1056 |
+
if not state.is_complete():
|
| 1057 |
+
return (
|
| 1058 |
+
gr.update(visible=False),
|
| 1059 |
+
gr.update(visible=True),
|
| 1060 |
+
gr.update(visible=False),
|
| 1061 |
+
None,
|
| 1062 |
+
"",
|
| 1063 |
+
"",
|
| 1064 |
+
)
|
| 1065 |
+
|
| 1066 |
+
match_image, reason, info = matcher.find_best_match(
|
| 1067 |
+
state.firstname,
|
| 1068 |
+
state.birthday,
|
| 1069 |
+
state.city,
|
| 1070 |
+
state.selected_images,
|
| 1071 |
+
)
|
| 1072 |
+
|
| 1073 |
+
if match_image:
|
| 1074 |
+
explanation = f"""
|
| 1075 |
+
**Votre œuvre correspondante a été trouvée !**
|
| 1076 |
+
|
| 1077 |
+
**Raison du match :** {reason}
|
| 1078 |
+
|
| 1079 |
+
**Détails de l'œuvre :**
|
| 1080 |
+
- Type : {info.get('type', 'Non spécifié')}
|
| 1081 |
+
- Lieu : {info.get('place', 'Non spécifié')}
|
| 1082 |
+
- Émotions : {', '.join(info.get('emotions', [])) if info.get('emotions') else 'Non spécifiées'}
|
| 1083 |
+
|
| 1084 |
+
**Description :**
|
| 1085 |
+
{info.get('explanation', 'Aucune description disponible')}
|
| 1086 |
+
"""
|
| 1087 |
+
else:
|
| 1088 |
+
explanation = "Désolé, aucune œuvre correspondante n'a pu être trouvée."
|
| 1089 |
+
|
| 1090 |
+
return (
|
| 1091 |
+
gr.update(visible=False),
|
| 1092 |
+
gr.update(visible=False),
|
| 1093 |
+
gr.update(visible=True),
|
| 1094 |
+
match_image,
|
| 1095 |
+
info.get("title", "Œuvre non trouvée"),
|
| 1096 |
+
explanation,
|
| 1097 |
+
)
|
| 1098 |
+
|
| 1099 |
+
|
| 1100 |
+
with gr.Blocks(title="Art Matcher", theme=gr.themes.Soft()) as demo:
|
| 1101 |
+
gr.Markdown(
|
| 1102 |
+
"""
|
| 1103 |
+
# 🎨 Art Matcher
|
| 1104 |
+
### Découvrez l'œuvre d'art qui vous correspond !
|
| 1105 |
+
|
| 1106 |
+
Cette application utilise vos informations personnelles et vos préférences visuelles
|
| 1107 |
+
pour trouver l'œuvre d'art qui vous correspond le mieux dans notre collection.
|
| 1108 |
+
"""
|
| 1109 |
+
)
|
| 1110 |
+
|
| 1111 |
+
session_state = gr.State(SessionState())
|
| 1112 |
+
|
| 1113 |
+
with gr.Group(visible=True) as info_section:
|
| 1114 |
+
gr.Markdown("### Étape 1 : Vos informations")
|
| 1115 |
+
with gr.Row():
|
| 1116 |
+
firstname_input = gr.Textbox(
|
| 1117 |
+
label="Prénom", placeholder="Entrez votre prénom", max_lines=1
|
| 1118 |
+
)
|
| 1119 |
+
birthday_input = gr.Textbox(
|
| 1120 |
+
label="Date d'anniversaire (JJ/MM)",
|
| 1121 |
+
placeholder="Ex: 25/12",
|
| 1122 |
+
max_lines=1,
|
| 1123 |
+
)
|
| 1124 |
+
city_input = gr.Textbox(
|
| 1125 |
+
label="Ville de résidence", placeholder="Ex: Paris", max_lines=1
|
| 1126 |
+
)
|
| 1127 |
+
|
| 1128 |
+
submit_info_btn = gr.Button("Valider mes informations", variant="primary")
|
| 1129 |
+
|
| 1130 |
+
with gr.Group(visible=False) as selection_section:
|
| 1131 |
+
selection_title = gr.Markdown("### Étape 2 : Sélection d'images")
|
| 1132 |
+
|
| 1133 |
+
with gr.Row():
|
| 1134 |
+
img1 = gr.Image(label="Image 1", type="filepath", height=300)
|
| 1135 |
+
img2 = gr.Image(label="Image 2", type="filepath", height=300)
|
| 1136 |
+
img3 = gr.Image(label="Image 3", type="filepath", height=300)
|
| 1137 |
+
|
| 1138 |
+
image_choice = gr.Radio(
|
| 1139 |
+
choices=["Image 1", "Image 2", "Image 3"],
|
| 1140 |
+
label="Quelle image vous attire le plus ?",
|
| 1141 |
+
type="index",
|
| 1142 |
+
)
|
| 1143 |
+
|
| 1144 |
+
select_btn = gr.Button("Valider mon choix", variant="primary")
|
| 1145 |
+
|
| 1146 |
+
with gr.Group(visible=False) as results_section:
|
| 1147 |
+
gr.Markdown("### Votre œuvre correspondante")
|
| 1148 |
+
|
| 1149 |
+
with gr.Row():
|
| 1150 |
+
with gr.Column(scale=1):
|
| 1151 |
+
result_image = gr.Image(label="Votre œuvre", height=400)
|
| 1152 |
+
result_title = gr.Markdown("## Titre de l'œuvre")
|
| 1153 |
+
|
| 1154 |
+
with gr.Column(scale=1):
|
| 1155 |
+
result_explanation = gr.Markdown("")
|
| 1156 |
+
|
| 1157 |
+
restart_btn = gr.Button("Recommencer", variant="secondary")
|
| 1158 |
+
|
| 1159 |
+
status_message = gr.Markdown("")
|
| 1160 |
+
|
| 1161 |
+
def on_info_submit(firstname, birthday, city, state):
|
| 1162 |
+
state.reset()
|
| 1163 |
+
|
| 1164 |
+
info_vis, select_vis, results_vis, message, state = process_user_info(
|
| 1165 |
+
firstname, birthday, city, state
|
| 1166 |
+
)
|
| 1167 |
+
|
| 1168 |
+
if select_vis["visible"]:
|
| 1169 |
+
images, ids, round_message, state = load_images_for_round(0, state)
|
| 1170 |
+
return (
|
| 1171 |
+
info_vis,
|
| 1172 |
+
select_vis,
|
| 1173 |
+
results_vis,
|
| 1174 |
+
images[0] if len(images) > 0 else None,
|
| 1175 |
+
images[1] if len(images) > 1 else None,
|
| 1176 |
+
images[2] if len(images) > 2 else None,
|
| 1177 |
+
round_message,
|
| 1178 |
+
state,
|
| 1179 |
+
)
|
| 1180 |
+
else:
|
| 1181 |
+
return (info_vis, select_vis, results_vis, None, None, None, message, state)
|
| 1182 |
+
|
| 1183 |
+
submit_info_btn.click(
|
| 1184 |
+
fn=on_info_submit,
|
| 1185 |
+
inputs=[firstname_input, birthday_input, city_input, session_state],
|
| 1186 |
+
outputs=[
|
| 1187 |
+
info_section,
|
| 1188 |
+
selection_section,
|
| 1189 |
+
results_section,
|
| 1190 |
+
img1,
|
| 1191 |
+
img2,
|
| 1192 |
+
img3,
|
| 1193 |
+
status_message,
|
| 1194 |
+
session_state,
|
| 1195 |
+
],
|
| 1196 |
+
)
|
| 1197 |
+
|
| 1198 |
+
def on_image_select(choice, state):
|
| 1199 |
+
(img1_update, img2_update, img3_update, choice_update, message, state) = (
|
| 1200 |
+
select_image(choice, state)
|
| 1201 |
+
)
|
| 1202 |
+
|
| 1203 |
+
return (
|
| 1204 |
+
gr.update(), # info_section
|
| 1205 |
+
gr.update(), # selection_section
|
| 1206 |
+
gr.update(), # results_section
|
| 1207 |
+
img1_update, # img1
|
| 1208 |
+
img2_update, # img2
|
| 1209 |
+
img3_update, # img3
|
| 1210 |
+
choice_update, # image_choice
|
| 1211 |
+
message, # status_message
|
| 1212 |
+
state,
|
| 1213 |
+
)
|
| 1214 |
+
|
| 1215 |
+
def handle_final_results(state):
|
| 1216 |
+
if state.is_complete():
|
| 1217 |
+
return show_results(state)
|
| 1218 |
+
else:
|
| 1219 |
+
return gr.update(), gr.update(), gr.update(), None, "", ""
|
| 1220 |
+
|
| 1221 |
+
select_btn.click(
|
| 1222 |
+
fn=on_image_select,
|
| 1223 |
+
inputs=[image_choice, session_state],
|
| 1224 |
+
outputs=[
|
| 1225 |
+
info_section,
|
| 1226 |
+
selection_section,
|
| 1227 |
+
results_section,
|
| 1228 |
+
img1,
|
| 1229 |
+
img2,
|
| 1230 |
+
img3,
|
| 1231 |
+
image_choice,
|
| 1232 |
+
status_message,
|
| 1233 |
+
session_state,
|
| 1234 |
+
],
|
| 1235 |
+
).then(
|
| 1236 |
+
fn=handle_final_results,
|
| 1237 |
+
inputs=[session_state],
|
| 1238 |
+
outputs=[
|
| 1239 |
+
info_section,
|
| 1240 |
+
selection_section,
|
| 1241 |
+
results_section,
|
| 1242 |
+
result_image,
|
| 1243 |
+
result_title,
|
| 1244 |
+
result_explanation,
|
| 1245 |
+
],
|
| 1246 |
+
)
|
| 1247 |
+
|
| 1248 |
+
def restart_app(state):
|
| 1249 |
+
state.reset()
|
| 1250 |
+
|
| 1251 |
+
return (
|
| 1252 |
+
gr.update(visible=True),
|
| 1253 |
+
gr.update(visible=False),
|
| 1254 |
+
gr.update(visible=False),
|
| 1255 |
+
"",
|
| 1256 |
+
"",
|
| 1257 |
+
"",
|
| 1258 |
+
None,
|
| 1259 |
+
"Application réinitialisée. Veuillez entrer vos informations.",
|
| 1260 |
+
state,
|
| 1261 |
+
)
|
| 1262 |
+
|
| 1263 |
+
restart_btn.click(
|
| 1264 |
+
fn=restart_app,
|
| 1265 |
+
inputs=[session_state],
|
| 1266 |
+
outputs=[
|
| 1267 |
+
info_section,
|
| 1268 |
+
selection_section,
|
| 1269 |
+
results_section,
|
| 1270 |
+
firstname_input,
|
| 1271 |
+
birthday_input,
|
| 1272 |
+
city_input,
|
| 1273 |
+
image_choice,
|
| 1274 |
+
status_message,
|
| 1275 |
+
session_state,
|
| 1276 |
+
],
|
| 1277 |
+
)
|
| 1278 |
+
|
| 1279 |
+
|
| 1280 |
+
if __name__ == "__main__":
|
| 1281 |
+
demo.launch()
|
pictures_data/2022.0.86_medium.jpg
ADDED
|
pictures_data/Abena_01_021.jpg
ADDED
|
pictures_data/Abena_02_408.jpg
ADDED
|
Git LFS Details
|
pictures_data/Abena_03_513.jpg
ADDED
|
Git LFS Details
|
pictures_data/Abena_04_539.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_01_053.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_02_220.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_03_406.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_04_710.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_05_828.jpg
ADDED
|
Git LFS Details
|
pictures_data/IMadeYou_06_1243.jpg
ADDED
|
Git LFS Details
|
pictures_data/Isabella_1_045.jpg
ADDED
|
pictures_data/Isabella_2_1737.jpg
ADDED
|
Git LFS Details
|
pictures_data/Isabella_3_1910.jpg
ADDED
|
Git LFS Details
|
pictures_data/MAR-BVM-7-2022-0-100-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-100-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-105-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-105-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-125-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-128-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-128-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-130-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-130-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-131-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-132-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-132-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-133_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-134-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-134-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-134-003_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-135-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-135-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-136-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-136-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-138-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-138-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-139-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-139-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-147-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-147-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-148-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-148-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-149-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-149-002_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-153-001_medium.jpg
ADDED
|
pictures_data/MAR-BVM-7-2022-0-153-002_medium.jpg
ADDED
|