admin 管理员组文章数量: 887021
某节嵌入式开发与应用的大作业,需要我们做一个实物出来,鉴于自己装(朦)逼(胧)心(无)理(知),接下老师配发的raspberry pi 4,准备接上摄像头,做一个图像识别。
首先拿到老师给的树莓派,满怀激动地将它组装起来,然后发现用网线和我的笔记本连接不上。。。
???
于是老师的系统有问题,https://www.raspberrypi/downloads/raspbian/ ,咱换个系统的说
我选的是第一个full的版本,当然直接选择lite轻便版的也是可以的。(因为不管哪个版本,网线+笔记本=null,所以就直接来个full,然后借隔壁大神的显示屏,沾沾福气)
怎么换系统呢,先是SDFormatter格式化SD卡,然后Win32DiskImager将下载下来Raspbian系统的img文件烧录至SD卡。
坑一:注意盘符
(个人友情提醒:看好SD卡的盘符,格式化错的话,会哭的),当然要注意系统的版本,像我的full就需要登录才可以进入desktop,所以没有显示屏的童鞋选lite或者再额外设置吧。
有的童鞋肯定疑问,有显示屏了,还需要费劲连接电脑嘛,不是多此一举嘛?
坑二:插口问题?
因为现实告诉我:raspberry pi 4 是需要hdmi转接口的,拔插多了,它就没用了(这里的疑惑也希望有大佬指点一下,为什么接线什么都没问题,却显示不出界面呢),对,用多了,它就不显示(有一种猜测是系统的问题,和硬件有冲突?)
总之,它就是不显示,所以我只能指望用通过局域网来远程操控了吧。
坑三:windows问题?
网上有很多网线和笔记本一连就可以putty上的教程,如果你的树莓派很优质的话,你可以走了,这篇文章基本没什么用了...(来自败犬的怨念),我的网线不管怎么连,树莓派的小黄灯该怎么黄就怎么黄,一点都不绿(个人觉得可能是因为企业版的网络比较严谨?本家舍友家庭版就完全没问题?也希望大佬解惑,自家电脑就是没法给树莓派分配网址,arp一点结果都没有)
网上冲浪结束以后,只能采用迂回战略,路由器直插到树莓派,电脑再连上路由器的wifi。这样同一个局域网下,互联不是很正常嘛...ping没问题,putty没问题,那就vnc吧,我可是有桌面的人啊!
vnc,一个优秀的远程控制工具软件,大家都用咧,而且vnc和ssh在我下的系统上都是自带。如果没有的话,大家自行百度怎么安装吧。
sudo raspi-config
选中Interfacing Optiojns
选中vnc(不要立即重启!)
坑四:vnc连接不上
vnc连接上了,突然,额,关机以后再开机,连接vnc就连接不上了?
如果连接不上,记得更改分辨率!(所以最好第一次连接的时候就设置好分辨率,调大的吧)
坑五:不要重启!
有没有注意到,我没提到重启两个字...der,没提,因为提了的我都去重烧系统了...原因未知,可能是系统的问题吧,重启就开机不了了,连接连不上,接显示屏也没得显示...只能重来...(更新的系统应该就没问题了?)
所以建议大家插着U盘,有什么文件直接备份,什么命令在U盘里建个文件保存一下,以防万一...
sudo mkdir /mnt/udisk
sudo apt-get install exfat-fuse
sudo mount -o uid=pi,gid=pi /dev/sda1 /mnt/udisk
umount /mnt/udisk
当可以完美控制树莓派了,那就开始浪吧。
我的任务是啥?基于树莓派的图像识别处理系统~(其实就是树莓派+摄像头...没了)
然后就是连接摄像头啦~(就是普通的CSI摄像头,加点钱,买了一个配套的支架,又向店家要了配套资料,五星好评~)
硬件连接好了,就设置一下,开启摄像头,敲一下键盘的事~
sudo raspi-config
选中Interfacing Optiojns
选中camera
然后就可以开摄像头,录视频啦(这些东东找店家要就好啦,也防止型号什么的错误)
1.1 1秒钟(时间单位为毫秒)延迟后拍摄一张照片,并命名为image.jpg
raspistill -t 1000 -o image.jpg
1.2 拍摄一张自定义大小和帧率的照片
raspistill -t 1000 -o image.jpg -w 640 -h 480 -q 5
2.1 拍摄一段视频:默认是视频长度为5s,分辨率为1920*1080,帧率:17
raspivid -o myvideo.h264
2.2 拍摄一段视频:分辨率为640*480 时间为10s
raspivid -o myvideo.h264 -t 10000 -w 640 -h 480
注:
raspivid输出的是一段未压缩的H.264视频流。为了能让我们普通的视频播放器播放需要安装gpac包
sudo apt-get install -y gpac
然后利用gpac包中的MP4Box应用将H.264格式的视频流转换为每秒10帧的MP4格式的视频
MP4Box -fps 10 -add myvideo.h264 myvideo.mp4
摄像头ok了,那就该谈到opencv了,毕竟是直接用它的库函数嘛。
(https://wwwblogs/zjutlitao/p/8261688.html ,人家大佬写的吧,完整的好像)
但是,本家只是用到基础的cv,没有用到那么高深的...额,好吧,我就是菜,make一堆error。
sudo apt-get install python3-opencv
当然啦,如果系统自带的是python2,就需要自己装一下python3,并设置3为默认(删除原python链接文件,then新建链接文件到python3)
sudo apt-get install python3
sudo apt-get install python3-pip
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
python --version
用的是opencv自带的camshift算法,嗯,基本什么都没改,就是把自己的camera作为camshift的视频源...(改进的在路上,下次一定)
#!/usr/bin/env python
'''
Camshift tracker
================
This is a demo that shows mean-shift based tracking
You select a color objects such as your face and it tracks it.
This reads from video camera (0 by default, or the camera number the user enters)
[1] http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.7673
Usage:
------
camshift.py [<video source>]
To initialize tracking, select the object with mouse
Keys:
-----
ESC - exit
b - toggle back-projected probability visualization
'''
# Python 2/3 compatibility
from __future__ import print_function
import sys
PY3 = sys.version_info[0] == 3
if PY3:
xrange = range
import numpy as np
import cv2 as cv
# local module
#import video
#from video import presets
class App(object):
def __init__(self):
self.cam = cv.VideoCapture(0)
_ret, self.frame = self.cam.read()
cv.namedWindow('camshift')
cv.setMouseCallback('camshift', self.onmouse)
self.selection = None
self.drag_start = None
self.show_backproj = False
self.track_window = None
def onmouse(self, event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
self.drag_start = (x, y)
self.track_window = None
if self.drag_start:
xmin = min(x, self.drag_start[0])
ymin = min(y, self.drag_start[1])
xmax = max(x, self.drag_start[0])
ymax = max(y, self.drag_start[1])
self.selection = (xmin, ymin, xmax, ymax)
if event == cv.EVENT_LBUTTONUP:
self.drag_start = None
self.track_window = (xmin, ymin, xmax - xmin, ymax - ymin)
def show_hist(self):
bin_count = self.hist.shape[0]
bin_w = 24
img = np.zeros((256, bin_count*bin_w, 3), np.uint8)
for i in xrange(bin_count):
h = int(self.hist[i])
cv.rectangle(img, (i*bin_w+2, 255), ((i+1)*bin_w-2, 255-h), (int(180.0*i/bin_count), 255, 255), -1)
img = cv.cvtColor(img, cv.COLOR_HSV2BGR)
cv.imshow('hist', img)
def run(self):
while True:
_ret, self.frame = self.cam.read()
vis = self.frame.copy()
hsv = cv.cvtColor(self.frame, cv.COLOR_BGR2HSV)
mask = cv.inRange(hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.)))
if self.selection:
x0, y0, x1, y1 = self.selection
hsv_roi = hsv[y0:y1, x0:x1]
mask_roi = mask[y0:y1, x0:x1]
hist = cv.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] )
cv.normalize(hist, hist, 0, 255, cv.NORM_MINMAX)
self.hist = hist.reshape(-1)
self.show_hist()
vis_roi = vis[y0:y1, x0:x1]
cv.bitwise_not(vis_roi, vis_roi)
vis[mask == 0] = 0
if self.track_window and self.track_window[2] > 0 and self.track_window[3] > 0:
self.selection = None
prob = cv.calcBackProject([hsv], [0], self.hist, [0, 180], 1)
prob &= mask
term_crit = ( cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 1 )
track_box, self.track_window = cv.CamShift(prob, self.track_window, term_crit)
if self.show_backproj:
vis[:] = prob[...,np.newaxis]
try:
cv.ellipse(vis, track_box, (0, 0, 255), 2)
except:
print(track_box)
cv.imshow('camshift', vis)
ch = cv.waitKey(5)
if ch == 27:
break
if ch == ord('b'):
self.show_backproj = not self.show_backproj
cv.destroyAllWindows()
if __name__ == '__main__':
print(__doc__)
import sys
App().run()
某些工具:
链接:https://pan.baidu/s/1O15hf_5-VAQLK9EmAA6qlQ
提取码:3dhf
本篇博客到此就结束了,各位看官看到这也就结束了。其实大家也发现没什么干货,只是个人的败犬吐槽而已。硬件嘛,总是多出好多不确定因素。
努力,不能做一个让自己都嫌弃的人啊。
本文标签: 电脑 树莓派 amp camshift Raspbian
版权声明:本文标题:某次树莓派+电脑的坑 & Raspbian+camshift 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729141195h1322952.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论