一种快速拍照的方法及电子设备
技术领域
本发明涉及一种快速拍照的方法及电子设备。
背景技术
随着移动终端的普及,移动终端的应用越来越广泛,其功能也越来越强大。
拍照功能作为移动终端的一项重要功能,也日渐受到人们的青睐。利用移动终端进行拍照,几乎成为人们生活的一部分。正常的拍照流程:点击拍照,软件向摄像头模组发送拍照命令,摄像头模组切换成拍照模式,等待拍照完成,获取拍照图像,编码保存。这个流程中,摄像头接收到拍照命令,完成相关动作,需要较长的时间。导致实际拍照得到的结果并不是想要的结果。
发明内容
本发明主要解决的技术问题是如何解决用户点击拍照时,系统和人响应时间延迟导致的拍照内容和想拍的内容比有延迟的问题。
有鉴于此,本发明提供一种快速拍照的方法,能够实现准确抓拍到用户想拍的内容。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种快速拍照的方法,所述方法包括:电子设备接收用户的拍照指令,进入预览模式;确定在拍照响应延迟时间内保存帧数据的时间间隔;根据所述时间间隔保存回显帧数据;在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近所述拍照响应延迟时间的回显帧数据,作为拍照结果。
其中,所述确定在拍照响应延迟时间内保存帧数据的时间间隔包括:检测系统所剩余内存容量,根据所述系统所剩余内存容量以及预设的预留内存容量,确定用于保存帧数据的内存容量;以最大输出尺寸作为每帧数据的容量,根据所述用于保存帧数据的内存容量、所述每帧数据的容量以及所述拍照响应延迟时间确定保存帧数据的时间间隔。
其中,所述进入预览模式之后,还包括:控制电子设备的CPU的核心全部打开,在最高工作频率下工作。
其中,所述根据所述时间间隔保存回显帧数据包括:实时获取回显帧数据;判断获取的当前回显帧数据是否为第一帧数据;若是,直接保存所述当前回显帧数据至内存;若否,判断所述当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于所述时间间隔;若是,保存所述当前回显帧数据,否则,丢弃所述当前回显帧数据。
其中,所述预览模式下,控制相机的输出尺寸为全尺寸输出。
为解决上述技术问题,本发明采用的另一个技术方案是:提供一种电子设备,所述电子设备包括接收模块、确定模块、保存模块以及处理模块,其中:所述接收模块用于接收用户的拍照指令,进入预览模式;所述确定模块用于确定在拍照响应延迟时间内保存帧数据的时间间隔;所述保存模块用于根据所述时间间隔保存回显帧数据;所述处理模块用于在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近所述拍照响应延迟时间的回显帧数据,作为拍照结果。
其中,所述确定模块包括第一确定单元以及第二确定单元,其中:所述第一确定单元用于检测系统所剩余的内存容量,根据所述系统所剩余内存容量以及预设的预留内容容量,确定用于保存帧数据的内存容量;所述第二确定单元用于以最大输出尺寸作为每帧数据的容量,根据所述用于保存帧数据的内存容量、所述每帧数据的容量以及所述拍照响应延迟时间确定保存帧数据的时间间隔。
其中,所述处理模块还用于在进入预览模式之后,控制电子设备的CPU的核心全部打开,在贵高工作频率下工作。
其中,所述保存模块包括获取单元、第一判断单元、第二判断单元以及保存单元、丢弃单元,其中:所述获取单元用于实时获取回显帧数据;所述第一判断单元用于判断获取的当前回显帧数据是否为第一帧数据;所述保存单元用于在获取的当前回显帧数据是第一帧数据时,直接保存所述当前回显帧数据至内存;所述第二判断单元用于在获取的当前回显帧数据不是第一帧数据时,判断所述当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于所述时间间隔;所述保存单元进一步用于在所述当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差大于或等于所述时间间隔时,保存所述当前回显帧数据;所述丢弃单元用于在所述当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差不大于或等于所述时间间隔时,丢弃所述当前回显帧数据。
其中,所述处理模块还用于,在所述预览模式下,控制相机的输出尺寸为全尺寸输出。
本发明的有益效果是:区别于现有技术的情况,本发明通过接收用户的拍照指令后,进入预览模式,确定在拍照响应延迟时间内保存帧数据的时间间隔,根据时间间隔保存回显帧数据,在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近拍照响应延迟时间的回显帧数据,作为拍照结果。通过这样的方式,本发明能够实现快速抓拍,并能准确抓拍到用户想拍的内容。
附图说明
图1是本发明实施例提供的一种快速拍照的方法的流程图;
图2是本发明实施例提供的确定在拍照响应延迟时间内保存帧数据的时间间隔的流程图;
图3是本发明实施例中根据时间间隔保存回显帧数据的流程图;
图4是本发明实施例提供的一种电子设备的结构示意图;
图5是本发明实施例提供的确定模块的结构示意图;
图6是本发明实施例提供的保存模块的结构示意图。
具体实施方式
请参阅图1,图1是本发明实施例提供的一种快速拍照的方法的流程图,如图所示,本发明的快速拍照的方法包括以下步骤:
S101:电子设备接收用户的拍照指令,进入预览模式。
在用户发现想拍的事物时,启动电子设备的拍照应用。其中,用户启动电子设备的拍照应用可以通过现有常规的方式来实现,比如通过硬件按钮、软键盘上的特定按钮或者其他的特定触发方式触发启动电子设备的拍照应用。
电子设备接收用户的拍照指令,进入相机预览模式。
作为一种优选的实现方案,在进入相机预览模式后,控制相机的输出尺寸为全尺寸输出(即拍照尺寸为全尺寸)。这种状态下,预览回显数据的每帧数据的容量都以最大尺寸下的数据容量计。
作为另一种优选的实现方案,在进入相机预览模式后,控制电子设备的CPU的核心全部打开,在最高工作频率下工作。也就是说,在进入预览模式后,自动调整电子设备的CPU工作在能力最大的模式,CPU的核心全部打开,工作频率设置到最高。
S102:确定在拍照响应延迟时间内保存帧数据的时间间隔。
其中,本发明实施例中的拍照响应延迟是指用户想要拍照,到用户实际触发拍照,再到系统检测到拍照动作之间的时间间隔,该拍照响应延迟包括系统的响应延迟和用户的响应延迟。其中,用户的响应延迟是指用户想要拍照到实际触发拍照之间的响应延迟,该响应延迟可以为预设的响应延迟时间。比如为100ms、150ms等等。而系统的响应延迟是指系统用户触发拍照到系统检测到拍照动作之间的时间间隔。不同的电子设备之间,系统的响应延迟会有所不同,可以通过不同电子设备的系统参数确定系统的响应延迟。在实际应用过程中,可以预定义一个时间T作为拍照响应延迟时间。比如500ms、300ms等等。
其中,本发明实施例中,在确定拍照响应延迟时间内保存帧数据的时间间隔,是综合考虑系统当前内存情况以及不同电子设备拍照响应延迟时间来确定的。
请进一步参阅图2,图2是本发明实施例提供的确定在拍照响应延迟时间内保存帧数据的时间间隔的流程图,如图所示,本发明实施例中,确定在拍照响应延迟时间内保存帧数据的时间间隔包括以下步骤:
S20:检测系统所剩余内存容量,根据系统所剩余内存容量以及预设的预留内存容量,确定用于保存帧数据的内存容量。
检测系统中当前所剩余的内存容量,假设为D。根据系统所剩余内存容量以及预设的预留内存容量,确定系统能够分配的用于保存帧数据的内存容量。
预留内存容量可以根据系统运行需要预先进行设置,假设为X。
那么,可以分配给相机应用来保存帧数据的内存容量M=D-X。
S21:以最大输出尺寸作为每帧数据的容量,根据用于保存帧数据的内存容量、每帧数据的容量以及拍照响应延迟时间确定保存帧数据的时间间隔。
最大输出尺寸为全尺寸输出状态下的尺寸,以最大输出尺寸下的数据容量作为每帧数据的容量,假设为Size。那么,在用来保存帧数据的内存容量M下所能够保存的帧数量F=M/Size。而进一步结合拍照响应延迟时间T,即可确定在拍照响应延迟时间内保存帧数据的时间间隔=T/F。
S103:根据时间间隔保存回显帧数据。
在确定保存帧数据的时间间隔后,电子设备根据时间间隔保存回显帧数据。
其中,本发明实施例中,在预览模式下,电子设备是实时获取帧数据的,但是在保存时,并不是每一帧数据都保存,而是根据时间间隔来控制保存满足预定条件的帧数据,这样能够更好的适配小内存的电子设备。
举例而言,请进一步参阅图3,图3是本发明实施例中根据时间间隔保存回显帧数据的流程图,如图所示,本发明实施例中根据时间间隔保存回显帧数据包括以下步骤:
S31:实时获取回显帧数据。
回显帧数据是以帧为单位进行发送的。电子设备实时获取回显帧数据。每获取到一个回显帧数据,即进入步骤S32。
S32:判断获取的当前回显帧数据是否为第一帧数据。
判断获取的当前回显帧数据是否为第一帧数据。在具体实现时,通过判断用于保存帧数据的内存中是否存在有帧数据来确定当前回显帧数据是否为第一帧数据,如果内存中存在有帧数据,那么当前回显帧数据不是第一帧数据,执行S34,否则,当前回显帧数据为第一帧数据,执行S33。
S33:保存当前回显帧数据至内存。
当判断到当前回显帧数据为第一帧数据时,直接保存当前回显帧数据至用于保存帧数据的内存中。
S34:判断当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于时间间隔。
当判断到当前回显帧数据不是第一帧数据时,进一步判断当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于时间间隔。因此每个回显帧数据都会有时间标签,在具体实现时,通过当前回显帧数据中的时间标签,与上一次内存中保存的回显帧数据的时间标签进行比较,确定两者之间的时间差,并判断该时间差是否大于或等于上述所确定的时间间隔。这里上一次内存中保存的回显帧数据是指当前内存中保存的帧数据中,与获取当前回显帧数据的时间最接近的时刻对应的帧数据。
在判断到当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差大于或等于上述时间间隔时,执行S33,否则执行S35。
在判断到当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差大于或等于上述时间间隔时,返回步骤S33,保存当前回显帧数据。
S35:丢弃当前回显帧数据。
在判断到当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差不大于或等于上述时间间隔时,丢弃当前回显帧数据。
也就是说,在本发明中,虽然电子设备实时获取回显帧数据,但是因为当前图像数据(即回显帧数据)都比较大,因此并不是每一帧都保存。所以在确定保存帧数据的时间间隔后,可以平滑的保存一段时间内的回显帧数据。例如当前的可用于缓存回显帧数据的内存仅够存放10帧的数据,而算法要求要保留500ms以内的数据帧,当摄像头输出图像的帧率在30fps时,如果每一帧数据都要保存下来,仅能保存约333ms内的数据,所以需要对按照以上方式对部分帧进行丢弃,以满足当前分配的内存能够保存500ms内的数据帧。
S104:在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近所述拍照响应延迟时间的回显帧数据,作为拍照结果。
当系统检测到拍照动作时,从内存中取出保存时间距当前时刻的时间间隔最接近拍照响应延迟时间T的帧数据,编码保存到永久存储器中比如SD卡,作为拍照结果。
本发明实施例中以时间来判断而不是直接取内存中保存的最早的帧数据作为拍照结果。这样的处理方式,可以同时适应正常光照环境和暗光环境的拍照。例如:当环境光照正常的时候,摄像头图像输出的帧率维持在比较高的水平,如30fps,而环境光比较暗的时候,摄像头图像的输出帧率维持在10fps,即内存中,保存的帧数据,在不同环境光照情况下,每秒保存的帧数是不一样的。所以,当分配内存为一定量的情况下,由于摄像头输出图像的帧率会随拍照环境光照情况的变化而变化,所以内存中保存的帧数据,并不是以固定的速率来保存的。当直接计算每帧数据距离当前时刻的时间差,并以此时间差最靠近T的帧数据作为真实用户想要的拍照时刻的帧图像数据,能够在帧率不断变化的情况下,准确抓拍到图像。
以上是本发明实施例提供的快速拍照的方法的详细说明,可以理解,本发明实施例的快速拍照方法,通过接收用户的拍照指令后,进入预览模式,确定在拍照响应延迟时间内保存帧数据的时间间隔,根据时间间隔保存回显帧数据,在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近拍照响应延迟时间的回显帧数据,作为拍照结果。通过这样的方式,能够实现快速抓拍,并且能够适应不同环境光照条件下也能准确抓拍到用户想拍的内容。
请参阅图4,图4是本发明实施例提供的一种电子设备的结构示意图,如图所示,本实施例的电子设备100包括接收模块11、确定模块12、保存模块13以及处理模块14,其中:
接收模块11用于接收用户的拍照指令,进入预览模式。
在用户发现想拍的事物时,启动电子设备的拍照应用。其中,用户启动电子设备的拍照应用可以通过现有常规的方式来实现,比如通过硬件按钮、软键盘上的特定按钮或者其他的特定触发方式触发启动电子设备的拍照应用。
接收模块11接收用户的拍照指令,进入相机预览模式。
其中,作为一种优选的实现方案,在进入相机预览模式后,处理模块14控制相机的输出尺寸为全尺寸输出(即拍照尺寸为全尺寸)。这种状态下,预览回显数据的每帧数据的容量都以最大尺寸下的数据容量计。
作为另一种优选的实现方案,在进入相机预览模式后,处理模块14控制电子设备的CPU的核心全部打开,在最高工作频率下工作。也就是说,在进入预览模式后,自动调整电子设备的CPU工作在能力最大的模式,CPU的核心全部打开,工作频率设置到最高。
确定模块12用于确定在拍照响应延迟时间内保存帧数据的时间间隔。
其中,本发明实施例中的拍照响应延迟是指用户想要拍照,到用户实际触发拍照,再到系统检测到拍照动作之间的时间间隔,该拍照响应延迟包括系统的响应延迟和用户的响应延迟。其中,用户的响应延迟是指用户想要拍照到实际触发拍照之间的响应延迟,该响应延迟可以为预设的响应延迟时间。比如为100ms、150ms等等。而系统的响应延迟是指系统用户触发拍照到系统检测到拍照动作之间的时间间隔。不同的电子设备之间,系统的响应延迟会有所不同,可以通过不同电子设备的系统参数确定系统的响应延迟。在实际应用过程中,可以预定义一个时间T作为拍照响应延迟时间。比如500ms、300ms等等。
其中,本发明实施例中,确定模块12在确定拍照响应延迟时间内保存帧数据的时间间隔,是综合考虑系统当前内存情况以及不同电子设备拍照响应延迟时间来确定的。
请进一步参阅图5,图5是本发明实施例的确定模块的结构示意图,如图所示,确定模块12包括第一确定单元121以及第二确定单元122,其中:
第一确定单元121用于检测系统所剩余的内存容量,根据系统所剩余内存容量以及预设的预留内容容量,确定用于保存帧数据的内存容量。
检测系统中当前所剩余的内存容量,假设为D。根据系统所剩余内存容量以及预设的预留内存容量,确定系统能够分配的用于保存帧数据的内存容量。
预留内存容量可以根据系统运行需要预先进行设置,假设为X。
那么,第一确定单元121可以分配给相机应用来保存帧数据的内存容量M=D-X。
第二确定单元122用于以最大输出尺寸作为每帧数据的容量,根据用于保存帧数据的内存容量、每帧数据的容量以及拍照响应延迟时间确定保存帧数据的时间间隔。
最大输出尺寸为全尺寸输出状态下的尺寸,以最大输出尺寸下的数据容量作为每帧数据的容量,假设为Size。那么,在用来保存帧数据的内存容量M下所能够保存的帧数量F=M/Size。而进一步结合拍照响应延迟时间T,即可确定在拍照响应延迟时间内保存帧数据的时间间隔=T/F。
保存模块13用于根据时间间隔保存回显帧数据。
在确定保存帧数据的时间间隔后,保存模块13根据时间间隔保存回显帧数据。
其中,本发明实施例中,在预览模式下,保存模块13是实时获取帧数据的,但是在保存时,并不是每一帧数据都保存,而是根据时间间隔来控制保存满足预定条件的帧数据,这样能够更好的适配小内存的电子设备。
其中,请进一步参阅图5,图5是本发明实施例保存模块的结构示意图,如图所示,本实施例的保存模块13包括获取单元131、第一判断单元132、第二判断单元133以及保存单元134、丢弃单元135,其中:
获取单元131用于实时获取回显帧数据。
回显帧数据是以帧为单位进行发送的。获取单元131实时获取回显帧数据。每获取到一个回显帧数据都输出给第一判断单元132。
第一判断单元132用于判断获取的当前回显帧数据是否为第一帧数据。
判断获取的当前回显帧数据是否为第一帧数据。在具体实现时,第一判断单元132通过判断用于保存帧数据的内存中是否存在有帧数据来确定当前回显帧数据是否为第一帧数据,如果内存中存在有帧数据,那么当前回显帧数据不是第一帧数据,通知第二判断单元133进行进一步的判断。否则,当前回显帧数据为第一帧数据,将当前回显帧数据输出给保存单元134进行保存。
保存单元用于在获取的当前回显帧数据是第一帧数据时,直接保存当前回显帧数据至内存。
第二判断单元133用于在获取的当前回显帧数据不是第一帧数据时,判断当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于所述时间间隔。
当第一判断单元131判断到当前回显帧数据不是第一帧数据时,第二判断单元133进一步判断当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差是否大于或等于时间间隔。因此每个回显帧数据都会有时间标签,在具体实现时,第二判断单元133通过当前回显帧数据中的时间标签,与上一次内存中保存的回显帧数据的时间标签进行比较,确定两者之间的时间差,并判断该时间差是否大于或等于上述所确定的时间间隔。这里上一次内存中保存的回显帧数据是指当前内存中保存的帧数据中,与获取当前回显帧数据的时间最接近的时刻对应的帧数据。
在判断到当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差大于或等于上述时间间隔时,将当前回显帧数据输出给保存单元134。否则,将当前回显帧数据输出给丢弃单元135。
保存单元134进一步用于在当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差大于或等于所述时间间隔,保存当前回显帧数据。
丢弃单元135用于在当前回显帧数据的时间与上一次内存中保存的回显帧数据的时间差不大于或等于时间间隔时,丢弃当前回显帧数据。
也就是说,在本发明中,虽然电子设备实时获取回显帧数据,但是因为当前图像数据(即回显帧数据)都比较大,因此并不是每一帧都保存。所以在确定保存帧数据的时间间隔后,可以平滑的保存一段时间内的回显帧数据。例如当前的可用于缓存回显帧数据的内存仅够存放10帧的数据,而算法要求要保留500ms以内的数据帧,当摄像头输出图像的帧率在30fps时,如果每一帧数据都要保存下来,仅能保存约333ms内的数据,所以需要对按照以上方式对部分帧进行丢弃,以满足当前分配的内存能够保存500ms内的数据帧。
处理模块14用于在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近拍照响应延迟时间的回显帧数据,作为拍照结果。
当系统检测到拍照动作时,处理模块14从内存中取出保存时间距当前时刻的时间间隔最接近拍照响应延迟时间T的帧数据,编码保存到永久存储器中比如SD卡,作为拍照结果。
本发明实施例中以时间来判断而不是直接取内存中保存的最早的帧数据作为拍照结果。这样的处理方式,可以同时适应正常光照环境和暗光环境的拍照。例如:当环境光照正常的时候,摄像头图像输出的帧率维持在比较高的水平,如30fps,而环境光比较暗的时候,摄像头图像的输出帧率维持在10fps,即内存中,保存的帧数据,在不同环境光照情况下,每秒保存的帧数是不一样的。所以,当分配内存为一定量的情况下,由于摄像头输出图像的帧率会随拍照环境光照情况的变化而变化,所以内存中保存的帧数据,并不是以固定的速率来保存的。当直接计算每帧数据距离当前时刻的时间差,并以此时间差最靠近T的帧数据作为真实用户想要的拍照时刻的帧图像数据,能够在帧率不断变化的情况下,准确抓拍到图像。
其中,本发明实施例中所提到的电子设备,可以是所有具有照相功能的电子设备,举例而言,可以是智能手机、数码照相机、ipad以及平板电脑等等。
以上是本发明实施例提供的快速拍照的方法及电子设备的详细说明,可以理解,本发明实施例的快速拍照方法,通过接收用户的拍照指令后,进入预览模式,确定在拍照响应延迟时间内保存帧数据的时间间隔,根据时间间隔保存回显帧数据,在检测到拍照动作时,自动提取保存时刻与当前时刻的时间差最接近拍照响应延迟时间的回显帧数据,作为拍照结果。通过这样的方式,能够实现快速抓拍,并且能够适应不同环境光照条件下也能准确抓拍到用户想拍的内容。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。