R329开发板应用——操作图像(2)
在上个帖子(https://bbs.eeworld.com.cn/thread-1181408-1-1.html)中,我们已经成功将图像送至板上自带的小屏幕,本帖将实现百度AI处理。
本R329开发板支持网络,那么我们可以考虑从本地和网络两方面来实现AI功能,考虑到普及程度,选取百度AI作为网络实现,百度AI可以根据图片识别人脸,推测年龄、颜值、脸型等等,在这里我们仅仅引用脸的坐标。
首先是使用百度账号申请AI应用接口,申请成功后,可以获得AppID, API Key, Secret Key。然后根据API key和Secret Key计算应用程序token,再将此token应用到web请求。得到的回应中包含了人脸识别数量、人脸位置等信息。
比较之前的代码,仅仅插入了图片base64化、网络访问的一小段代码,不做展开。有一点比较坑的是,我不知道怎么在cv2中直接将图片生成base64代码,而是保存成为临时文件,再到本地路径中读取这个文件,感觉实在有些别扭。
如上篇文章所述,如果摄像头在屏幕上方,读取的图片将是倒立的,而百度AI会自动将此图片旋转180度后再进行识别,因此返回值的x,y将在我们需要识别图形的右下方,而w,h则是向左上方延伸。在编写代码画框时,应使用x-w和y-h。
cv2画图时,对坐标的识别必须是整形数(int),否则会提示错误,因此在使用cv2.rectangle命令画图时,需要使用int(x),int(y),int(x-w),int(y-h)强制转换。
因为百度限制,快速实时识别不太可能,因此加入限制条件,当同一帧识别人脸数量达到3(或以上),则保存下当时的画面,中断程序。
如《操作图像(1)》(https://bbs.eeworld.com.cn/thread-1181408-1-1.html)中所述,在终端命令行中中输入echo -e "\033[?25l" > /dev/tty0将提示光标取消。摄像头对准网上随便找张人物照片,屏幕中可以将摄像头内容显示出来,同时可以在获取图片中人物面孔进行标识
附屏幕大图:
在这里,我们将临时文件取出,是一个倒立的图片。
同时我们可以看到,处理每帧图像都需要大概0.5秒时间,这一方面是网络原因,另外一方面,cv2画图的效率也是限制之一。
除了真实人物,还尝试了卡通人物,也是可以的。
百度AI自动旋转图片后返回的数据里不给提示吗?
引用: littleshrimp 发表于 2021-10-5 08:57 百度AI自动旋转图片后返回的数据里不给提示吗?
不给,正常图片用加法,但摄像头的图片我用减法就是对的,试了多次。
引用: tobot 发表于 2021-10-5 16:55 不给,正常图片用加法,但摄像头的图片我用减法就是对的,试了多次。
如果你不知道发送的图片是反的,能通过返回的数据判断他把图片做了旋转吗?