One approach to creating a responsive solution involves measuring the position of each face, as well as the width and height of the overall image. CSS can then be used to place a transparent, hoverable element over each face.
In this example, I simply used a physical ruler on the photo as pixel-perfect accuracy is not necessary.
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
--imgW: 21.5;
--imgH: 10.5;
width: 100vw;
height: calc(100vw * (var(--imgH) / var(--imgW)));
background-image: url(https://i.sstatic.net/G1uWk.png);
background-size: 100% auto;
position: relative;
}
.container> :nth-child(n) {
position: absolute;
left: calc(100% * var(--left) / var(--imgW));
top: calc(100% * var(--top) / var(--imgH));
background-color: transparent;
width: calc(100% * (var(--right) - var(--left)) / var(--imgW));
height: calc(100% * (var(--bottom) - var(--top)) / var(--imgH));
z-index: 1;
}
.container> :nth-child(1) {
--left: 4.5;
--right: 6.75;
--top: 2.25;
--bottom: 4.5;
}
.container> :nth-child(2) {
--left: 10.75;
--right: 13.25;
--top: 3;
--bottom: 5.5;
}
.container> :nth-child(n)> :first-child {
display: none;
background: white;
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
padding: 1vw;
overflow: auto;
}
.container> :nth-child(n):hover> :first-child {
display: block;
}
<div class="container">
<div>
<div>Person 1</div>
</div>
<div>
<div>Person 2</div>
</div>
</div>