使用树莓派4 + Coral USB加速器实现姿态检测

2024-10-22 08:30   重庆  

点击下方卡片,关注“机器视觉与AI深度学习

视觉/图像重干货,第一时间送达!

    在这篇文章中,我们将探讨如何使用 Raspberry Pi 4 和 Coral USB 加速器设置姿势检测 AI 系统。
    姿势检测 AI 是一款引人入胜的应用程序,它允许计算机实时识别和分析人体姿势,为健身、游戏、安全等领域的应用开辟了广泛的可能性。通过将 Raspberry Pi 4 的强大功能与 Coral USB 加速器相结合,您可以构建一个经济高效的姿势检测系统。让我们开始吧!
硬件和软件要求
    • Raspberry Pi 4(建议 2GB 或更高)
    • Coral USB 加速器
    • 适用于 Raspberry Pi 的兼容 USB-C 电源
    • microSD 卡(16GB 或更高)
    • Raspberry Pi 操作系统(Raspbian 版本:11(bullseye)— 64)
    • Raspberry Pi 相机模块 v3
步骤 1:设置 Raspberry Pi
    • 在您的电脑上下载并安装 Raspberry Pi Imager。
    • 将 microSD 插入读卡器并打开 Raspberry Pi Imager
    • 我选择 Raspberry PI 4 作为设备,选择 Raspberry Pi OS (Bullseye) 作为基础镜像。
    选择 bullseye 是因为它附带 Python 3.9,这是 PyCoral 库当前支持的版本

    选择存储并转到下一步。

    单击编辑设置。输入您想要为您的操作系统设置的用户名和密码。

    另外在服务中启用 ssh 并进行密码验证

    现在单击“保存”并完成其余步骤(按“下一步”并写入)
    将图像写入 microSD 卡后,将卡插入 Raspberry Pi。
    使用 USB-C 电源为 Raspberry Pi 供电。
步骤 2:安装必备库
    我们需要先安装 OpenCV、Tensorflowlite 和 Coral USB Accelerator 库。逐个运行下面的所有代码来安装所有必备库
sudo apt-get update sudo apt-get -y upgradesudo apt-get -y install libjpeg-dev libtiff5-dev libjasper-dev libpng12-devsudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-devsudo apt-get -y install libxvidcore-dev libx264-devsudo apt-get -y install qt4-dev-tools sudo apt-get -y install libatlas-base-dev
    那么让我们安装开放的 CV(这可能需要一些时间)
pip install opencv-python

    然后我们安装 Tensorflow Lite

pip install tflite-runtime

    我们现在将安装 Coral 加速器。请记住,在安装加速器之前,请将其从 Raspberry Pi 上拔下。

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.listcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -sudo apt-get updateInstall the libedgetpu library by issuing:

    通过发出以下命令安装 libedgetpu 库:

sudo apt-get install libedgetpu1-std
    现在通过 USB 3 端口连接加速器,我们就可以开始编写代码了
步骤3:测试RasberryPi相机模块
    Raspberry pi 已创建了有关如何设置模块的教程。如果您需要任何帮助,请参阅此https://projects.raspberrypi.org/en/projects/getting-started-with-picamera。我们想要做的是确保我们可以捕捉。不幸的是,对于 Raspberry Pi 的 v3 模块相机,OpenCV 尚不支持。为此,我们将使用 picamera2 库(已预安装在 Raspberry Pi 操作系统中)。
from picamera2 import Picamera2
camera = Picamera2()camera.configure(picam2.create_preview_configuration(main={"format": 'XRGB8888', "size": (640, 480)}))camera.start()
image = camera.capture_array()cv2.imwrite('test.jpg', image)
    如果一切设置正确,您应该能够看到您的相机捕获图像并将其保存为“test.jpg”。
步骤4:设置姿势检测模型
    我们可以通过多种方式为边缘设备获取 ML 模型,例如:
    下载与 Coral USB Accelerator 兼容的预训练姿势检测模型。网上有各种模型可供下载。
    如果模型还不是 TensorFlow Lite 格式,请将其转换为 TensorFlow Lite 格式。
    使用 SCP、SFTP 或 USB 驱动器将转换后的模型传输到 Raspberry Pi。
    对于我们的工作,由于我们的重点是在树莓派中部署模型,我已经从互联网上下载了适当的模型并将它们保存在我的存储库https://github.com/Mujadded/pose-detect-raspberry-pi/tree/main/PoseNet/model中。
步骤5:姿势检测的Python代码
    与 PyTorch 等现代框架不同,Raspberry Pi 中的 TensorFlow 接口有点困难。pycoral 文档很有帮助,但不容易理解。为此,我尝试编写自己的引擎代码,以便在使用该模型时能够有更高层次的理解。Raspberry Pi 的代码如下:
    pose.py 这是使用模型预测姿势的外层
import cv2import PoseNet.engine.utils as utilsfrom PoseNet.engine.pose_engine import PoseEnginefrom datetime import datetime
# Model Path_MODEL_PATH = "PoseNet/model/posenet_resnet_50_416_288_16_quant_edgetpu_decoder.tflite"
# Frame shape_FRAME_WEIGHT, _FRAME_HEIGHT = 1024, 768
# Threshold of the accuracy_THERESHOLD = 0.50
def detect_pose(callback_function, quit_on_key=True): # Initating Interpreter engine = PoseEngine(_MODEL_PATH)
# Initiating camera instance camera = utils.init_camera(_FRAME_WEIGHT, _FRAME_HEIGHT)
# Initialize frame rate calculation frame_rate_calc = 1 freq = cv2.getTickFrequency()
# Define the codec and create VideoWriter object fourcc = cv2.VideoWriter_fourcc('F','M','P','4') video_name= f"./PoseNet/captured_video/{datetime.today().strftime('%Y%m%d%H%M%S')}.avi"
# FPS for recording video. Setting 6 as the real fps is 6 to 7 fps = 6.0 # Video Recorder instance out = cv2.VideoWriter(video_name,fourcc, fps, (_FRAME_WEIGHT, _FRAME_HEIGHT))
while True: # Grab frame from video stream image = camera.capture_array()
# Start timer (for calculating frame rate) t1 = cv2.getTickCount()
# Getting the input details the model expect _, src_height, src_width, _ = engine.get_input_tensor_shape()
# The main Magic is happening here poses, _ = engine.DetectPosesInImage(image)
# Draw the lines in the keypoints output_image = utils.draw_keypoints_from_keypoints(poses, image, _THERESHOLD, src_width, src_height)
# Converting the image from 640x480x4 to 640x480x3 output_image=cv2.cvtColor(output_image, cv2.COLOR_BGRA2BGR) out.write(output_image)
# flipping the image for display output_image = cv2.flip(output_image, 1)
# Draw framerate in corner of frame # Calculate framerate t2 = cv2.getTickCount() time1 = (t2-t1)/freq frame_rate_calc= 1/time1
# Adding the FPS Text to the output cv2.putText( output_image, 'FPS: {0:.2f}'.format(frame_rate_calc), (30,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,0), 2, cv2.LINE_AA )
# Call back function calling here with the image callback_function(output_image)
# Key to quite display if cv2.waitKey(1) == ord('q') and quit_on_key: break
# Clean up out.release() cv2.destroyAllWindows()
    所有代码都可以在这个存储库中找到https://github.com/Mujadded/pose-detect-raspberry-pi
结果
    正如你所看到的,Raspberry Pi 成功地检测出了真实的姿态

—THE END—

觉得有用,麻烦给个赞和在看 

机器视觉与AI深度学习
专注于机器视觉、AI、深度学习等技术最新资讯、实战内容及应用案例的分享,交流!
 最新文章