R329开发板应用——操作图像(2)

tobot   2021-10-4 23:47 楼主

R329开发板应用——操作图像(2

在上个帖子(https://bbs.eeworld.com.cn/thread-1181408-1-1.html)中,我们已经成功将图像送至板上自带的小屏幕,本帖将实现百度AI处理。

  • AI到底能做什么?

R329开发板支持网络,那么我们可以考虑从本地和网络两方面来实现AI功能,考虑到普及程度,选取百度AI作为网络实现,百度AI可以根据图片识别人脸,推测年龄、颜值、脸型等等,在这里我们仅仅引用脸的坐标。

  • 实现

首先是使用百度账号申请AI应用接口,申请成功后,可以获得AppID, API Key, Secret Key。然后根据API keySecret Key计算应用程序token,再将此token应用到web请求。得到的回应中包含了人脸识别数量、人脸位置等信息。

比较之前的代码,仅仅插入了图片base64化、网络访问的一小段代码,不做展开。有一点比较坑的是,我不知道怎么在cv2中直接将图片生成base64代码,而是保存成为临时文件,再到本地路径中读取这个文件,感觉实在有些别扭。

如上篇文章所述,如果摄像头在屏幕上方,读取的图片将是倒立的,而百度AI会自动将此图片旋转180度后再进行识别,因此返回值的xy将在我们需要识别图形的右下方,而wh则是向左上方延伸。在编写代码画框时,应使用x-wy-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将提示光标取消。摄像头对准网上随便找张人物照片,屏幕中可以将摄像头内容显示出来,同时可以在获取图片中人物面孔进行标识

image-20211004234657-1.jpeg  

附屏幕大图:

image-20211004234659-2.png  

 

在这里,我们将临时文件取出,是一个倒立的图片。

 

image-20211004234659-3.jpeg  

同时我们可以看到,处理每帧图像都需要大概0.5秒时间,这一方面是网络原因,另外一方面,cv2画图的效率也是限制之一。

 

除了真实人物,还尝试了卡通人物,也是可以的。

image-20211004234659-4.png  

image-20211004234659-5.jpeg  

 

image-20211004234659-6.jpeg  

 

回复评论 (4)

百度AI自动旋转图片后返回的数据里不给提示吗?

点赞  2021-10-5 08:57
引用: littleshrimp 发表于 2021-10-5 08:57 百度AI自动旋转图片后返回的数据里不给提示吗?

不给,正常图片用加法,但摄像头的图片我用减法就是对的,试了多次。

点赞  2021-10-5 16:55
引用: tobot 发表于 2021-10-5 16:55 不给,正常图片用加法,但摄像头的图片我用减法就是对的,试了多次。

如果你不知道发送的图片是反的,能通过返回的数据判断他把图片做了旋转吗?

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2021-10-5 18:33

要先保存成为临时文件,再到本地路径中读取这个文件,,,,

确实是个坑

点赞  2021-10-5 19:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复