作者:手机用户2502934435 | 来源:互联网 | 2023-09-13 01:46
简评:用深度学习来评判颜值,已开源。好友@小灰灰大大的「颜值评分FaceRank」,这是基于TensorFlow的CNN模型,美不美机器说了算。我们常看到用机器学习识别字体,自动驾
简评:用深度学习来评判颜值,已开源。好友
@小灰灰 大大的「
颜值评分 FaceRank」,这是基于 TensorFlow 的 CNN 模型,美不美机器说了算。
我们常看到用机器学习识别字体,自动驾驶等项目,今天给大家推荐一个有趣的项目 FaceRank,这是个开源项目,它基于 TensorFlow CNN 模型,提供了一些图片处理的工具集,后续还会提供训练好的模型。
从此以后,让它来帮你寻找高颜值的小电影,帮你筛选附近高颜值的妹子(汉子),让它帮你给学校或者公司帅哥美女做个排行榜,让它给明星打分并且你可以自豪的说「一切都是人工智能的选择」。。。
以下是机器给苍老师的打分。
(机器给苍老师打了 7 分,这已经是很高的分数了,果然德艺双磬)
数据集
- 130 张 128*128 张网络图片,图片名:1-3.jpg 表示 分值为 1 的第 3 张图。 你可以把符合这个格式的图片放在 resize_images 来训练模型。
- find_faces_in_picture.py
find_and_save_face 基于 face_recognition 从图片中找到人脸的坐标,并保存为新图片。
from PIL import Image
import face_recognition
import os
print("h")
def find_and_save_face(web_file,face_file):
# Load the jpg file into a numpy array
image = face_recognition.load_image_file(web_file)
print(image.dtype)
# Find all the faces in the image
face_locations = face_recognition.face_locations(image)
print("I found {} face(s) in this photograph.".format(len(face_locations)))
for face_location in face_locations:
# Print the location of each face in this image
top, right, bottom, left = face_location
print("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))
# You can access the actual face itself like this:
face_image = image[top:bottom, left:right]
pil_image = Image.fromarray(face_image)
pil_image.save(face_file)
print("h")
list = os.listdir("web_image/")
print(list)
for image in list:
id_tag = image.find(".")
name=image[0:id_tag]
print(name)
web_file = "./web_image/" +image
face_file="./face_image/"+name+".jpg"
im=Image.open("./web_image/"+image)
try:
find_and_save_face(web_file, face_file)
except:
print("fail")
- 然后再用 resize 统一为 128×128 大小,为模型训练做准备。
模型
人脸打分基于 TensorFlow 的 CNN 模型 代码参考 : TensorFlow-Examples
卷积神经网络部分代码,网络结构说明:
# Create model
def conv_net(x, weights, biases, dropout):
# Reshape input picture
x = tf.reshape(x, shape=[-1, 128, 128, 3])
# Convolution Layer
conv1 = conv2d(x, weights['wc1'], biases['bc1'])
print(conv1.shape)
# Max Pooling (down-sampling)
conv1 = maxpool2d(conv1, k=2)
print(conv1.shape)
# Convolution Layer
conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])
print(conv2.shape)
# Max Pooling (down-sampling)
conv2 = maxpool2d(conv2, k=2)
print(conv2.shape)
# Fully connected layer
# Reshape conv2 output to fit fully connected layer input
fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])
fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])
fc1 = tf.nn.relu(fc1)
# Apply Dropout
fc1 = tf.nn.dropout(fc1, dropout)
# Output, class prediction
out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])
return out
运行
安装好 TensorFlow 之后,直接运行 train_model.py .
测试
运行完 train_model.py 之后,直接运行 run_model.py 来测试.
下载
训练好的模型下载网址: (文件较大,正在上传) http://www.tensorflownews.com/
模型效果
- 训练过程 你可以看训练过程:Train_Result.md ,这里有损失函数和准确率变化过程。
- 测试结果 结果并不非常好,但是增加数据集之后有所改善。
(?, 128, 128, 24)
(?, 64, 64, 24)
(?, 64, 64, 96)
(?, 32, 32, 96)
['1-1.jpg', '1-2.jpg', '10-1.jpg', '10-2.jpg', '2-1.jpg', '2-2.jpg', '3-1.jpg', '3-2.jpg', '4-1.jpg', '4-2.jpg', '5-1.jpg', '5-2.jpg', '6-1.jpg', '6-2.jpg', '7-1.jpg', '7-2.jpg', '8-1.jpg', '8-2.jpg', '9-1.jpg', '9-2.jpg']
20
(10, 128, 128, 3)
[3 2 8 6 5 8 0 4 7 7]
(10, 128, 128, 3)
[2 6 6 6 5 8 7 8 7 5]
Test Finished!
支持
- 提交 issue
- Github: https://github.com/fendouai/FaceRank
转载:欢迎转载,保留出处。
原文:
Github – FaceRank