【计算机视觉】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()
相关推荐
热心不起来的市民小周20 分钟前
基于 RoBERTa + 多策略优化的中文商品名细粒度分类
人工智能·分类·数据挖掘
却道天凉_好个秋33 分钟前
OpenCV(三):保存文件
人工智能·opencv·计算机视觉
aneasystone本尊39 分钟前
深入 Dify 应用的会话流程之流式处理
人工智能
深栈39 分钟前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn
欧阳码农1 小时前
忍了一年多,我做了一个工具将文章一键发布到多个平台
前端·人工智能·后端
IT_陈寒1 小时前
Python性能优化:5个让你的代码提速300%的NumPy高级技巧
前端·人工智能·后端
飞哥数智坊1 小时前
AI 写代码总跑偏?试试费曼学习法:让它先复述一遍!
人工智能·ai编程
东坡肘子1 小时前
Sora 2:好模型,但未必是好生意 | 肘子的 Swift 周报 #0105
人工智能·swiftui·swift
yzx9910131 小时前
国庆科技感祝福:Python 粒子国旗动画
开发语言·人工智能·python
扶尔魔ocy2 小时前
【QT常用技术讲解】opencv实现摄像头图像检测并裁剪物体
开发语言·qt·opencv