基于移动机器人的智能摄影软件设计及实现
2016-11-14曾令远吴东
曾令远,吴东
(岭南师范学院信息工程学院,湛江 524048)
基于移动机器人的智能摄影软件设计及实现
曾令远,吴东
(岭南师范学院信息工程学院,湛江524048)
设计并实现基于移动机器人的智能摄影软件,旨在利用机器人的移动特性消除现有自拍机器人拍照位置固定所带来的限制,进一步增强拍照技术的智能化。简单介绍软件的总体设计,着重分析软件需解决的关键问题及实现方法,并提出今后的研究重点。
智能摄影;人脸检测;移动机器人
广东大学生科技创新培育专项资金项目(No.pdjh2016b0310)
0 引言
随着智能手机拍摄功能的增强和社交网络的兴起,人们越来越喜欢使用智能手机拍照留念,并发布到社交平台中跟好友分享。这是一个全民自拍的时代,人们常常在工作、生活的空暇尽情自拍[1]。然而,遗憾的是,尽管智能手机的镜头像素再大、拍摄功能再强,拍照时都会受到手持的限制。大家在使用智能手机拍照时大多会遇到这样的问题:由于手不够长,镜头太近,拍出的脸很大;或是几个人一起自拍时,会有人被无情的挤压,留下歪斜的身影;特别是在独自旅行时,若没有旁人的帮忙,很难顾及人跟身后美景的协调。
于是,自拍杆应运而生,它的使用相当于延伸手臂长度,一定程度上缓解了以往自拍时碰到的问题。自拍杆由此而获得广大“拍友”的青睐,进一步促进自拍的风靡。但是,使用自拍杆拍照时仍然需要手握自拍杆,往往造成“拍友”下意识的面向自拍杆或以自拍杆为中心围在一起,故在照片中留下奇怪的姿势,影响了照片的美感。究其原因,是使用自拍杆拍照时没能释放人们的双手而造成的。最近,新的拍照装备——自拍机器人被推出。该机器人可进行真正释放人们双手的拍照,令“拍友”拍照时的姿势、动作更随意。但自拍机器人也有不足,那就是它们被固定在某个位置上为人们拍照,无法实现目标对象的大范围移动跟拍,限制了“拍友”的拍照范围。因此,如何让人们更自由的拍摄高质量照片仍然是值得深入研究的问题。
本文设计并实现了基于移动机器人的智能摄影软件(App),旨在利用机器人的移动特性消除现有自拍机器人拍照位置固定所带来的限制,进一步增强拍照技术的智能化,包括目标对象识别、追踪、抓拍等方面的自动、精准和迅速,及后期照片的美化、美容、边框等个性化装饰,并为照片添加场景标签方便管理和分享后易于好友的搜索。本软件结合了移动机器人的动态特征,为其将来广泛的跟各类移动机器人深度融合提供了可能。特别是在目前机器人被大力推广的时局下,本软件具有可预见的商业潜力。
1 智能摄影软件的总体设计
为了满足人们拍照及其照片运用需求,基于移动机器人的智能摄影软件应当具备自动拍照、照片处理和照片管理三方面功能。自动拍照,即从取景、聚焦到拍摄都要实现智能化;照片处理是要能对照片进行美容、美化,并让用户根据个人喜好对照片作个性化的装饰;而照片管理,则包括对照片的标注、存储、分类等。这些功能的使用可为用户提供一个智能拍照、高效照片加工、安全照片存储的“摄影师”,令用户体验更好地释放双手、随意拍照的乐趣。
图1 智能摄影软件的功能结构
如图1所示,是基于移动机器人的智能摄影软件的功能结构,其中的智能取景、移动机器人控制、标注照片等功能模块是重要子功能。
(1)智能取景。用户启动拍照功能后,软件进入取景过程。软件自动对取景框内的人物进行脸部和边界检测。在此基础上,判断当前取景是否为最佳状态,若已经是最佳状态则进入拍照过程,否则软件智能计算取景应当调整的角度。该功能的使用,可让照片拍摄通常处在最佳取景状态下。
(2)移动机器人控制。控制移动机器人的前进、后退、左转、右转以及移动机器人夹具的抬起或下落。这部分功能是软件内部自行调用的,目的是为了在拍照时借助机器人的位置、角度及其他部件的伸缩,来变换取景内容。
(3)标注照片。用户可以在软件中设定拍照形式,如个人照、合照、会议照等。待拍照后,软件利用照片拍摄的上下文信息,如地点、时间和人物等动态为照片标注关键词,为后期的照片管理提供更多依据,也为快速检索照片提供可能。
2 智能摄影软件的实现
2.1智能取景功能的实现
如前所述,智能取景目的是通过调整镜头位置和角度,以使照片拍摄处在最佳取景状态。对于最佳取景状态,我们理解为是所有人物被框入镜头内并居中,这实际上是拍摄照片时最简单的构图手法——“中心构图”法。这种构图方式的最大优点就在于主体突出、明确,而且画面容易取得左右平衡的效果[2]。由于基于移动机器人的智能摄影软件是用来进行自拍的,即对人物的拍摄,那么利用“中心构图”法来展开智能取景时就以被拍人物为中心进行构图。
为了能够围绕被拍人物进行构图,智能取景功能应当准确检测出取景框内的人物,在此使用OpenCV(Open Source Computer Vision Library)[3]中提供的图像处理算法来实现人脸检测,并借助人脸来判断当前时刻取景框中的人物站位情况。OpenCV中的AdaBoost算法利用harr或lbp特征进行人脸检测,该算法的训练需要大量图片,非常耗时,因此OpenCV事先把特征训练好存储到一些XML文件中供用户直接使用。在我们使用的OpenCV3.0中,有两个文件夹haarcascades和lbpcascades,前者存放训练出来的harr特征文件,后者存放训练出来的lbp特征文件。
智能取景分为个人自拍和多人自拍两种情况。两者比较,个人自拍更容易处理,只需对被拍人物进行人脸检测并不断调整以使该人脸居中即可。对于多人自拍,在人脸检测后还要找出最左侧及最右侧的被拍人物,调整两人的中心位置至取景框中心。如图2所示,是多人自拍时的智能取景功能的流程图。
图2 多人自拍时智能取景流程图
2.2移动机器人控制功能的实现
根据智能取景功能的要求,移动机器人不仅要能固定安装了智能摄影软件(App)的智能终端(智能手机或平板等),还要能够调整智能终端的角度及位置。至于移动机器人的其他功能则不做要求。例如,可选用广州映博智能科技有限公司生产的派宝机器人[4]。如图3所示,我们利用派宝机器人的夹具固定了一台小米平板,该平板充当机器人的大脑,通过蓝牙跟机器人联系,发指令控制机器人的所有动作。关于机器人运动控制,派宝机器人提供了相关接口,智能摄影软件(App)只需调用即可。因此,这里不做更多的说明。
图3 安装了小米平板的派宝机器人
2.3标注照片功能的实现
标注照片,目的在于让用户更方便的管理以往拍摄的照片。该功能利用照片拍摄的上下文信息,如地点、时间和人物等动态为照片及其存放的文件夹命名。因此,需要提供一些功能让拍照用户确定被拍人物和拍照地点,而拍照时间则从系统中自动获取。下面主要讲解如何实现让用户确定被拍人物和拍照地点的功能。
让用户确定被拍人物实际上是给用户提供一个被拍人物信息管理功能,其中包括被拍人物添加、删除、更新等。那么,这一功能的实现是要完成数据的存储的。在Android平台中实现数据存储通常有5种方式,如使用SharedPreferences存储数据、文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据和网络存储数据[5]。经过比较,我们选用了文件存储数据的方式。借助Activity的openFileOutput()方法可以将被拍人物信息输出到文件中,而且还可以指定文件的操作模式,不过我们在此使用了它的默认模式——该文件为私有文件只有该软件才能访问。如图4所示,是被拍人物信息添加界面。
图4 被拍人物/事件信息添加界面
至于拍照地点的确定,我们借助了腾讯地图定位SDK的网络定位功能[6]。只要将运行了智能摄影软件(App)的移动终端的Wi-Fi信息发送到腾讯的定位服务器,该服务器经计算后随即返回定位结果列表。定位功能的核心代码如下:
public void onLocationChanged(TencentLocation location,int error, String reason){
if(TencentLocation.ERROR_OK==error){
progressBar.setVisibility(View.GONE);
Log.i("TencentLocation",location.getAddress()+" -"+location.getName());
//根据location,获取附近位置pois
List Collections.sort(pois,new CompareDistance()); //遍历附近位置 for(int i=0;i Log.i("TencentPoi",pois.get(i).getAddress()+"-"+pois.get(i).getName()+"-" +(int)pois.get(i).getDistance()/15); TencentPoi poi=pois.get(i); HashMap map.put(key,name); map.put(value,address); datas.add(map); locationAdapter.notifyDataSetChanged(); } } else{Toast.makeText(getActivity(),"获取位置信息失败",Toast.LENGTH_LONG).show(); } } 图5 腾讯地图返回的一个定位结果列表 如图5所示,是腾讯地图返回的一个定位结果列表。如果用户在其中没有找到满意的位置,可手动输入准确的位置信息。 图6 照片文件夹列表 用户输入的被拍人物和拍照位置信息都将用于为照片及其存放的文件夹命名。如图6所示,是照片文件夹列表。从中可看出,文件夹的命名遵从了“时间-地点-人物/事件”格式。这样的照片命名让照片管理更加方便,有助于照片的分类和查找。 2.4照片处理功能的实现 虽然智能摄影软件能自动完成照片拍摄,但拍摄效果可能有这样那样不如人意的地方。例如,被拍人物脸上的斑点在照片中清晰可见,或者人物出现红眼等。虽然这些瑕疵都可以使用专业图片处理软件来加工消除,但那要求掌握较高的技术。为了方便那些既不太懂技术而又想处理出好照片的用户,我们在软件中提供了简单的照片处理功能,例如去红眼、去斑、补光、美容等。我们简单介绍下美容中的“磨皮”功能,它可使照片中的人物皮肤像婴儿一样细腻白晰,且不影响头发、眼睛的锐度。该功能也是使用OpenCV中的图像处理模块imgproc组件实现的,其关键代码如下: Mat src=new Mat(); Utils.bitmapToMat(bitmap,src); Mat m=new Mat(); Mat temp1=new Mat(); Mat temp2=new Mat(); Imgproc.cvtColor(src,m,Imgproc.COLOR_BGRA2BGR); Imgproc.cvtColor(src,temp1,Imgproc.COLOR_BGRA-2BGR); Imgproc.cvtColor(src,temp2,Imgproc.COLOR_BGRA-2BGR); long nativeObjAddr=native_buffing(m.getNative ObjAddr(), temp1.getNativeObjAddr(),temp2.getNativeObjAddr(),value1,value2); Mat dst=new Mat(nativeObjAddr);Utils.matToBitmap(dst,bitmap); 基于移动机器人的智能摄影软件的使用能够很好地解决人们自拍的问题。但该软件在功能及性能方面还有待提升。例如,智能取景时只有一种中心构图法,其在一些要突出背景的场合就不太适合,需要增加更多不同的构图方法。另外,对于照片的标注还可以复杂些,例如可让用户自行添加情感关键字等。因此,对该软件进行功能、性能完善是我们的下一步工作。 [1]环球网.全民自拍时代[DB/OL].中国计算机报,2016-1-12.http://www.jx.xinhuanet.com/news/photo/2016-01/12/c_1117751842.htm [2]摄影构图:中心构图法[DB/OL].http://jingyan.baidu.com/article/4d58d5413556a79dd4e9c02c.html,2016-7-06. [3]OpenCV[DB/OL].http://opencv.org/,2016-7-06. [4]派宝机器人[DB/OL].http://www.padbot.cn/,2016-7-16. [5]博客园.Android数据存储实现的5大方式[DB/OL].http://www.codeceo.com/article/5-android-storage.html,2016-7-06. [6]腾讯地图.Android定位SDK[DB/OL].http://lbs.qq.com/geo/index.html,2016-7-06. Intelligent Photography;Face Detection;Mobile Robot Design and Implement of Intelligent Photography Software Based on Mobile Robot ZENG Ling-yuan,WU Dong Designs intelligent photography software based on mobile robot,mobile feature of robot is used to eliminate existing restrictions of position-fixed photography robot and makes photography more intelligent.Introduces the total design of the tool and then analyzes the key problems and implementation,proposes the research priorities. 1007-1423(2016)28-0053-05 10.3969/j.issn.1007-1423.2016.28.015 曾令远(1994-),男,广东遂溪人,本科,从事领域为计算机应用软件研发吴东(1981-),男,广西合浦人,讲师,硕士,从事领域为复杂网络、社交网络研究 2016-07-28 2016-09-283 结语
(School of Information Engineering,Lingnan Normal College,Zhanjiang 524048)