在本教程中,将重点介绍如何在NVIDIA Jetson设备上部署定制的计算机视觉模型,特别是车牌识别模型。虽然主要关注车牌的检测,但本指南也提供了将自定义计算机视觉模型部署到边缘设备上的端到端指导。在某些情况下,例如模型推理需要实时通知智能系统,或者模型推理必须离线进行,这可能需要将模型部署到边缘设备,如NVIDIA Jetson。
使用Roboflow上的公共车牌检测数据集来训练车牌检测器。为了在Jetson上训练和部署模型,使用Roboflow Train。完成模型训练后,将获得一个端点和api_key,这些将允许在NVIDIA Jetson上下载并提供模型服务。
在开始使用Jetson之前,需要按照几个步骤来设置相机。在此项目中使用的相机是Raspberry Pi Camera V2。注意:Raspberry Pi Camera V2可能配备IMX219传感器或OV5647传感器。请确保购买的相机配备了IMX219传感器,因为NVIDIA Jetson不支持OV5647传感器。
在连接Jetson之前,请确保Jetson完全关闭,以避免对Jetson或相机造成任何损坏。在Jetson上,仔细抬起覆盖在MIPI CSI-2相机连接器端口上的塑料覆盖物,如下所示:
ls -ltrh /dev/video*
如果相机连接正确,应该收到类似于下面的输出:
crw-rw----+ 1 root video 81, 0 May 26 08:55 /dev/video0
Roboflow的托管API是使用在Roboflow上训练的模型的一种多功能方式,它使用最先进的基础设施,根据需要自动扩展。然而,托管API的主要限制是,在带宽有限或生产数据不能扩展到本地网络之外的情况下,可能不理想。Roboflow的推理服务器是使用Roboflow托管API的替代选项,它考虑了托管API的限制。要安装Roboflow推理服务器,可以拉取docker容器:
sudo docker pull roboflow/inference-server:jetson
然后使用以下命令启动推理服务器:
sudo docker run --net=host --gpus all roboflow/inference-server:jetson
之后,终端输出应该类似于这样,并且将安装并启动本地推理服务器。
在开始使用Jetson的车牌检测项目之前,建议先阅读前面的博客。首先,需要确保适当地安装Tensorflow。首先,需要克隆仓库并切换到适当的分支:
git clone https://github.com/roboflow-ai/roboflow-jetson-license-plate.git
git checkout nvidia-jetson
克隆仓库后,如果计划使用Roboflow的推理服务器,需要打开roboflow_config.json文件。它应该看起来像这样:
{
"__comment1": "通过Roboflow获取这些值",
"ROBOFLOW_API_KEY": "xxxxxxxxxx",
"ROBOFLOW_MODEL": "xx-name--#",
"ROBOFLOW_SIZE": 416,
"LOCAL_SERVER": false,
"__comment2": "以下仅infer-async.py需要",
"FRAMERATE": 24,
"BUFFER": 0.5
}
要使用Jetson推理服务器,将"LOCAL_SERVER"值更改为true,并分别在"ROBOFLOW_API_KEY"和"ROBOFLOW_MODEL"中输入RoboflowAPI密钥和模型。
接下来,需要安装特定版本的Tensorflow及其依赖项。首先,安装所需的系统包:
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
安装并升级pip3并安装Tensorflow的依赖项(这些需要作为root安装):
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools==49.6.0
sudo pip3 install -U numpy==1.19.4 future==0.18.2 mock==3.0.5 h5py==2.10.0 keras_preprocessing==1.1.1 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
然后可以按照以下方式安装Tensorflow:
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflow
注意:这将安装一个与Jetpack 4.5兼容的Tensorflow版本。要为不同版本安装Tensorflow,必须更改额外的索引url。例如,Jetpack版本4.4的额外索引url将是:
https://developer.download.nvidia.com/compute/redist/jp/v44
使用虚拟环境安装项目的其余依赖项:
cd roboflow-jetson-license-plate
sudo apt-get install python3-venv
python3 -m pip install --user virtualenv
python3 -m venv env --system-site-packages
source env/bin/activate
pip3 install -r requirements.txt
然后运行main.py文件:
python3 main.py
就这样,应该可以通过Roboflow推理服务器在Jetson上运行Roboflow模型了。
在部署过程中,遇到了两个主要问题:
OSError: library geos_c
OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']
这个错误表明Jetson缺少一个系统包来正常工作。可以通过了解更多关于这个错误的信息。可以通过安装适当的系统包来轻松解决这个错误:
sudo apt-get install libgeos-dev
ImportError: Cannot allocate memory in static TLS block
ImportError: /usr/lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block
要修复这个错误,需要更新LD_PRELOAD环境变量。可以通过以下方式做到这一点:
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1