电影口碑与海报图像的相关性分析

Posted chengchengaqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电影口碑与海报图像的相关性分析相关的知识,希望对你有一定的参考价值。

1. 通过人脸检测获取海报中人脸个数及颜色均值。

2. 分析海报人脸个数,颜色均值和评分的关系。

main.py

 1 # -*- coding: utf-8 -*-
 2 
 3 import pandas as pd
 4 from tools import get_n_face, get_color_mean
 5 import matplotlib.pyplot as plt
 6 
 7 # 数据集路径
 8 dataset_path = ./dataset/movie_metadata.csv
 9 
10 # 是否第一次运行
11 is_first_run = False
12 
13 
14 def run_main():
15     """
16         主函数
17     """
18     if is_first_run:
19         # 第一次运行程序
20         data_df = pd.read_csv(dataset_path, nrows=100)
21 
22         # 记录海报中人脸个数
23         print(海报人脸检测:)
24         data_df[n_face] = data_df[movie_imdb_link].apply(get_n_face)
25 
26         # 保存结果
27         data_df.to_csv(./imdb_face.csv, index=False, encoding=utf-8)
28 
29         # 记录海报的平均像素值(这里代表图像的主要颜色,可通过颜色的表达方式替代)
30         print(海报像素均值计算:)
31         data_df[color_mean] = data_df[movie_imdb_link].apply(get_color_mean)
32 
33         # 保存结果
34         data_df.to_csv(./imdb_face_color.csv, index=False, encoding=utf-8)
35 
36     data_df = pd.read_csv(./imdb_face_color.csv)
37     # 分析结果
38     # 人脸个数和评分的关系
39     # 去除无效人脸
40     data_df = data_df[data_df[n_face] != -1]
41     face_score = data_df[imdb_score].groupby(data_df[n_face]).mean()
42     face_score.name = Score
43     face_score.index.name = Number of Face
44     face_score.plot(kind=bar)
45     plt.show()
46 
47     # 像素均值和评分的关系
48     color_score = data_df[imdb_score].groupby(data_df[color_mean]).mean()
49     color_score.name = Score
50     color_score.index.name = Mean of color
51     color_score.plot(kind=bar)
52     plt.show()
53 
54 
55 if __name__ == __main__:
56     run_main()

tools.py

 1 # -*- coding: utf-8 -*-
 2 
 3 from bs4 import BeautifulSoup
 4 import urllib.request
 5 import cognitive_face as CF
 6 from skimage import io
 7 import numpy as np
 8 
 9 
10 def get_img_link(movie_link):
11     """
12         通过电影的链接爬取海报的链接
13     """
14     movie_html = urllib.request.urlopen(movie_link)
15     movie_html_obj = BeautifulSoup(movie_html, html.parser, from_encoding=utf-8)
16     # 获取海报小图的链接
17     small_poster_img_link = movie_html_obj.find(div, class_=poster).find(img)[src]
18 
19     # 获取海报大图的链接
20     big_poster_img_link = small_poster_img_link[:small_poster_img_link.find(._V1_) + 4] + .jpg
21 
22     return big_poster_img_link
23 
24 
25 def get_n_face(movie_link):
26     """
27         通过图像链接获取包含的人脸个数
28     """
29     print(正在处理链接:, movie_link)
30     img_link = get_img_link(movie_link)
31     Key = xxxxxxxxxx   # 这里请替换成自己申请的key
32     CF.Key.set(Key)
33     n_face = -1
34     try:
35         face_list = CF.face.detect(img_link)
36         n_face = len(face_list)
37         print(人脸个数:, n_face)
38     except CF.util.CognitiveFaceException:
39         print(无效图片)
40     return n_face
41 
42 
43 def round_to_int(x, base=10):
44     """
45         将数字转换到最近的整数
46     """
47     return int(base * round(float(x)/base))
48 
49 
50 def get_color_mean(movie_link):
51     """
52         通过图像链接获取其平均像素值
53     """
54     print(正在处理链接:, movie_link)
55     img_link = get_img_link(movie_link)
56     image = io.imread(img_link)
57     int_mean_color = round_to_int(np.mean(image))
58     print(像素均值:, int_mean_color)
59     return int_mean_color

 

以上是关于电影口碑与海报图像的相关性分析的主要内容,如果未能解决你的问题,请参考以下文章

我心中的前三佳作品

用JAVA生成老电影海报

IMDB 海报 URL 返回推荐被拒绝

上市电影+他们的海报

电影衍生品整理

当notifyDataSetChanged与MVVM一起使用时,RecyclerView不会更新