首页 > 分享 > 【AI创造营】基于PaddleHub与Jetson Nano的智能宠物看护助手

【AI创造营】基于PaddleHub与Jetson Nano的智能宠物看护助手

基于PaddleHub与Jetson Nano的智能宠物看护助手 一、效果展示 二、实现思路 1.训练一个适用于该需求的模型 2.使用PaddleHub预训练模型 三、数据采集 硬件部分 代码部分 四、数据处理 1.解压数据集 2.统一存储 3.划分训练集和验证集 4.定义数据集 五、模型组网 1.使用resnet搭建PetsNet 2.查看模型结构 3.模型配置 六、训练及评估 1.模型训练 2.全流程评估 3.模型保存 七、将模型部署到Jetson Nano 1.安装PaddleHub 2.下载模型 3.获取实时视频流 4.模型预测 5.回传照片 6.客户端收到邮件

本项目部署于Jetson Nano,当发现摄像头前宠物时,设备会立即拍照,为您抓拍精彩时刻

一、效果展示

更快更强更高效快速的目标检测算法PP-YOLO,PaddleHub只需1行代码即可实现调用!!!

【AI创造营 · 第一期】比赛链接:https://aistudio.baidu.com/aistudio/competition/detail/72

b站视频链接:https://www.bilibili.com/video/BV1qy4y177vq

【AI创造营】基于PaddleHub快速实现目标检测算法PP-YOLO

二、实现思路

要让Jetson Nano识别出宠物,需要深度学习模型的辅助,有两种思路,一个是自己训练一个模型,另一种思路是使用PaddleHub的预训练模型。

以下是我在做智能宠物看护助手时想到的一些问题以及相应的解决方案。

1.训练一个适用于该需求的模型

机器能学会认识宠物吗?

答:就跟人一样,机器通过学习宠物的特征(浓密的绒毛、长长的胡须、高耸的耳朵、圆圆的小脸等特征)来认识宠物。


分类任务只有一个类别,要怎么做?

答:增加一个无宠物的类别,即采集没有宠物的背景图片,这样就变成了二分类任务。

选择什么算法?为什么

答:本项目中,我选择使用Ghost Module替换传统的卷积层,以此来提高识别的速度。因为本项目主要是抓拍宠物的照片,因此对于识别的准确率不需要有太高的要求,换句话说就是放弃准确率而选择识别速率。

抓拍到宠物照片后,如何发送给用户?

答:Python的smtplib库提供了一种很方便的途径来发送电子邮件,因此可以以电子邮件的方式将抓拍到的照片保存,并以附件的形式发送给用户。

2.使用PaddleHub预训练模型

PaddleHub是飞桨深度学习平台下的预训练模型应用管理工具。旨在为开发者提供丰富的、高质量的、直接可用的预训练模型。无需深度学习背景、无需数据与训练过程,可快速使用AI模型。预训练模型涵盖CV、NLP、Audio、Video主流四大品类,支持一键预测、一键服务化部署和快速迁移学习。全部模型均已开源并提供下载,可离线运行。

截止2020年底,PaddleHub已经有两百多个预训练模型,这个数量还在不断增加,PaddleHub预训练模型的使用方法也很简单,一行代码即可调用预训练模型,下面是一些应用案例:

【PaddleHub模型贡献】一行代码实现从彩色图提取素描线稿 当字幕君的文档丢失了——七年期限 还在担心发朋友圈没文案?快来试试看图写诗吧! 基于PaddleHub的教师节祝福语生成 基于PaddleHub的中秋节看图写诗 手把手教你使用预训练模型ernie_gen进行finetune自己想要的场景 从零开始将PaddleHub情感倾向性分析模型部署至云服务器

更多资料可参考:

PaddleHub官网:https://www.paddlepaddle.org.cn/hub PaddleHub源码仓库:https://github.com/PaddlePaddle/PaddleHub

三、数据采集

硬件部分

使用英伟达的Jetson Nano以及树莓派摄像头采集数据。

Jetson Nano初体验之写入官方Ubuntu镜像 Jetson Nano初体验之实现人脸检测(内含更换默认镜像源的方法)

代码部分

使用openCV保存图片,以下代码请在Jetson Nano上运行:

import os import cv2 import numpy as np import time path = os.path.split(os.path.realpath(__file__))[0] save_name="img" def mkdir(path): if not os.path.exists(path): os.makedirs(path) print("----- new folder -----") else: print('----- there is this folder -----') def gstreamer_pipeline( capture_width=1280, capture_height=720, display_width=1280, display_height=720, framerate=60, flip_method=0, ): return ( "nvarguscamerasrc ! " "video/x-raw(memory:NVMM), " "width=(int)%d, height=(int)%d, " "format=(string)NV12, framerate=(fraction)%d/1 ! " "nvvidconv flip-method=%d ! " "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! " "videoconvert ! " "video/x-raw, format=(string)BGR ! appsink" % ( capture_width, capture_height, framerate, flip_method, display_width, display_height, ) ) def save_image_process(): mkdir(path+"/PetsData") mkdir(path+"/PetsData/"+save_name) print(gstreamer_pipeline(flip_method=0)) cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER) if cap.isOpened(): window_handle = cv2.namedWindow("Camera", cv2.WINDOW_AUTOSIZE) imgInd = 0 # Window while cv2.getWindowProperty("Camera", 0) >= 0: ret_val, img = cap.read() cv2.imshow("Camera", img) cv2.imwrite(path+"/PetsData/"+save_name+"/{}.jpg".format(imgInd), img) print("imgInd=",imgInd) imgInd+=1 time.sleep(0.5) # This also acts as keyCode = cv2.waitKey(30) & 0xFF # Stop the program on the ESC key if keyCode == 27: break cap.release() cv2.destroyAllWindows() else: print("Unable to open camera") if __name__ == '__main__': save_image_process()

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

四、数据处理

1.解压数据集

!unzip -oq /home/aistudio/data/data69950/PetsData.zip 1

2.统一存储

创建临时文件夹temporary,将所有图片保存至该文件夹下

# 将图片整理到一个文件夹,并统一命名 import os from PIL import Image categorys = ['pets', 'other'] if not os.path.exists("temporary"): os.mkdir("temporary") for category in categorys: # 图片文件夹路径 path = r"PetsData/{}/".format(category) count = 0 for filename in os.listdir(path): img = Image.open(path + filename) img = img.resize((1280,720),Image.ANTIALIAS) # 转换图片,图像尺寸变为1280*720 img = img.convert('RGB') # 保存为.jpg格式才需要 img.save(r"temporary/{}{}.jpg".format(category, str(count))) count += 1

123456789101112131415161718

用0和1分别代表图片上有宠物和无宠物。

# 获取图片路径与图片标签 import1

相关知识

NVIDIA Jetson 月度项目:通过声音识别鸟类
国外一所大学研发自动狗粮投食机 可实现远程训狗狗
一种基于人工智能的智能宠物训练助手系统的制作方法
如何从零开始打造一款智能宠物摄像机:硬件配置与选型指南
智能家居宠物看护系统的设计与实现
(本科论文)宠物看护助手(37页)
智能AI一键生成:个性化萌宠创作助手,满足你的全场景需求
OpenCat:开源四足机器人宠物框架
养宠也能用上AI!萤石网络重磅发布多款新品
智能宠物健康监测:未来宠物福祉的新关怀

网址: 【AI创造营】基于PaddleHub与Jetson Nano的智能宠物看护助手 https://m.mcbbbk.com/newsview522805.html

所属分类:萌宠日常
上一篇: 基于使用 XIAO BLE Se
下一篇: 佳明Garmin TT 15X