【MaixPy】K210 Go 使用esp8285传输摄像头拍摄的图片
2021-03-078501
AI 快速预览详细
本文介绍了如何使用K210和esp8285实现摄像头图片的无线传输。首先解决了K210上使用socket.connect连接报OSError的问题,然后通过esp8285将摄像头图片发送到PC端。帧数稳定在5-6之间,适合实时监控和图像处理项目。
|
最近终于解决了K210上使用socket.connect连接报OSError问题,问题解决方法可以参考: https://mc.dfrobot.com.cn/thread-308577-1-1.html 然后兴奋的试着使用esp8285传输摄像头图片,直接上代码: ------------------------------------------------------------------------------------------------------------------------------------------- K210端——充当客户端,不断将摄像头图片send给服务端 : #注意将电脑的防火墙关了,不然连接不上电脑 import sensor, image, time,gc from my_device import ESP8285 import socket #sensor初始化 sensor.reset() sensor.set_vflip(1) #设置摄像头垂直翻转 sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(time = 2000) #连接wifi,连接方法是自己封装的一个类,这里需自己写 SSID = "wifi名称" PASW = "wifi密码" wifi = ESP8285() wifi.connect_wlan(SSID,PASW) print('network state:', wifi.isconnected(), wifi.ifconfig()) #socket建立连接 ADDR = ("PC端ip",8086) #注意关闭PC防火墙!!!!,这里PC端ip也就是后面PC端代码中的HOST变量的值 sock = socket.socket() sock.connect(ADDR) clock = time.clock() while True: clock.tick() img = sensor.snapshot() img = img.compress(quality=30) #压缩图片,不然帧数小的可怜 img_bytes = img.to_bytes() print("img_size: ",len(img_bytes)) for i in range(0,len(img_bytes),1024): #1KB1KB的发送 sock.send(img_bytes[i:i+1024]) print("frames: ",clock.fps()) del img,img_bytes gc.collect() sock.close() ------------------------------------------------------------------------------------------------------------------------------------------- PC端——充当服务端,接收K210发送的图片二进制数据并显示: import socket import cv2 import numpy as np import threading def show_img(img): image = cv2.imdecode(np.asarray(bytearray(img),dtype='uint8'), cv2.IMREAD_COLOR) cv2.imshow('img',image) def sock_init(): sock = socket.socket() # 获取当前主机名 HostName = socket.gethostname() # 获取当前主机的ip HOST = socket.gethostbyname(HostName) Port = 8086 # 设置监听 sock.bind((HOST, Port)) sock.listen(5) return sock def receive_img(client): #连接上客户端后,读取客户端发送的二进制流图片 client.settimeout(10) while True: try: img = b'' while True: data = client.recv(1024) img += data if len(data)<1024: break print(len(img)) try: show_img(img=img) if cv2.waitKey(1)&0xff == ord('q'): break except: continue except socket.timeout: break print('img_end') if __name__ == "__main__": sock = sock_init() while True: print("等待连接中") cilent,addr = sock.accept() print('连接地址:{}'.format(addr)) thread_1 = threading.Thread(target=receive_img,args=(cilent,)) thread_1.start() if cv2.waitKey(1)&0xff == ord('q'): break sock.close() ------------------------------------------------------------------------------------------------------------------------------------------- 实验结果: ![]() ![]() 帧数在5-6之间,如果还是太卡,帧数太低,可以在K210选择摄像头图片格式时选择更小的或者img.compress(quality=30)选择更小的图片压缩质量 ------------------------------------------------------------------------------------------------------------------------------------------- 想分享或者交流的部分: 1.我PC部分代码很拉跨,后面再改吧 2.K210部分感觉帧数还是不够,不知道如何进一步修改 3.发送图片可能还需要添加起始符和结束符增强容错性吧 |
-
SunMarch-202103076508..png (58.45 KB, 下载次数: 3934)







