野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1095|回复: 1

[经验\资料] 野火【鲁班猫】卡片电脑创意氛围赛(第二期)宠物识别

[复制链接]
发表于 2023-11-30 21:01:33 | 显示全部楼层 |阅读模式
本帖最后由 微信用户-pskVoU 于 2023-12-20 22:37 编辑

一、目标

鲁班猫没有猫怎么行?必须AI撸,基于野火鲁班猫2开发板实现宠物的识别功能。

二、软硬件介绍
硬件:鲁班猫2(4+32G)+720P USB摄像头。

LB0.png

软件:Ubuntu 22.04.3 LTS  + openCV + application
LB6.png

三、原理
CascadeClassifier,是OpenCV中做人脸检测的时候的一个级联分类器。并且既可以使用Haar,也可以使用LBP特征。Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像素和减去白色矩形像素和来表示这个模版的特征值。
HAAR.png
级联分类器作为objdetect模块中用来做目标检测的级联分类器的一个类,可以帮助检测例如车牌、眼睛、人脸等物体。原理就是判别某个物体是否属于某个分类。以人脸为例,可以把眼睛、鼻子、眉毛、嘴巴等属性定义成一个分类器,脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构,如果检测到一个模型符合定义人脸的所有属性,那么就认定它是一张人脸。


四、设计与实现
宠物识别设计的业务流程如下:
1.加载级联分类器;
2.从视频中取帧,导出图像;
3.图像灰度化;
4.图像resize;
5.实现宠物检测。

其具体架构如下:

LB2.png
准备工作:首先,在鲁班猫2开发板安装openCV相关软件包:
  1. sudo apt install build-essential
  2. sudo apt install python3-distutils
  3. sudo apt install python3-pip
  4. sudo pip3 install opencv-python
  5. sudo pip3 install opencv-contrib-python
复制代码
然后,在https://github.com/opencv/opencv/tree/master/data/haarcascades 下载haarcascade_frontalcatface.xml 或者 haarcascade_frontalcatface_extended.xml 特征文件,并上传至鲁班猫2开发板。

具体实现的代码如下:
  1. # OpenCV program to detect cat face in real time
  2. # import libraries of python OpenCV
  3. # where its functionality resides
  4. import cv2

  5. # load the required trained XML classifiers
  6. # https://github.com/Itseez/opencv/blob/master/
  7. # data/haarcascades/haarcascade_frontalcatface.xml
  8. # Trained XML classifiers describes some features of some
  9. # object we want to detect a cascade function is trained
  10. # from a lot of positive(faces) and negative(non-faces)
  11. # images.
  12. face_cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')

  13. # capture frames from a camera
  14. cap = cv2.VideoCapture(9)

  15. # loop runs if capturing has been initialized.
  16. while 1:

  17.     # reads frames from a camera
  18.     ret, img = cap.read()

  19.     # convert to gray scale of each frames
  20.     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  21.     # Detects faces of different sizes in the input image
  22.     faces = face_cascade.detectMultiScale(gray)
  23.     #faces = face_cascade.detectMultiScale(gray, 1.3, 5)

  24.     for (x,y,w,h) in faces:
  25.         # To draw a rectangle in a face
  26.         cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
  27.         roi_gray = gray[y:y+h, x:x+w]
  28.         roi_color = img[y:y+h, x:x+w]

  29.     # Display an image in a window
  30.     cv2.imshow('img',img)

  31.     # Wait for Esc key to stop
  32.     k = cv2.waitKey(30) & 0xff
  33.     if k == 27:
  34.         break

  35. # Close the window
  36. cap.release()

  37. # De-allocate any associated memory usage
  38. cv2.destroyAllWindows()
复制代码



五、测试
接上摄像头后,运行python脚本,此时摄像头灯亮起来,如果有猫经过,则能识别出来。
cat@lubancat:~$ python3 cat.py
arm_release_ver of this libmali is 'g2p0-01eac0', rk_so_ver is '4'.

LB5.png
具体B站视频在此:
【野火【鲁班猫】卡片电脑创意氛围赛-哔哩哔哩】 https://b23.tv/HTAJMAX

六、总结
最后,感谢野火组织的活动,在准备作品的这几个月里,通过查找资料,学习了鲁班猫2开发板的使用和图像识别等知识,获益良多。
鲁班猫2开发板做工非常好,优秀的设计,让鲁班猫2开发板看起来像一件艺术品,提供Ubuntu固件符合潮流,RK3568 SOC功能强大,4+32G配置很赞,以后将探索更多的应用。



回复

使用道具 举报

发表于 2023-12-2 16:35:04 | 显示全部楼层
真不错  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 15:24 , Processed in 0.107112 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表