有了树莓派摄像头,摄像头就可以离服务器较远的距离,比如把摄像头固定在墙上,或者固定在门口。
新建images目录,用于保存生成的图像。
新建client.py,作为客户端程序。
【代码 client.py】
# -*- coding: utf-8 -*-
'''
在树莓派上运行程序
先运行服务端,再运行客户端
'''
# 导入包
from imutils.video import VideoStream
import imagezmq
import socket
import time
import cv2
# 服务器IP (通过ifconfig命令查看IP地址)
server_ip = '192.168.137.1'
# 初始化 ImageSender 对象
sender = imagezmq.ImageSender(connect_to="tcp://{}:5555".format(server_ip))
# 得到 host name
host_name = socket.gethostname()
# 初始化 VideoStream
vs = VideoStream(src=0).start() # USB摄像头
# vs = VideoStream(usePiCamera=True).start() # 树莓派摄像头
# 摄像头预热
time.sleep(2.0)
while True:
# 读取图像
frame = vs.read()
# 图像处理
frame = cv2.flip(frame, 0) # 垂直翻转
# 把图像发送到服务器
sender.send_image(host_name, frame)
新建server.py,作为服务端程序。
# -*- coding: utf-8 -*-
'''
本程序在PC运行程序
先运行服务端,再运行客户端
'''
import cv2
import imagezmq
image_hub = imagezmq.ImageHub()
for i in range(100):# 拍100张图片就结束
host_name, image = image_hub.recv_image()
cv2.imshow(host_name, image) # 显示图像
cv2.imwrite('images/%d.jpg', image) # 保存图像
image_hub.send_reply(b'OK')
k = cv2.waitKey(100) & 0xff # Press 'ESC' to exiting video
if k == 27:
break
cv2.destroyAllWindows()