5604| 2
|
[项目分享] 【MaixPy】K210 Go 使用esp8285传输摄像头拍摄的图片 |
本帖最后由 我朝女王扔石头 于 2021-3-7 16:56 编辑 最近终于解决了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.发送图片可能还需要添加起始符和结束符增强容错性吧 |
最好的改法就是修改固件源码的 AT 8285 socket send 的接口的延时,又或是怼到 AT ,然后波特率改到 1.5M 波特率,可以拉高。 |
from my_device import ESP8285中这个my_device未发现,你您写的吗,可以分享一下嘛 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed