前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Jetson TX2上用Python捕获摄像头影像,并用Caffe进行推理

如何在Jetson TX2上用Python捕获摄像头影像,并用Caffe进行推理

作者头像
GPUS Lady
发布2018-04-02 15:22:37
1.9K0
发布2018-04-02 15:22:37
举报
文章被收录于专栏:GPUS开发者GPUS开发者

本文转载自JK Jung的帖子:https://jkjung-avt.github.io/tx2-camera-caffe/ 如果有侵犯到贴主利益,请立刻跟我联系。

之前,贴主分享了一个python脚本,它可以用来在Jetson TX2上捕捉和显示来自相机(IP、USB或板载)的实时视频。在这里,贴主继续扩展了这个脚本,并展示了如何在捕获的相机映像上运行Caffe图像分类(推断),这些都是在python代码中完成的。这tegra-cam-caffe.py sample应该适合快速验证您的新训练的Caffe图像分类模型,用于原型,或者用实时摄像机输入构建Caffe演示程序。

我主要是在Jetson TX2的python 3测试了代码,不过我认为在Jetson TX1上用Python 2也是可以的。

1

准备工作

1.参考前面的帖子:如何利用Python在Jetson TX2上抓取和显示摄像头影像 ,确认tegra-cam.py 在你的Jetson TX2上运行是OK的。

2.在Jetson TX2安装Caffe,你可以使用BVLC Caffe, NVIDIA Caffe 或者其它你喜欢的Caffe.

3.我的python代码假设构建的Caffe代码位于/ home/nvidia/ Caffe。为了使用defaultbvlc_reference_caffenet模型运行脚本,您必须下载预先训练的权重和标签:

$ cd /home/nvidia/caffe$ ./scripts/download_model_binary.py ./models/bvlc_reference_caffenet$ ./data/ilsvrc12/get_ilsvrc_aux.sh

2

参考

1.How to classify images with Caffe’s python API:https://github.com/BVLC/caffe/blob/master/examples/00-classification.ipynb

2.How to calculate mean pixel values for mean subtraction:https://devtalk.nvidia.com/default/topic/1023944/loading-custom-models-on-jetson-tx2/#5209641

3

如何做

1.下载 tegra-cam-caffe.py 源代码从我的GitHubGist:https://gist.github.com/jkjung-avt/d408aaabebb5b0041c318f4518bd918f ((因为顾虑到很多人访问不了,我把代码copy到这里:http://www.jetsoner.com/thread-148-1-1.html))

2.dump帮助信息:

$ python3 tegra-cam-caffe.py --help

3.使用默认的bvlc_reference_caffenetmodel使用Jetson机载相机(python程序的默认行为)来进行Caffe图像分类。

$ python3 tegra-cam-caffe.py

4.使用USB网络摄像头 /dev/video1 ,同时分辨率设置为 1280x720.

$ python3 tegra-cam-caffe.py --usb --vid 1 --width 1280 --height 720

5.或者使用IP摄像头.

$ python3 tegra-cam-caffe.py --rtsp --uri rtsp://admin:XXXXXX@192.168.1.64:554

6.用板载摄像机对不同的Caffe模型进行图像分类。

  1. $ python3 tegra-cam-caffe.py --prototxt XXX.prototxt \
  2. --model YYY.caffemodel \
  3. --labels ZZZ.txt \
  4. --mean UUU.binaryproto

当我用一个USB相机和一个菠萝图片测试代码时,默认的bvlc_reference_caffenet说它百分之百肯定(概率~ 1.0)图像是一个菠萝!

接下来,我试着用一种受过NVIDIA数字训练的Caffe模型进行测试。更具体地说,我用“Caltech 101”数据集训练了一个AlexNet,正如在NVIDIA QuikLabs课程中提到的那样:图像分类与数字。这个免费的quicklab课程非常不错的一点是,你可以使用NVIDIA数字的K520 GPU云服务器2小时的访问,完全免费。通过“Caltech 101”数据集成功地培训了一个AlexNet模型(我刚刚训练了30个具有普通SGD和默认学习速率的模型),然后我下载了最后一个培训时代的模型快照:20171022 - 025612-7b04_epoch_30.0.tar.gz。这是快照tarball中的文件列表。

info.json

labels.txt

mean.binaryproto

original.prototxt

snapshot_iter_1620.caffemodel

solver.prototxt

train_val.prototxt

然后我用下面的命令验证了这个训练的Caffe模型。在训练过程中,日志显示这个训练有素的模型的精度仅在67.5%左右(用于对101个对象分类)。在测试时,我确实发现这个模型在许多测试映像上工作得很差。但无论如何,我设法让这个模型正确地将“pegion”的图片分类。

  1. $ python3 ./tegra-cam-caffe.py --usb --vid 1 --crop \
  2. --prototxt alexnet/deploy.prototxt \
  3. --model alexnet/snapshot_iter_1620.caffemodel \
  4. --labels alexnet/labels.txt \
  5. --mean alexnet/mean.binaryproto \
  6. --output softmax

顺便说一下,如果你想用一个为灰度图像输入(例如LeNet)训练的Caffe模型来运行代码,你就必须修改python代码,将输入的相机图像转换成灰度,然后再将它们送到Caffe transformer进行处理。比如: gray = cv2.cvtColor(img_crop, cv2.COLOR_BGR2GRAY) and thennet.blobs["data"].data[...] = transformer.preprocess("data", gray).

我没有使用各种相机或咖啡模型对这段代码做过很多测试。如果您发现代码有问题,请随时告诉我,我将尽快查看。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档