香橙派(OrangePi)上利用OpenCv-Python实现人脸识别
【摘要】 背景作为人脸识别的应用,数据存在的人脸信息需要云端支持,只靠一个客户端工作不能满足协同工作。只靠云端识别,那效率也太低了。客户端也要有起码的识别,如果用专业的客户端也是要花钱的。权衡之下,人脸Id在云端,客户端加一个人脸的基本特征识别。OpenCv是一个不错的选择,但是完全靠OpenCv准确度还不够。所以想做一个基本的人脸门槛过滤一下,通过的再到云端进一步对比。 硬件设备树莓派3B开发板一...
背景
作为人脸识别的应用,数据存在的人脸信息需要云端支持,只靠一个客户端工作不能满足协同工作。只靠云端识别,那效率也太低了。客户端也要有起码的识别,如果用专业的客户端也是要花钱的。
权衡之下,人脸Id在云端,客户端加一个人脸的基本特征识别。
OpenCv是一个不错的选择,但是完全靠OpenCv准确度还不够。所以想做一个基本的人脸门槛过滤一下,通过的再到云端进一步对比。
硬件设备
- 树莓派3B开发板一个
- 32G TF卡一个
- USB摄像头一个
软件安装
TF卡中烧录树莓派操作系统,官网下载,我的版本是“2022-09-22-raspios-bullseye-arm64.img.xz”,使用工具win32diskimager,把镜像插入。
如果有HDMI的显示屏,给树莓派接上就可以当电脑使用了,就可以方便配网。如果没有,第一次插上网线,通过IP Scan工具找到树莓派IP,就可以SSH登录了。这些基础这次先略了。
支持环境安装
- 首先更新
sudo apt-get update
sudo apt-get upgrade
- 然后安装支持插件
如果有个别提示无法安装也无所谓
sudo apt install libgraphite2-3 libatspi2.0-0 libthai0 libxcb-shm0 libxcb-render0 libswscale5 librsvg2-2 libvorbisenc2 libavutil56 libzvbi0 libgsm1 libxinerama1 libxvidcore4 libsrt1.4-gnutls libswresample3 libatk1.0-0 libvorbisfile3 libogg0 libpangoft2-1.0-0 libpgm-5.3-0 libwayland-egl1 libharfbuzz0b libpango-1.0-0 libcairo2 libva-x11-2 libwayland-cursor0 libgfortran5 libxfixes3 libgme0 libxrender1 libvorbis0a libxi6 libudfread0 libspeex1 libwebpmux3 libsodium23 libdatrie1 libatk-bridge2.0-0 libxrandr2 libbluray2 libwavpack1 libxcomposite1 libpangocairo-1.0-0 libsoxr0 libshine3 libxkbcommon0 libvdpau1 libgtk-3-0 libopus0 librabbitmq4 libgdk-pixbuf-2.0-0 libavformat58 libmpg123-0 libxdamage1 libzmq5 libopenmpt0 libatlas3-base libva2 libva-drm2 libxcursor1 libssh-gcrypt-4 libavcodec58 libwayland-client0 libcairo-gobject2 libpixman-1-0 libdrm2 libsnappy1v5 libnorm1 libopenjp2-7 libtheora0 ocl-icd-libopencl1 libtwolame0 libepoxy0 libchromaprint1 libmp3lame0
# 安装pip工具,树莓派默认已经安装了Python
sudo apt-get install python-pip3 #安装pip3
sudo pip3 -h # 检查是否安装成功
- 开始安装OpenCv-Python
sudo pip3 install opencv-python
- 出现提示文字则安装成功
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.23.4 opencv-python-4.6.0.66
- 因为人脸识别模块是单独的,所以还需要安装人脸识别
sudo pip3 install opencv-contrib-python
# 成功提示
Installing collected packages: opencv-contrib-python
Successfully installed opencv-contrib-python-4.6.0.66
- 创建一个py文件,运行以下代码试试,xml文件可以
#from ctypes import FormatError
import sys
import cv2 # openCV库
import threading # 线程模块
import time # 时间模块 用于获取系统时间等操作
import numpy as np
import base64
class Main(object):
def __init__(self) -> None:
self.cap = None
self.b_is_open = False
self.b_exit_grabbing = False
self.face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_default.xml")
self.eye_cascade = cv2.CascadeClassifier("data/haarcascade_eye.xml")
def start(self):
self.cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
#self.cap.set(cv2.CAP_PROP_FPS, 30)
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
self.cap.open(0)
if not self.cap.isOpened():
# 如果没有检测到摄像头,报错
raise Exception("Check if the camera is on.")
while self.cap.isOpened():
# 读取图像
ret, img = self.cap.read()
if not ret:
continue
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = self.face_cascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(50, 50),
flags=cv2.CASCADE_SCALE_IMAGE,
)
count = 0;
#print("Detected ", len(faces), " face")
# 标记位置
for (x, y, w, h) in faces:
roi_gray = gray[y : y + h, x : x + w]
roi_color = img[y : y + h, x : x + w]
eyes = self.eye_cascade.detectMultiScale(roi_gray)
if len(eyes) > 0:
imgFace = img[y : y + h, x : x + w]
# imgFace 上云
# 保存本地
filename = str(time.time()) + ".jpg"
cv2.imwrite("/home/lwl/Pictures/"+filename, imgFace)
count += 1
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 1)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color,(ex, ey),(ex + ew,ey + eh),(0,255,0),1)
label = "Result: Detected Faces "+str(len(faces))+", Eyes "+str(count)
print(label)
cv2.putText(img, label,(10, 20), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 0.8, (0, 0, 0),1)
cv2.imshow("window", img)
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break
self.cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
Main().start()
最终效果看起来精准度还需要提高。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)