IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【New direction】人脸追踪Tips 附原文代码 -> 正文阅读

[人工智能]【New direction】人脸追踪Tips 附原文代码

Face tracking

Opencv tips

1.opencv-python 模块从清华镜像导入
代码操作:打开cmd,输入下面命令。

pip install -i https://mirrors.tuna.tsinghua.edu.cn/simple  opencv-python

Tips1:PIL与CV2读取的方法不一样,注意类型,一个是ndarry另一个是np类型。
Tips2:opencv的图像矩阵与我们所见的不同,即原图像矩阵转置之后。
即为方便矩阵运算用。

Method——Adaptive embedded image tracking

1、模块加载部分:

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

2、识别框嵌入文字方法(这里我参考了别人的代码)

def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=2):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型,因为PIL与CV2读取的方法不一样,注意类型,一个是ndarry另一个是np类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建绘图对象
    draw = ImageDraw.Draw(img)
    # 嵌入字体的格式
    fontStyle = ImageFont.truetype(
        "simsun.ttc", textSize, encoding="utf-8")
    # draw对象上绘制文本
    draw.text((left, top), text, textColor, font=fontStyle)
    # 最后转换为OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

3、设计模型加载器,其内部包含定义电脑摄像头(外部摄像头的参数为0),设计加载人脸识别模型对象,并加载该对象。

capture= cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml') # 加载人脸特征库
face_cascade.load('haarcascade_frontalface_default.xml')

4、定义循环并在后台输出人脸具体信息及人脸出现个数。
Tips:图像融合方法我参考了一下论坛的,有人采用的融合方法过于复杂化,这里opencv的addWeighted方法可以将两张图片根据用户定义权重进行比例融合,其内部的计算方法就是线性函数式相加,时间复杂度较之论坛上的方法更为高效。

while (True):
    ret, frame = capture.read()  # 读取每一帧的图像
    faces = face_cascade.detectMultiScale(frame, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5))  # 检测人脸
    sum_num=0
    for (x, y, w, h) in faces:
        sum_num=sum_num+1 #对每一帧人脸计数(人脸计数器)
        focus = cv2.imread("focus.png")
        focus=cv2.resize(focus,(h,w),interpolation=cv2.INTER_NEAREST)# opencv的图像矩阵与我们所见的不同,即原图像矩阵转置之后。
        try:
            frame[ y:y + h,x:x + w] = cv2.addWeighted(focus[0:h,0:w], 0.2, frame[ y:y + h,x:x + w], 0.8, 0)#图像融合
        except cv2.error:
            continue
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 用矩形圈出人脸1
        frame=cv2ImgAddText(frame, "锁定目标 focus", x+w/4, y-40, (0, 255, 0), 20)
        print(str(x) + ' ' + str(y) + ' ' + str(w) + ' ' + str(h))

    print("当前出现"+str(sum_num)+"人")
    cv2.namedWindow('Face Recognition',0)
    cv2.imshow('Face Recognition', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

5、关闭摄像头并销毁所有opencv窗口对象。

capture.release()  # release# 摄像头
cv2.destroyAllWindows()

实验效果如下:
在这里插入图片描述
在这里插入图片描述
请添加图片描述
Vote,写的简洁一些了。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:29:07  更:2022-09-21 00:29:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:30:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码