【计算机视觉】OpenCV实战项目- 抖音动态小表情

OpenCV实战项目- 抖音动态小表情

替换掉当前机器的文件位置即可运行:

'C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml'

'C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_eye.xml'

python 复制代码
import numpy as np
import cv2
import time
import datetime
from PIL import Image

cap = cv2.VideoCapture(0)

''' 人脸识别 '''


def getface(img):
    # 人脸识别数据
    face_cascade = cv2.CascadeClassifier(
        'C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
    # 人眼识别数据
    eye_cascade = cv2.CascadeClassifier(
        'C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_eye.xml')
    # 二值化,变为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 获取人脸识别数据
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        # 绘画人脸识别数据
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        # 根据人脸识别数据添加头像
        img = christmas(img, x, y, w, h)
    return img


def christmas(img, x, y, w, h):
    im = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 你的贴纸地址
    mark = Image.open("hat/111.png")
    height = int(w * 987 / 1024)
    mark = mark.resize((w, height))
    layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
    layer.paste(mark, (x, y - height + 100))
    out = Image.composite(layer, im, layer)
    img = cv2.cvtColor(np.asarray(out), cv2.COLOR_RGB2BGR)
    return img


videoWriter = cv2.VideoWriter('testwrite.avi', cv2.VideoWriter_fourcc(*'MJPG'), 15, (1000, 563))

while (cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        # 从新定义图片大小
        img = cv2.resize(frame, (1000, 563))

        # 添加录像时间
        # img = addtime(img)
        # 实时识别
        img = getface(img)
        # 视频显示
        cv2.imshow('frame', img)
        # 保存视频
        videoWriter.write(img)
        if cv2.waitKey(10) & 0xFF == ord('q'):
            print("退出视频")
            break
    else:
        break

cap.release()
videoWriter.release()
cv2.destroyAllWindows()
相关推荐
fthux3 小时前
装闭 RenoPit 源码解析(09):AnalysisEngine装修闭坑分析主流程
人工智能·ai·开源·github·open source·renopit
敏编程3 小时前
开源项目 NextBand:探索融合健康传感、语音交互与 AI Agent 的下一代可穿戴设备
人工智能
ovO3 小时前
我按下“发送”之后:DeepSeek Harness 如何把一次请求变成 1,177 个增量片段
人工智能·开源·deepseek
昨日之日20064 小时前
LTX-2.5:更清晰、更可控、同步音画、多镜头连贯的AI视频神器
人工智能·音视频
九硕智慧建筑一体化厂家4 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
江厌014 小时前
本地部署DeepSeek显卡怎么选?我把显存计算公式和实测记录写下来了
人工智能·百度·联想工作站·代理商推荐·渠道对比·工作站
小席是个热心肠4 小时前
AI相关的自我学习
java·人工智能·学习
FII工业富联科技服务4 小时前
工业AI自治的演进趋势:从内容生成到Agent驱动的工厂运营范式转变
人工智能
云和数据.ChenGuang4 小时前
fastapi的参数剖析
人工智能·深度学习·机器学习·语言模型·状态模式·fastapi
日常筹谋记4 小时前
技术研究:数据中心HVDC系统直流保护配合与ABB电气产品参数解析
人工智能·创业创新·业界资讯