先放一个人脸识别的效果图,图像是本人。还有小猫小狗在文章末尾。
这里简单说一下ESP8266的使用。论坛里会玩ESP8266的大佬太多,不敢造次。所以我尽力用最简单的语言把ESP8266相关的部分说清楚。在物趣系列的设计中,ESP8266仅用作和云端服务器传递数据的手段,不涉及其二次开发。LPC55S69引脚路由如下图。
系统通过一个按键识别用户输入,当用户按下按键,即将一帧图像实时上传到云端,等待识别结果返回。云端服务器是个人私用的,不对外开放。为方便下文描述,在本地局域网络中建立了一个服务器拷贝,并暴露一个端口供ESP8266建立通讯。这里,ESP8266工作在STA模式下:
第1步,使用“AT+CWMODE=1”设置ESP8266为STA模式;
第2步,使用“AT+CWJAP_DEF=<ssid>,<pwd>连接到AP;
第3步,使用“AT+CIPSTART=“TCP”,<remoteIP>,<remote port>”连接到服务器;
(等待用户按下按键,将一帧图像上传到服务器)
第4步,使用“AT+CIPSEND”,向服务器传输BMP图像。图像分辨率128*160,包含头信息70字节,内容40960字节,共计41030字节。先向服务器发送图像头,70字节,告知服务器即将发送图像数据。之后分80段,每段512字节,向服务器传输数据。传输结束后,向服务器发送“over”告知图像已传输完成。服务器每收到512字节数据,向客户端返回“success”表明接收成功。
(此处等待服务器识别图像,识别完成,返回“start”告知客户端,即将发送图像信息。随后将结果以RGB565的格式,共计40960字节分段传输给客户端。)
第5步,客户端收到“start”信息,进入图像刷写状态。每接收一段数据,即将该段数据刷写到屏幕上。待刷写完成后,结果停留2-3秒,其后摄像头开始工作,将新的图像刷写到屏幕上。
这里上传和接收数据,采用多段传输的方法,可以使用更小的buffer,节约RAM。当然,分段越多,传输效率越低。ESP8266每进入一次数据传输状态,所需时间大致可以描述为“发送数据的系统开销T1+发送数据的用户开销T2”,发送分段越多,T1累积越大。对于发送固定总量的数据来说,分段越小,应该效率越高。以上是个人见解,如不正确,请论坛大佬指正!
调试时已经成功识别一些物体,这里取小猫和小狗的识别结果分享给大家!这里图片是在手机上显示,用OV7670拍摄,然后识别的。视频节目过两天上传,请期待。