原文: https://pythonspot.com/netflix-like-thumbnails-with-python/

Netflix 的启发,我们决定实施对焦点算法。 如果您在移动网站上使用生成的缩略图,则可能会增加 YouTube 视频的点击率(CTR)。

无论如何,这是一个有趣的实验。

焦点

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

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

Python 和 Netflix 点赞缩略图 - 图1

Python Netflix 点赞缩略图。来源:Google 视频。

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

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

  1. #! /usr/bin/python
  2. import cv2
  3. bodyCascade = cv2.CascadeClassifier('data/haarcascade_mcs_upperbody.xml')
  4. frame = cv2.imread('snapshot.png')
  5. frameHeight, frameWidth, frameChannels = frame.shape
  6. regions = bodyCascade.detectMultiScale(frame, 1.8, 2)
  7. x,y,w,h = regions[0]
  8. cv2.imwrite('thumbnail.png', frame[0:frameHeight,x:x+w])
  9. cv2.rectangle(frame,(x,0),(x+w,frameHeight),(0,255,255),6)
  10. cv2.imshow("Result",frame)
  11. cv2.waitKey(0);

我们使用cv2.CascadeClassifier()加载 haar 级联文件,并使用cv2.imread()加载图像,然后bodyCascade.detectMultiScale()使用已加载的 Haar 功能检测感兴趣的区域。

使用cv2.imwrite()将图像另存为缩略图,最后显示图像并用矩形突出显示感兴趣的区域。 运行后,您将获得用于移动网页或应用程序的漂亮缩略图。

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

  1. #! /usr/bin/python
  2. import cv2
  3. bodyCascade = cv2.CascadeClassifier('data/haarcascade_mcs_upperbody.xml')
  4. faceCascade = cv2.CascadeClassifier('data/lbpcascade_frontalface.xml')
  5. frame = cv2.imread('snapshot2.png')
  6. frameHeight, frameWidth, frameChannels = frame.shape
  7. regions = bodyCascade.detectMultiScale(frame, 1.5, 2)
  8. x,y,w,h = regions[0]
  9. cv2.imwrite('thumbnail.png', frame[0:frameHeight,x:x+w])
  10. cv2.rectangle(frame,(x,0),(x+w,frameHeight),(0,255,255),6)
  11. faceregions = faceCascade.detectMultiScale(frame, 1.5, 2)
  12. x,y,w,h = faceregions[0]
  13. cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),6)
  14. cv2.imshow("Result",frame)
  15. cv2.waitKey(0);
  16. cv2.imwrite('out.png', frame)