# Python 和 Netflix 点赞图标

> 原文： [https://pythonspot.com/netflix-like-thumbnails-with-python/](https://pythonspot.com/netflix-like-thumbnails-with-python/)

受 [Netflix](https://techblog.netflix.com/2016/03/extracting-image-metadata-at-scale.html) 的启发，我们决定实施对焦点算法。 如果您在移动网站上使用生成的缩略图，则可能会增加 YouTube 视频的点击率（CTR）。
无论如何，这是一个有趣的实验。

## 焦点


所有图像都有一个感兴趣的区域，通常是人或脸。

找到关注区域的算法称为焦点算法。 给定输入图像，将基于关注区域创建一个新图像（缩略图）。

![Netflix like Thumbnails Python](img/4ff0874e193357fd06d6aca13d7dc8c4.jpg)

Netflix like Thumbnails Python. Source: Google videos. 

从要用作缩略图的快照图像开始。 我们使用 Haar 功能查找图像中最有趣的区域。 Haar 级联文件可以在以下位置找到：

*   [https://raw.githubusercontent.com/Itseez/opencv/master/data/lbpcascades/lbpcascade_frontalface.xml](https://raw.githubusercontent.com/Itseez/opencv/master/data/lbpcascades/lbpcascade_frontalface.xml)
*   [https://github.com/adamhrv/HaarcascadeVisualizer](https://github.com/adamhrv/HaarcascadeVisualizer)

将这些文件下载到/ data /目录中。

```py

#! /usr/bin/python

import cv2

bodyCascade = cv2.CascadeClassifier('data/haarcascade_mcs_upperbody.xml')
frame = cv2.imread('snapshot.png')
frameHeight, frameWidth, frameChannels = frame.shape
regions = bodyCascade.detectMultiScale(frame, 1.8, 2)
x,y,w,h = regions[0]
cv2.imwrite('thumbnail.png', frame[0:frameHeight,x:x+w])
cv2.rectangle(frame,(x,0),(x+w,frameHeight),(0,255,255),6)
cv2.imshow("Result",frame)
cv2.waitKey(0);

```

我们使用 **cv2.CascadeClassifier（）**加载 haar 级联文件，并使用 **cv2.imread（）**
加载图像，然后 **bodyCascade.detectMultiScale（）** 使用已加载的 Haar 功能检测感兴趣的区域。
使用 **cv2.imwrite（）**将图像另存为缩略图，最后显示图像并用矩形突出显示感兴趣的区域。 运行后，您将获得用于移动网页或应用程序的漂亮缩略图。

如果您还想同时检测身体和面部，可以使用：

```py

#! /usr/bin/python

import cv2

bodyCascade = cv2.CascadeClassifier('data/haarcascade_mcs_upperbody.xml')
faceCascade = cv2.CascadeClassifier('data/lbpcascade_frontalface.xml')
frame = cv2.imread('snapshot2.png')
frameHeight, frameWidth, frameChannels = frame.shape

regions = bodyCascade.detectMultiScale(frame, 1.5, 2)
x,y,w,h = regions[0]
cv2.imwrite('thumbnail.png', frame[0:frameHeight,x:x+w])
cv2.rectangle(frame,(x,0),(x+w,frameHeight),(0,255,255),6)

faceregions = faceCascade.detectMultiScale(frame, 1.5, 2)
x,y,w,h = faceregions[0]
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),6)

cv2.imshow("Result",frame)
cv2.waitKey(0);
cv2.imwrite('out.png', frame)

```