通过 GitHub 查看代码
https://github.com/antoneev/66DaysOfData/tree/main/captionSuggestionsUsingLyrics
查看部署的应用程序
https://share.streamlit.io/antoneev/66daysofdata/main/captionSuggestionsUsingLyrics/app.py
目录
介绍
颜色检测
对象检测
相似词建议
Lyrics Genius API
主函数
Streamlit
部署
资源
介绍
该项目的作用是使用歌词为图像提供字幕。许多人当前面临的问题之一是缺乏诙谐、机智、深刻的见解,或者仅仅是优秀的字幕。
随着社交媒体的兴起,一切都需要一个标题。从与祖母的合影到与狗的可爱合影,问题是我们大多数人都没有合适的词来为我们的照片添加标题,这让我们等了几个星期才发帖,有时我们也从来没有为此发帖。其他时候,它只是简单地发布而没有标题。
该项目试图通过使用对象和颜色检测来查找照片中的元素来解决这个问题。然后,该算法使用通过我们选定的艺术家,在 Lyrics Genius 包找到歌词并在整个系统中搜索这些元素并返回。
颜色检测
算法列表的第一站是颜色检测。颜色检测是使用K-Means 聚类、OpenCV 和 colors.csv 文件。
K-Means 聚类
打开文件并在 RBG 通道上对其进行转换并调整其大小后。应用了K-means。K-means 用于根据用户选择的数量返回图像中找到的“n 个主要”颜色。
如果用户输入黑色图像,并告诉系统搜索 10 种颜色,这也会处理实例。系统将返回单一的黑色。
def palette(clusters):
width = 300
palette = np.zeros((50, width, 3), np.uint8)
steps = width/clusters.cluster_centers_.shape[0]
for idx, centers in enumerate(clusters.cluster_centers_):
palette[:, int(idx*steps):(int((idx+1)*steps)), :] = centers
return palette
OpenCV
设置此值后,算法会检测图像中的 n 个主色。然后我们将图像和调色板保存在 compare_img() 中。
紧接着,我们使用all_colors_in_img()返回图像中所有颜色的列表。这多次重复相同的颜色。
因此, np.unique() 用于返回唯一值。
def compare_img(img_1, img_2):
f, ax = plt.subplots(1, 2, figsize=(10,10))
ax[0].imshow(img_1)
ax[1].imshow(img_2)
ax[0].ax