树莓派应用--AI项目实战篇来啦-13.OpenCV摄像头云台人脸追踪

server/2024/10/17 6:11:55/

1. OpenCV 舵机云台人脸追踪介绍

        本项目内容和前面学习的云台追踪物体是一样的原理,只是这里把追踪物体修改成追踪人脸,在前面的内容中,我们已经学习了二维云台的物体追踪,理解了二维云台对物体追踪的PID控制模型,在本案例中,把物体追踪直接换成前面所学习的Haar分类器进行OpenCV二维云台人脸追踪,只需要把物体识别的代码换成 Haar 分类器识别人脸即可。

2.源程序代码

# 载入必要的库
import cv2
import numpy as np
from adafruit_servokit import ServoKit
import timekit = ServoKit(channels=16)pan =  90
tilt = 90
# 初始化位置
kit.servo[0].angle=pan
kit.servo[1].angle=tilt# 线程函数操作库
import threading # 线程
import ctypes
import inspect# 线程结束代码
def _async_raise(tid, exctype):tid = ctypes.c_long(tid)if not inspect.isclass(exctype):exctype = type(exctype)res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))if res == 0:raise ValueError("invalid thread id")elif res != 1:ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)raise SystemError("PyThreadState_SetAsyncExc failed")def stop_thread(thread):_async_raise(thread.ident, SystemExit)def bgr8_to_jpeg(value, quality=75):return bytes(cv2.imencode('.jpg', value)[1])import traitlets
import ipywidgets.widgets as widgets
from IPython.display import displayframe_img = widgets.Image(format='jpeg', width=320, height=240)
display(frame_img)import libcamera
from picamera2 import Picamera2picamera = Picamera2()
config = picamera.create_preview_configuration(main={"format": 'RGB888', "size": (320, 240)},raw={"format": "SRGGB12", "size": (1920, 1080)})
config["transform"] = libcamera.Transform(hflip=0, vflip=1)
picamera.configure(config)
picamera.start()dispW  = 320
dispH = 240# 载入人脸和眼睛的HAAR 模型
face_cascade = cv2.CascadeClassifier('./images/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('./images/haarcascade_eye.xml')def Video_display():global panglobal tiltwhile True: frame = picamera.capture_array()gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray,1.3,5)for(x,y,w,h) in faces:cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)Xcent = x + w/2Ycent = y + h/2errorPan  = Xcent - dispW/2 errorTilt = Ycent - dispH/2if abs(errorPan)>15:pan=pan-errorPan/50if abs(errorTilt)>15:tilt=tilt-errorTilt/50if pan > 180:pan = 180print("Pan out of Range")if pan < 0:pan = 0print("pan Out of Range")if tilt > 180:tilt = 180print("Pan out of Range")if tilt < 0:tilt = 0print("pan Out of Range")kit.servo[0].angle=180-pankit.servo[1].angle=180-tiltroi_gray = gray[y:y+h, x:x+w]roi_color = frame[y:y+h, x:x+w]        eyes = eye_cascade.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)          frame_img.value = bgr8_to_jpeg(frame)cap.release()# 开始线程
t = threading.Thread(target=Video_display)
t.setDaemon(True)
t.start()# 结束线程
stop_thread(t)


http://www.ppmy.cn/server/132415.html

相关文章

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…

【UML】一个UML学习的还不错的几个帖子

https://segmentfault.com/a/1190000042775634 寂然解读设计模式 - UML类图&类的六大关系-阿里云开发者社区

【Spring】Spring实现加法计算器和用户登录

加法计算器 准备工作 创建 SpringBoot 项目&#xff1a;引入 Spring Web 依赖&#xff0c;把前端的页面放入项目中 **<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport"…

量化高频数据获取以及策略分析

标题&#xff1a;量化高频价差交易&#xff1a;技术与策略的完美结合 一、概述 量化高频价差交易&#xff0c;作为金融市场的一种新兴交易方式&#xff0c;以其独特的优势在众多交易策略中脱颖而出。本文将探讨量化高频价差交易的原理、策略及其在实战中的应用&#xff0c;为广…

爬虫逆向学习(十二):一个案例入门补环境

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 反爬前置信息 站点&#xff1a;aHR0cDovLzEyMC4yMTEuMTExLjIwNjo4MDkwL3hqendkdC94anp3ZHQvcGFnZXMvaW5mby9wb2xpY3k 接口&#xff1a;/xjzwdt/rest/xmzInfoDeliveryRest/getInfoDe…

线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)

游戏陪玩系统源码陪玩小程序源码搭建基于PHP&#xff0b;MySQL陪玩系统app源码陪玩系统定制开发服务、成品陪玩系统源码 系统基于Nginx或者Apache PHP7.3 数据库mysql5.6 前端为uniapp-vue2.0 后端为thinkphp6 有域名授权加密&#xff0c;其他开源可二开 演示源码下载 开…

学习 Python 的途径

学习 Python 有许多途径,以下是一些常见的学习方法: 1. 阅读官方文档: Python 官方文档是学习和参考 Python 的权威资源,详细介绍了 Python 的语法、标准库、以及各种高级特性。文档包含教程、语言参考和库参考等内容。 - [Python 官方文档](https://docs.python.org/z…

基于SpringBoot的宇宙动漫网站系统【附源码】

基于SpringBoot的宇宙动漫网站系统 效果如下&#xff1a; 系统首页界面 用户注册界面 动漫信息页面 公告信息页面 管理员登录主页面 管理员主界面 动漫信息管理界面 订阅信息管理界面 研究背景 随着互联网技术的飞速发展&#xff0c;动漫文化在全球范围内迅速传播&#xff0…