当前位置:网站首页>[face recognition series] | realize automatic makeup
[face recognition series] | realize automatic makeup
2022-07-06 04:14:00 【Aasee.】
List of articles
Make up
Today's project is more interesting , Make up the face in the picture [ A bad laugh ], Think about when your girlfriend said that she forgot to apply lipstick and trim her eyebrows when taking photos today , Then you say you come , Give him a boast about the operation results P It's even uglier , This doesn't make lanterns in the toilet – Looking for shit , But don't panic. I'll save you today , Cough, get to the point .
First , We still have to know what functions we need to use first , It mainly uses these two face_landmarks( As mentioned in the last article , But for better experience and faster understanding, I'd better get it for you ),ImageDraw.polygon.
Face feature extraction function ——face_landmarks
face_landmarks( face_image , face_locations=None, model=“large” ) Given an image , Extract the facial feature position of each face in the image Parameters : face_image : Input face image face_locations=None : Optional parameters , The default value is None, Represents everyone's face in the default decoded picture . If input face_locations()[i] You can specify a face to decode model=“large” : Output feature model , The default is “large”, Optional “small”. When the choice is "small" when , Only the left eye is extracted left_eye、 Right eye right_eye、 Nose nose_tip These three facial features .
ImageDraw.polygon
Construct a ImageDraw object : polygon() Method is used to draw polygons : The first parameter is the number of polygons Composed of vertex positions list, The second parameter fill Is the face that fills the polygon color . line() The method is used to draw line segments composed of multiple points , The first parameter is Point position list, The second parameter fill Is the color of the line segment , The third reference Count width Is the width of the line segment .
By using face_landmarks To locate the characteristic face of the face , Use it Image.polygon Draw polygon , Next, the detailed code explanation
Specific code
import face_recognition
from PIL import Image, ImageDraw
def demoFunc2(pic_path):
# Load the picture as numpy Array
image = face_recognition.load_image_file(pic_path)
face_landmarks_list = face_recognition.face_landmarks(image)
print(f"I found {
len(face_landmarks_list)} face<s> in this photograph."))
pil_image = Image.fromarray(image)
# Traverse the face , draw
for face_landmarks in face_landmarks_list:
demo = ImageDraw.Draw(pil_image, 'RGBA')
demo.polygon(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 128))
demo.polygon(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 128))
# demo.line(face_landmarks['left_eyebrow'], fill=(68, 54, 39, 150), width=2)
# demo.line(face_landmarks['right_eyebrow'], fill=(68, 54, 39, 150), width=2)
demo.polygon(face_landmarks['top_lip'], fill=(150, 0, 0, 128))
# demo.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))
demo.polygon(face_landmarks['bottom_lip'], fill=(150, 0, 0, 128))
# demo.line(face_landmarks['top_lip'], fill=(150, 0, 0, 64), width=2)
# demo.line(face_landmarks['bottom_lip'], fill=(150, 0, 0, 64), width=2)
demo.polygon(face_landmarks['left_eye'], fill=(255, 255, 255, 30))
demo.polygon(face_landmarks['right_eye'], fill=(255, 255, 255, 30))
# pil_image.save("1_.jpg") # have access to save Method to save
pil_image.show()
demoFunc2("6.png")
I found the use of line The method is a little strange after tracing , So I made a deletion here , You can also try it yourself , The color can also follow RGBA Try to change by yourself , I continue to use Peng Yuyan here to show you haha
Result display
At the same time, I also packed it to my github In the , If you want to play, you can also download it directly .
边栏推荐
- How can programmers resist the "three poisons" of "greed, anger and ignorance"?
- QML和QWidget混合开发(初探)
- VPP性能测试
- 《2022年中国银行业RPA供应商实力矩阵分析》研究报告正式启动
- 10個 Istio 流量管理 最常用的例子,你知道幾個?
- [Zhao Yuqiang] deploy kubernetes cluster with binary package
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
- Interface idempotency
- 【可调延时网络】基于FPGA的可调延时网络系统verilog开发
- HotSpot VM
猜你喜欢
Solution of storage bar code management system in food industry
math_ Derivative function derivation of limit & differential & derivative & derivative / logarithmic function (derivative definition limit method) / derivative formula derivation of exponential functi
题解:《单词覆盖还原》、《最长连号》、《小玉买文具》、《小玉家的电费》
1291_Xshell日志中增加时间戳的功能
C (XXIX) C listbox CheckedListBox Imagelist
Développement d'un module d'élimination des bavardages à clé basé sur la FPGA
Figure application details
Record the pit of NETCORE's memory surge
About some basic DP -- those things about coins (the basic introduction of DP)
How to solve the problem of slow downloading from foreign NPM official servers—— Teach you two ways to switch to Taobao NPM image server
随机推荐
2/10 parallel search set +bfs+dfs+ shortest path +spfa queue optimization
About some basic DP -- those things about coins (the basic introduction of DP)
pd. to_ numeric
Overturn your cognition? The nature of get and post requests
Hashcode and equals
题解:《单词覆盖还原》、《最长连号》、《小玉买文具》、《小玉家的电费》
[FPGA tutorial case 11] design and implementation of divider based on vivado core
Codeforces Round #770 (Div. 2) B. Fortune Telling
软考 系统架构设计师 简明教程 | 总目录
Yyds dry goods inventory web components series (VII) -- life cycle of custom components
【leetcode】1189. Maximum number of "balloons"
图应用详解
Database, relational database and NoSQL non relational database
Custom event of C (31)
[Zhao Yuqiang] deploy kubernetes cluster with binary package
Comprehensive ability evaluation system
Interface idempotency
2/13 qaq~~ greed + binary prefix sum + number theory (find the greatest common factor of multiple numbers)
What is the difference between gateway address and IP address in tcp/ip protocol?
MySql数据库root账户无法远程登陆解决办法