高中生
最后登录1970-1-1
在线时间 小时
注册时间2023-11-29
|
本帖最后由 微信用户-pskVoU 于 2023-12-20 22:37 编辑
一、目标
鲁班猫没有猫怎么行?必须AI撸,基于野火鲁班猫2开发板实现宠物的识别功能。
二、软硬件介绍
硬件:鲁班猫2(4+32G)+720P USB摄像头。
软件:Ubuntu 22.04.3 LTS + openCV + application
三、原理
CascadeClassifier,是OpenCV中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像素和减去白色矩形像素和来表示这个模版的特征值。
级联分类器作为objdetect模块中用来做目标检测的级联分类器的一个类,可以帮助检测例如车牌、眼睛、人脸等物体。原理就是判别某个物体是否属于某个分类。以人脸为例,可以把眼睛、鼻子、眉毛、嘴巴等属性定义成一个分类器,脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构,如果检测到一个模型符合定义人脸的所有属性,那么就认定它是一张人脸。
四、设计与实现
宠物识别设计的业务流程如下:
1.加载级联分类器;
2.从视频中取帧,导出图像;
3.图像灰度化;
4.图像resize;
5.实现宠物检测。
其具体架构如下:
准备工作:首先,在鲁班猫2开发板安装openCV相关软件包:
- sudo apt install build-essential
- sudo apt install python3-distutils
- sudo apt install python3-pip
- sudo pip3 install opencv-python
- sudo pip3 install opencv-contrib-python
复制代码 然后,在https://github.com/opencv/opencv/tree/master/data/haarcascades 下载haarcascade_frontalcatface.xml 或者 haarcascade_frontalcatface_extended.xml 特征文件,并上传至鲁班猫2开发板。
具体实现的代码如下:
- # OpenCV program to detect cat face in real time
- # import libraries of python OpenCV
- # where its functionality resides
- import cv2
- # load the required trained XML classifiers
- # https://github.com/Itseez/opencv/blob/master/
- # data/haarcascades/haarcascade_frontalcatface.xml
- # Trained XML classifiers describes some features of some
- # object we want to detect a cascade function is trained
- # from a lot of positive(faces) and negative(non-faces)
- # images.
- face_cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
- # capture frames from a camera
- cap = cv2.VideoCapture(9)
- # loop runs if capturing has been initialized.
- while 1:
- # reads frames from a camera
- ret, img = cap.read()
- # convert to gray scale of each frames
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- # Detects faces of different sizes in the input image
- faces = face_cascade.detectMultiScale(gray)
- #faces = face_cascade.detectMultiScale(gray, 1.3, 5)
- for (x,y,w,h) in faces:
- # To draw a rectangle in a face
- cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
- roi_gray = gray[y:y+h, x:x+w]
- roi_color = img[y:y+h, x:x+w]
- # Display an image in a window
- cv2.imshow('img',img)
- # Wait for Esc key to stop
- k = cv2.waitKey(30) & 0xff
- if k == 27:
- break
- # Close the window
- cap.release()
- # De-allocate any associated memory usage
- cv2.destroyAllWindows()
复制代码
五、测试
接上摄像头后,运行python脚本,此时摄像头灯亮起来,如果有猫经过,则能识别出来。
cat@lubancat:~$ python3 cat.py
arm_release_ver of this libmali is 'g2p0-01eac0', rk_so_ver is '4'.
具体B站视频在此:
【野火【鲁班猫】卡片电脑创意氛围赛-哔哩哔哩】 https://b23.tv/HTAJMAX
六、总结
最后,感谢野火组织的活动,在准备作品的这几个月里,通过查找资料,学习了鲁班猫2开发板的使用和图像识别等知识,获益良多。
鲁班猫2开发板做工非常好,优秀的设计,让鲁班猫2开发板看起来像一件艺术品,提供Ubuntu固件符合潮流,RK3568 SOC功能强大,4+32G配置很赞,以后将探索更多的应用。
|
|