【智能无线小车系列十】通过USB摄像头实现网络监控功能

  如果仅有静态图像可能还不足以满足我们的需求,我们可能会需要用到实时的监控功能。这里介绍一款小应用:motion。motion的功能可强大了,不仅可以将监控的画面通过视频传输,实时展现,更为强大的是,motion可以感知图像中物体的运动,然后触发一定的时间,例如报警等功能,当然这些motion本身并没有时间,具体的事件处理需要我们自己去完成。

1.安装USB摄像头 ,这里建议使用webCam

2.在树莓派中,其本身并未集成motion这款应用,因而我们需要在联网状态下安装强大的网络监控软件motion,输入指令:

pi@raspberrypi ~$sudo apt-get install motion 

如果安装不了的,可以先sudo apt-get update 一下。

3.安装完成之后,我们需要进行必要的设置。默认情况下,motion是不允许对WebCam的远程访问的,这意味着我们只能在树莓派桌面的浏览器下访问motion,尽管这是一个出于安全方面的考虑,但是不能满足我们远程对小车进行导航的设计要求,于是我们需要手动去开启这一功能。

使用vi编辑motion的配置文件,默认文件所在路径为:/etc/motion/motion.conf。注意:修改核心配置文件肯定是需要用到管理员权限的。

pi@raspberrypi ~$ sudo vi /etc/motion/motion.conf 

4.打开文件之后,在命令模式下使用查找命令“/”找到”control_localhost on “和”webcam_localhost on“这两行,改为以下两行后,保存后退出。
  control_localhost off
  webcam_localhost off

5.运行motion软件,motion的运行需要使用管理员权限,然后输入:motion -n

pi@raspberrypi ~$sudo motion -n

注意:motion程序是一个阻塞shell的程序,当我们需要停止其运行时,可以使用“Ctrl +C”强制终止其运行。

6.配置了一大堆,终于要到了见证奇迹的时刻了:监控到的画面即将传送回来!

打开firefox浏览器,在浏览器的地址栏中输入如下地址:

http://192.168.1.24:8081/

注意:这里的192.168.1.24是测试时树莓派所分配到的IP地址,更改成自己的即可。关于浏览器的问题刚开始让我纠结了很长时间,很多浏览器都不支持这一软件,害我以为是配置环节哪里出现了问题,反复调试了一个下午……后来终于明白了原因所在,实际测试的时候,由于motion是开源软件,对于同为开源软件的firefox浏览器的支持力度是最好的,其他的主流浏览器如chrome、IE和猎豹都有测试,都是以失败而告终。

配置网页:http://192.168.1.24:8080/,测试效果如下。控制页面提供了一些远程服务调用接口,通过webservice 的形式提供给用户,可以加以调用封装在客户端程序里面,从而使得用户的控制更加方便,也更加友好~

 

 

 

转载于:https://www.cnblogs.com/lou424/p/4231322.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能小车摄像头循迹的实现一般需要以下几个步骤: 1. 搭建硬件平台:需要一台小车,一块单片机开发板(如Arduino、树莓派等),一块摄像头(如Raspberry Pi摄像头),以及其他必要的电路元件(如电机驱动模块、电源模块等)。 2. 调试摄像头:将摄像头连接到开发板上,利用相应的摄像头接口库(如OpenCV)进行调试,获取摄像头的视频流数据。可以通过调整摄像头的角度和位置来获得较好的循迹效果。 3. 图像处理:对于每一帧视频数据,需要进行图像处理,提取出车道线的位置和方向。这可以通过一些简单的图像处理算法实现,如色彩空间转换、图像二值化、边缘检测、霍夫变换等。 4. 控制小车:根据图像处理的结果,控制小车的运动方向和速度。可以通过PWM调节电机驱动模块的输出来控制小车的速度和转向。 下面是一份基于Python和OpenCV的示例代码,实现了一个简单的摄像头循迹小车: ```python import cv2 import numpy as np import RPi.GPIO as GPIO # 初始化GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(17, GPIO.OUT) GPIO.setup(18, GPIO.OUT) GPIO.setup(22, GPIO.OUT) GPIO.setup(23, GPIO.OUT) # 初始化摄像头 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) # 主循环 while True: # 获取视频帧 ret, frame = cap.read() if not ret: break # 图像灰度化和二值化 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 边缘检测和霍夫变换 edges = cv2.Canny(binary, 50, 150, apertureSize=3) lines = cv2.HoughLines(edges, 1, np.pi/180, 100) # 绘制车道线 if lines is not None: for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(frame, (x1,y1), (x2,y2), (0,0,255), 2) # 控制小车运动方向 if lines is not None: rho, theta = lines[0][0] if theta < np.pi/2: GPIO.output(17, GPIO.LOW) GPIO.output(18, GPIO.HIGH) GPIO.output(22, GPIO.LOW) GPIO.output(23, GPIO.HIGH) else: GPIO.output(17, GPIO.HIGH) GPIO.output(18, GPIO.LOW) GPIO.output(22, GPIO.HIGH) GPIO.output(23, GPIO.LOW) # 显示视频帧 cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows() GPIO.cleanup() ``` 这份代码使用了树莓派的GPIO来控制小车的电机驱动模块,实现了很简单的循迹功能。需要注意的是,这份代码仅仅是一个示例,实际使用时需要根据具体情况进行修改和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值