Python实现树莓派摄像头持续录像并传送到主机的步骤
(编辑:jimmy 日期: 2024/11/2 浏览:3 次 )
关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由“Raspberry Pi 基金会”这个慈善组织注册开发。埃"htmlcode">
# -*- coding: utf-8 -*- import os import signal import subprocess import sys import uuid # 获取程序运行的本地目录,和用来存储接收结果的recv文件夹目录 BASEPATH = os.path.realpath(os.path.dirname(sys.argv[0])) RECV = os.path.join(BASEPATH, 'recv') # 如果接收目录不存在,就自动新建 print " *** Received files are put into: %s" % RECV if not os.path.isdir(RECV): os.system('mkdir -p %s' % RECV) # 下面的部分用来记录正在等待接收的文件。这个文件会以一个UUID.tmp的格式命名。 # 在接收成功后,就会被重命名为UUID。(UUID是一个特定格式的唯一字符串,不会重复)。 # 如果在接收过程中按下Ctrl+C,就会发送一个终止命令给程序,这样程序会退出, # 并删除没有接收完整的那个文件。 working = False fullname = False def sigint_handler(signum, frame): global fullname, working print "\n" print " *** SIGINT detected. End the program." if working and fullname != False: print " *** Unfinished recording deleted." os.system('rm -f %s.tmp' % fullname) exit() signal.signal(signal.SIGINT, sigint_handler) # 使用一个死循环来不断运行netcat(nc)命令。 n = 1 while True: recname = str(uuid.uuid1()) print " [%8d] Listening for file [%s]. Use Ctrl+C to stop this script." % (n, recname) fullname = os.path.join(RECV, recname) working = True # 标记接收开始 # 使用 nc -lp 10401 命令接收数据,表明端口为10401。 subprocess.call('nc -lp 10401 > %s.tmp' % fullname, shell=True) os.system('mv %s.tmp %s' % (fullname, fullname)) working = False # 标记接收完毕 n += 1
上文所述的脚本,在笔记本上运行之后,就会在本地开启10401端口,等待树莓派上传送的文件。 传送的会直接写入一个由UUID(全局唯一ID)标识的文件中,可以供以后处理。
在树莓派上摄像并发送摄像结果
在树莓派上命令拍摄的方法是:
$ raspivid -o - -b 16000000 -t 100000 | nc xxx.xxx.x.xxx 10401
这条指令的意义如下:
- -o - ,使用-o设定输出,-表示直接输出到标准输出中,不写入文件。
- -b 16000000 ,设定输出比特率为16000000 bit/s。这大约是2兆字节每秒。
- -t 100000 ,设定录像时间为100000毫秒,亦即100秒。
- | nc xxx.xxx.x.xxx 10401 ,使用管道|将结果导入到nc中,nc是发送模式,目标是xxx.xxx.x.xxx计算机上的10401端口。
以上就是Python实现树莓派摄像头持续录像并传送到主机的步骤的详细内容,更多关于python 树莓派的资料请关注其它相关文章!
下一篇:Python常用断言函数实例汇总