一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

图像生成方法、装置及存储介质与流程

2022-07-13 12:31:05 来源:中国专利 TAG:


1.本公开涉及图像处理技术领域,尤其涉及一种图像生成方法、装置及存储介质。


背景技术:

2.硬件抽象层(hardware abstraction layer,hal)是在具体的硬件平台上抽象出来的一个硬件接口层,这个接口层负责实现具体硬件平台的功能和控制,同时又为其它软件模块提供统一的接口(api)。但目前在hal层集成的算法和平台的耦合较为紧密,若平台方有所更新,集成代码也得随之进行修改;且不同平台方提供了各自不同的算法集成方式,因此就需要分别维护不同的集成代码,但其实调用的算法接口是一样的,增加了复杂性。


技术实现要素:

3.本公开提供一种图像生成方法、装置及存储介质。
4.根据本公开实施例的第一方面,提供一种图像生成方法,包括:
5.在检测到图像采集指令时,相机应用层将所述图像采集指令传输至相机服务层;
6.所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层;其中,所述拦截层位于所述第一硬件抽象层和所述第二硬件抽象层之间,集成有各类图像处理算法;
7.所述第二硬件抽象层基于所述图像采集指令,生成预览图像,并向所述拦截层返回所述预览图像;
8.所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,并向所述相机应用层返回所述目标图像。
9.可选地,所述方法还包括:
10.获取第二硬件抽象层所包含的各个方法的调用接口;
11.所述相机应用层根据所述图像采集指令,从多个所述调用接口中确定出目标接口;
12.所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层,包括:
13.所述相机服务层通过所述第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至所述第二硬件抽象层的所述目标接口。
14.可选地,所述获取第二硬件抽象层所包含的各个方法的调用接口,包括:
15.通过所述相机服务层访问所述第一硬件抽象层,利用所述第一硬件抽象层,确定所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识;
16.根据所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识,确定所述拦截层对应的第一动态数据库和所述第二硬件抽象层对应的第二动态数据库是否存在;
17.若存在,加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态
数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
18.可选地,所述加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口,包括:
19.根据预设的开启函数访问第一动态数据库,并通过第一动态数据库访问第二动态数据库,得到第二动态数据库的第一返回参数;
20.将所述第二动态数据库的第一返回参数传输至第一动态数据库,得到第一动态数据库的句柄;
21.将所述句柄传输给预设的调用函数,根据所述调用函数的第二返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
22.可选地,所述方法还包括:
23.获取所述图像采集指令中的图像采集参数;其中,所述图像采集参数包括:一个或多个图像优化参数;
24.所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,包括:
25.所述拦截层根据多个所述图像优化参数对应的优先级,确定各个所述图像优化参数对应的图像处理算法的处理顺序;
26.根据所述处理顺序,对所述预览图像进行处理,生成目标图像。
27.可选地,所述方法还包括:
28.通过对所述拦截层的配置方法的调用来访问所述拦截层的数据传递文件;
29.根据所述数据传递文件,获取各个所述图像优化参数对应的图像处理算法的处理顺序;其中,所述数据传递文件中存储有各个所述图像优化参数对应的优先级。
30.可选地,所述对所述预览图像进行处理,生成目标图像,包括:
31.根据所述数据传递文件,访问对应的算法节点文件;
32.根据所述算法节点文件,调用对应的图像处理算法对所述预览图像进行处理,生成目标图像。
33.可选地,所述图像优化参数包括:美颜参数或滤镜参数。
34.根据本公开实施例的第二方面,提供一种图像生成装置,包括:
35.第一传输模块,用于在检测到图像采集指令时,相机应用层将所述图像采集指令传输至相机服务层;
36.第二传输模块,用于所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层;其中,所述拦截层位于所述第一硬件抽象层和所述第二硬件抽象层之间,集成有各类图像处理算法;
37.生成模块,用于所述第二硬件抽象层基于所述图像采集指令,生成预览图像,并向所述拦截层返回所述预览图像;
38.处理模块,用于所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,并向所述相机应用层返回所述目标图像。
39.可选地,所述装置还包括:
40.获取模块,用于获取第二硬件抽象层所包含的各个方法的调用接口;
41.接口确定模块,用于所述相机应用层根据所述图像采集指令,从多个所述调用接口中确定出目标接口;
42.所述第二传输模块,还用于:
43.所述相机服务层通过所述第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至所述第二硬件抽象层的所述目标接口。
44.可选地,所述获取模块,包括:
45.标识确定模块,用于通过所述相机服务层访问所述第一硬件抽象层,利用所述第一硬件抽象层,确定所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识;
46.判断模块,用于根据所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识,确定所述拦截层对应的第一动态数据库和所述第二硬件抽象层对应的第二动态数据库是否存在;
47.加载模块,用于若存在,加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
48.可选地,所述加载模块,包括:
49.第一访问模块,用于根据预设的开启函数访问第一动态数据库,并通过第一动态数据库访问第二动态数据库,得到第二动态数据库的第一返回参数;
50.句柄获取模块,用于将所述第二动态数据库的第一返回参数传输至第一动态数据库,得到第一动态数据库的句柄;
51.获取子模块,用于将所述句柄传输给预设的调用函数,根据所述调用函数的第二返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
52.可选地,所述装置还包括:
53.参数获取模块,用于获取所述图像采集指令中的图像采集参数;其中,所述图像采集参数包括:一个或多个图像优化参数;
54.所述处理模块,包括:
55.顺序确定模块,用于所述拦截层根据多个所述图像优化参数对应的优先级,确定各个所述图像优化参数对应的图像处理算法的处理顺序;
56.图像处理模块,用于根据所述处理顺序,对所述预览图像进行处理,生成目标图像。
57.可选地,所述装置还包括:
58.第二访问模块,用于通过对所述拦截层的配置方法的调用来访问所述拦截层的数据传递文件;
59.顺序获取模块,用于根据所述数据传递文件,获取各个所述图像优化参数对应的图像处理算法的处理顺序;其中,所述数据传递文件中存储有各个所述图像优化参数对应的优先级。
60.可选地,所述图像处理模块,还用于:
61.根据所述数据传递文件访问对应的算法节点文件;
62.根据所述算法节点文件,调用对应的图像处理算法对所述预览图像进行处理,生成目标图像。
63.可选地,所述图像优化参数包括:美颜参数或滤镜参数。
64.根据本公开实施例的第三方面,提供一种图像生成装置,包括:
65.处理器;
66.用于存储处理器可执行指令的存储器;
67.其中,所述处理器被配置为:执行所述存储器中存储的可执行指令时,实现上述第一方面的任一项所述的方法。
68.根据本公开实施例的第四方面,提供一种非临时性计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述第一方面任一项提供的方法中的步骤。
69.本公开的实施例提供的技术方案可以包括以下有益效果:
70.本公开实施例提供的图像生成方法,由于将第三方公司研发出的各类算法从平台方对应的第二硬件抽象层上剥离开来,单独集成在第一硬件抽象层和第二硬件抽象层之间的拦截层上,解耦了算法和平台;那么一方面,由于算法现集成在拦截层上,第三方公司在更换平台方后,算法移植上更为容易,也无需为适应不同的平台所进行的代码修改,可以大幅降低软件开发的复杂性。另一方面,引入了拦截层,将各类算法集成在拦截层来实现单模块维护,可以减少将一部分算法集成在第二硬件抽象层,而另一部分算法集成在拦截层所带来的重复工作量。最后,算法的集成位置变得统一,维护相对简便,也提升了整个硬件抽象层的稳定性。
71.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
72.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
73.图1是根据一示例性实施例示出的一种图像生成方法的流程图一。
74.图2是根据一示例性实施例示出的相机架构图。
75.图3是根据一示例性实施例示出的一种硬件抽象层的调用示意图。
76.图4是根据一示例性实施例示出的一种图像生成方法的流程图二。
77.图5示出了一种获取第二硬件抽象层所包含的各个方法的调用接口的时序图。
78.图6是一种图像处理顺序的示意图。
79.图7示出了一种拦截层算法集成框架的时序图。
80.图8是根据一示例性实施例示出的一种图像生成装置的结构示意图。
81.图9是根据一示例性实施例示出的一种图像生成装置的框图。
具体实施方式
82.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例
中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
83.本公开实施例提供一种图像生成方法,图1是根据一示例性实施例示出的一种图像生成方法的流程图一,如图1所示,该图像生成方法包括以下步骤:
84.步骤101,在检测到图像采集指令时,相机应用层将所述图像采集指令传输至相机服务层;
85.步骤102,所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层;其中,所述拦截层位于所述第一硬件抽象层和所述第二硬件抽象层之间,集成有各类图像处理算法;
86.步骤103,所述第二硬件抽象层基于所述图像采集指令,生成预览图像,并向所述拦截层返回所述预览图像;
87.步骤104,所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,并向所述相机应用层返回所述目标图像。
88.需要说明的是,该图像生成方法可以应用于任意的移动终端,该移动终端可以是:智能手机、平板电脑或者可穿戴式电子设备等。移动终端内包含有图像采集模组,基于该图像采集模组和对应的软件算法完成图像和采集和生成。
89.为了更好描述本公开实施例的图像生成方法,本公开给出了一种相机架构图,在该相机架构下实现图像的生成。图2是根据一示例性实施例示出的相机架构图,如图2所示,本公开中的相机架构大至可以分为四层,包括:相机应用(camera app)层、应用框架(framework)层、硬件抽象(hal)层和相机内核(camera kernel)层,各层的作用具体如下:
90.相机应用层:即面向用户的相机应用,如手机自带的相机应用或者用户下载的相机应用等。应用开发者调用操作系统提供的相机应用的通用接口,通过这些通用接口对框架(f ramework)层的相机服务进行操作与数据传递。
91.应用框架层:包含相机服务(camera service)层,是承上启下的作用,向上与相机应用层交互,向下与硬件抽象层交互。
92.hal层:用于实现具体硬件平台的功能和对硬件平台的控制,同时又为其它软件模块提供统一的api。hal层的产生就是为了将硬件操作和控制的共性抽象出来,向上层软件模块提供统一的操控接口,以实现软件模块与底层硬件的隔离。那么,在设置了hal层后,软件系统在新硬件平台上的移植就变得异常简单,只需提供新硬件的抽象层,就可以将整个软件系统(包括应用)移植到新硬件平台上,以实现软件模块与底层硬件的隔离。
93.相机内核层:包含驱动层,相机内核层通过提供统一的驱动操作接口供应用层使用,驱动层就是在这层统一的接口下,实现对硬件的操控的中间层。如实现对显示、音频、相机、蓝牙、wi-fi或电源的操控等。
94.需要说明的是,本公开实施例中,hal层包含:系统方对应的第一硬件抽象层、拦截层和平台方对应的第二硬件抽象层。
95.第一硬件抽象层包含有:操作系统定义的应用框架层与hal层通信的协议和接口,在定义了协议和接口后,其他需要使用该操作系统的使用者,可以根据该定义,实现接口。例如,该操作系统可以是:谷歌公司(google)提供的安卓系统,该第一硬件抽象层可以是google hal层。
96.第二硬件抽象层是:待使用第一硬件抽象层定义接口的平台方,进行定制化操作的层,通过定制化操作,实现第一硬件抽象层所定义的那些定制化的接口。
97.在一些实施例中,待使用第一硬件抽象层定义接口的平台方可以是:高通或联发科等厂商,如此,第二硬件抽象层可以称为vendor hal层。
98.目前各个平台方已经实现有第一硬件抽象层定义的这些接口;如高通的camx平台,联发科的hal3平台,这些平台上提供了各类算法的集成方式。如此,可以理解为第一硬件抽象层定义了可以让相机服务访问的接口,而第二硬件抽象层实现了这些接口。
99.需要说明的是,当第三方公司想基于操作系统定制自己的相机功能时,就需要将自研算法集成在第二硬件抽象层上。在第二硬件抽象层上,平台方给第三方公司提供了算法的集成方式。第三方公司可以基于该平台方提供的集成方式,将自主研发的算法载入第二硬件抽象层。
100.这里,该平台方可以是高通或联发科等平台厂商;该第三方公司可以是各类应用型公司,例如,小米或三星等基于安卓系统实现各自对应应用功能的公司。
101.由于不同的平台方供了各自不同的集成方式,因此第三方公司就需要分别维护多套集成代码,但实质上算法的调用接口是一样的,会造成很多不必要的麻烦。并且,hal层算法的集成和平台耦合较为紧密,一旦平台方有所更新,集成代码也得随之进行修改。
102.为此,本公开就提出了在第一硬件抽象层和第二硬件层之间设置拦截层,将各类图像处理算法集成在拦截层。这样,当第三方公司更换平台后,第三方公司的自研算法在移植上更为容易,只需要将拦截层的代码直接移植到新的平台即可;且无需为适应不同的平台所进行的代码修改,大幅降低软件开发的复杂性。
103.基于该安卓系统相机架构,当手机上的相机应用上的图像采集控件被触发时,相机应用层检测到图像采集指令。在一些实施例中,该图像采集指令中携带有图像采集参数,所述图像采集参数包括:用于指示待调用的硬件模组的第一参数、用于指示各个硬件模组的工作模式的第二参数,和/或,用于指示图像优化模式的第三参数;该图像优化模式包括:美颜模式或滤镜模式。
104.这里,美颜模式是用于美化人像肌肤和/或人像面部五官的图像处理模式,可以在拍摄人像照片时,根据人像的面部特征建立美颜方案,来达到美化人像肌肤和/或人像面部五官的效果。
105.在美颜模式下,可以根据人像的面部特征确定美颜方案,基于美颜方案确定待使用的美颜算法,进而通过美颜算法中的美颜参数的选取,来实现不同的美颜效果。
106.滤镜模式是用于调整图像的整体色调的图像处理模式,可以实现图像的各种特殊效果,改善图像的色调。在滤镜模式下,可以根据图像的原有色调确定滤镜方案,基于滤镜方案确定待使用的滤镜算法,进而通过滤镜算法中的滤镜参数的选取,来实现图像不同的色调效果。
107.这样,可以基于图像采集指令中的图像采集参数,控制待调用的硬件模组在对应的工作模式下工作,从而生成需要的预览图像,并对该预览图像进行处理美颜模式或滤镜模式处理,生成目标图像。
108.为支持上述的图像生成过程,在检测到图像采集指令后,相机应用层将该图像采集指令传输至相机服务层,相机服务层将通过第一硬件抽象层所提供的接口,经由拦截层
将所述图像采集指令传输至第二硬件抽象层,第二硬件抽象层基于所述图像采集指令,通过调用底层硬件(如相机)生成预览图像,进而经由拦截层一层层向上返回所述预览图像。
109.其中,当预览图像返回至拦截层时,如果该图像采集指令中携带有所述用于指示图像优化模式的第三参数时,由于拦截层集成有图像优化模式对应的图像处理算法(如美颜算法),则拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,进而经由相机服务层向相机应用层返回所述目标图像。
110.如此,在本公开通过将第三方公司研发出的各类算法从平台方对应的第二硬件抽象层上剥离开来,单独集成在第一硬件抽象层和第二硬件抽象层之间的拦截层上的方式,解耦了算法和平台;不仅可以照常完成对应的功能处理,还无需为适应不同的平台所进行的代码修改,大幅降低软件开发的复杂性,在维护上也更为容易。
111.需要说明的是,在加入该拦截层后,在硬件抽象层上的调用顺序也会发生对应的变化,图3是根据一示例性实施例示出的一种硬件抽象层的调用示意图,如图3所示,加入拦截层之前,即图3中的虚线所示,第一硬件抽象层会直接调用第二硬件抽象层实现的方法,第二硬件抽象层也会直接调用第一硬件抽象层的一系列回调函数,如process_capture_result()。
112.加入拦截层之后,即图3中的实线所示,当第一硬件抽象层通过接口函数:hw_get_module()获取相机模组接口(camera module)时,获取到的是拦截层实现的“camera_module_t”,而不是第二硬件抽象层实现的“camera_module_t”。
113.当第一硬件抽象层调用第二硬件抽象层的方法时,需要先经过拦截层,然后拦截层再将数据下发给第二硬件抽象层。同样,当第二硬件抽象层调用回调函数时,需要先调用拦截层的回调函数,然后拦截层再回调第一硬件抽象层的回调函数。
114.这样,加入拦截层之后,第三方公司便可以将自己的定制化算法集成在拦截层,便于和平台方的解耦,同时减少维护算法集成代码的工作量。
115.在一些实施例,图4是根据一示例性实施例示出的一种图像生成方法的流程图二,如图4所示,该所述方法还包括:
116.步骤105,获取第二硬件抽象层所包含的各个方法的调用接口;
117.步骤106,所述相机应用层根据所述图像采集指令,从多个所述调用接口中确定出目标接口。
118.这里,由于第二硬件抽象层上实现了第一硬件抽象层定义的定制化接口,通过该接口可以实现对底层硬件的调用,以图像生成为例,则可实现对相机模组的驱动,来生成预览图像。
119.本公开实施例中,第二硬件抽象层上实现的定制化接口包括:各类方法的调用接口。例如,图像预览方法的调用接口、图像采集方法的调用接口或录像方法的调用接口等这些图像处理方法的接口。
120.在获取到图像采集指令后,可以根据图像采集指令中携带的图像采集参数,确定出此次处理所涉及的方法。进而在确定出要使用该方法后,从多个调用接口中去找到该方法对应的目标接口。
121.基于确定出的目标接口,上述步骤102中,所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件
抽象层,包括:
122.所述相机服务层通过所述第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至所述第二硬件抽象层的所述目标接口。
123.这里,在从图像采集指令中确定目标接口后,相机服务层就可以通过所述第一硬件抽象层所提供的所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层的该目标接口,实现对目标方法进行调用。如此,可以基于该目标接口,实现对目标方法的调用,达到对应的处理目的。
124.在一些实施例,步骤105中,所述获取第二硬件抽象层所包含的各个方法的调用接口,包括:
125.通过所述相机服务层访问所述第一硬件抽象层,利用所述第一硬件抽象层,确定所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识;
126.根据所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识,确定所述拦截层对应的第一动态数据库和所述第二硬件抽象层对应的第二动态数据库是否存在;
127.若存在,加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
128.这里,本公开实施例通过硬件抽象层的动态数据库(dll)的返回参数,来获取第二硬件抽象层所包含的各个方法的调用接口。
129.动态数据库作为共享函数库的可执行文件,提供了使进程可以调用不属于其可执行代码的函数的方法。动态数据库可以认为是能够被应用程序和其它的dll调用的过程和函数的集合体,它里面包含的是公共代码或资源,为不同语言间代码共享提供了途径,有助于共享数据和资源。
130.为了能够访问到动态数据库,本公开实施例在通过相机服务层访问到第一硬件抽象层后,先利用第一硬件抽象层,确定第二硬件抽象层的动态数据库标识和截层的动态数据库标识。
131.这里,图5示出了一种获取第二硬件抽象层所包含的各个方法的调用接口的时序图,如图5所示,在相机的provider进程初始化的过程中,第一硬件抽象层会在方法legacycameraproviderimpl_2_4::initialize()中,调用方法hw_get_module()经由拦截层的动态数据库,获来取第二硬件抽象层动态数据库中的“camera_mudule_t”的句柄,并通过参数“rawmodule”将该句柄带回到第一硬件抽象层。
132.需要说明的是,在调用方法hw_get_module()获来取第二硬件抽象层动态库中的camera_mudule_t的句柄之前,需要先确定第二硬件抽象层的动态数据库标识。这里,动态数据库标识可以用于区分出各个动态数据库,该动态数据库标识可以包括:动态数据库的名称或动态数据库的编号。
133.本公开实施例中,通过在hw_get_module_by_class()方法中查询一系列属性(property),来确定第二硬件抽象层的动态数据库标识,具体地:
134.属性的信息如下表所示:
135.轮询property的顺序属性名(property name)属性值(property value)
1ro.hardware.cameranull2ro.hardwareqcom3ro.product.boardgauguin4ro.board.platformlito
136.表1
137.对于第二硬件抽象层而言,在通过在hw_get_module_by_class()方法中查询属性(property)的过程中,当遇到的第一个不为空的属性值,即属性名为“ro.hardware”对应的属性值不为空,就会将字符串“camera”与该属性值“qcom”组成一个后缀为“.so”的动态库名称“camera.qcom.so”。如此,确定出第二硬件抽象层的动态数据库标识为“camera.qcom.so”。
138.本公开实施例中,由于第一硬件抽象层和第二硬件抽象层之间加入了拦截层,访问第二硬件抽象层之前需要先访问拦截层,如此,为了让第一硬件抽象层加载拦截层的动态数据库而不是加载第二硬件抽象层的动态数据库,可以将上表中,属性名为“ro.hardware.camera”对应的属性值从“null”改为“xx”,x可取任意的字符。那么,对于拦截层而言,通过hw_get_module_by_class()方法中查询属性(property)的过程所确定的拦截层的动态数据库标识就是“camera.xx.so”。
139.在确定出第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识后,就需要通过该标识找到对应的动态数据库进行访问。这里,拿到第二硬件抽象层的动态数据库标识后,可以通过hw_get_module_by_class()调用方法hw_module_exists(),查询第二硬件抽象层的动态数据库“camera.qcom.so”是否存在,如果存在,就调用load()方法加载第二硬件抽象层的动态数据库。对应的,在拿到拦截层的动态数据库标识后,也可以通过hw_get_module_by_class()调用方法hw_module_exists(),查询拦截层的动态数据库“camera.xx.so”是否存在,如果存在,就调用load()方法加载该拦截层的动态数据库。
140.这里,在load()方法加载动态数据库时,会返回有对应的返回参数,该返回参数中包含有第二硬件抽象层所包含的各个方法的调用接口,如此,可以实现对第二硬件抽象层所包含的各个方法的调用接口的获取。
141.在一些实施例中,上述加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口,包括:
142.根据预设的开启函数访问第一动态数据库,并通过第一动态数据库访问第二动态数据库,得到第二动态数据库的第一返回参数;
143.将所述第二动态数据库的第一返回参数传输至第一动态数据库,得到第一动态数据库的句柄;
144.将所述句柄传输给预设的调用函数,根据所述调用函数的第二返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
145.这里,通过load()方法加载拦截层对应的第一动态数据库和第二硬件抽象层对应的第二动态数据库。
146.上述预设的开启函数为dlopen(),该dlopen()包含:路径名参数(pathname)和模式参数(mode),通过路径名参数找到对应的动态数据库,进而通过对应的模式参数开启动
态数据库。
147.预设的调用函数为dlsym(),该dlsym()包含:句柄参数(handle)和要求获取的函数的名称参数(sym)。handle是使用dlopen()之后返回的句柄,sym是要求获取的函数的名称。该dlsym()的返回值是void*,指向函数的地址,供调用使用。
148.如图5所示,在load()方法的加载中,由于是先访问拦截层再访问第二硬件抽象层,则先通过dlopen()访问拦截层的第一动态数据库“camera.xx.so”,再经由第一动态数据库通过dlopen()继续去访问第二硬件抽象层的第二动态数据库“camera.qcom.so”,得到第一返回参数,即图3所示的“handle”,将该“handle”传输至第一动态数据库“camera.xx.so”,得到第一动态数据库的句柄(即“handle”)。
149.进一步地,将该句柄作为dlsym()的参数,来访问拦截层的第一动态数据库“camera.xx.so”,再经由第一动态数据库通过dlopen()继续去访问第二硬件抽象层的第二动态数据库“camera.qcom.so”,得到第二返回参数,即图3所示的“camera_module_t*”。
150.这里,“camera_module_t*”的地址中包含有第二硬件抽象层所包含的各个方法的调用接口,后续在使用中当需要用到对应的方法时,就调用对应的接口,实现访问,方便快捷。
151.在一些实施例中,所述方法还包括:
152.步骤107,获取所述图像采集指令中的图像采集参数;其中,所述图像采集参数包括:一个或多个图像优化参数。
153.这里,本公开实施例中的第三方公司的自研算法是集成在拦截层,在相机应用中的,该自研算法包括:美颜算法和滤镜算法。那么,当图像采集指令中的图像采集参数中包含一个或多个图像优化参数时,意味着当前的图像生成是包含有图像处理的过程,需要在生成预览图像(即原始图像)后,通过图像采集指令中的图像优化参数,在对应的图像优化模式下对该预览图像进行处理,生成目标图像。
154.在一些实施例中,所述图像优化参数包括:美颜参数或滤镜参数。
155.该美颜参数用于指示对预览图像进行美颜的程度,滤镜参数用于指示预览图像处理后的色调。
156.但需要说明的是,如果图像采集指令中只有一个图像优化参数时,就可以直接通过该图像优化参数在对应的图像优化模式下对该预览图像进行处理,生成目标图像。如果图像采集指令中有多个图像优化参数时,需要先确定出各个图像优化参数的处理顺序,基于该处理顺序对预览图像进行处理。
157.这样,上述步骤104中,所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,包括:
158.所述拦截层根据多个所述图像优化参数对应的优先级,确定各个所述图像优化参数对应的图像处理算法的处理顺序;
159.根据所述处理顺序,对所述预览图像进行处理,生成目标图像。
160.这里,不同的图像优化参数对应有不同的图像处理算法。例如,美颜参数对应的是美颜算法。
161.多个图像优化参数对应的优先级可以基于用户的使用习惯确定,是预先确定的。例如,用户习惯对每张照片都进行滤镜处理,则滤镜参数对应的优先级最高。本公开对多个
图像优化参数的优先级的确定不作限定。
162.这里,优先级高低与处理的先后顺序成对应关系,即优先级高则先处理,优先级低则后处理。
163.图6是一种图像处理顺序的示意图,如图6所示,输入图像后,如果确定美颜算法先于滤镜算法,则先通过美颜算法对预览图像进行处理,得到美颜图像,再通过滤镜算法对美颜图像进行处理,输出目标图像。
164.这样,在确定执行顺序后,通该执行顺序对预览图像执行处理,可以避免处理的混乱性。
165.下面对执行顺序的获取作如下介绍:
166.在一些实施例中,所述方法还包括:
167.通过对所述拦截层的配置方法的调用来访问所述拦截层的数据传递文件;
168.根据所述数据传递文件,获取各个所述图像优化参数对应的图像处理算法的处理顺序;其中,所述数据传递文件中存储有各个所述图像优化参数对应的优先级。
169.这里,拦截层的配置方法,用于给其他模块提供访问拦截层的配置参数。本公开实施例的配置方法可以是:configure_streams()方法。
170.拦截层的数据传递文件,用于定义拦截层中各类算法的执行顺序,例如,定义美颜算和滤镜算法的执行顺序。这里,处理功能相同的算法认为是同一类算法,美颜算法和滤镜算法由于处理功能不同,就属于不同类算法。本公开实施例的数据传递文件可以是:pipeline.cpp。
171.本公开实施例中,该拦截层还包括:入口文件,用于给需要调用拦截层算法的其他模块提供访问入口。例如,给第一硬件抽象层提供访问入口。入口文件可以是hal3entry.cpp。
172.这样,该通过对所述拦截层的配置方法的调用来访问所述拦截层的数据传递文件,包括:
173.通过对拦截层的配置方法的调用,来访问拦截层的入口文件;
174.通过该入口文件来访问所述拦截层的数据传递文件。
175.图7示出了一种拦截层算法集成框架的时序图,如图7所示,通过对拦截层的configure_streams()方法的调用,来访问拦截层的hal3entry.cpp;通过该hal3entry.cpp来访问所述拦截层的pipeline.cpp。在访问到pipeline.cpp后,由于预先设置的执行顺序是存储在该数据传递文件内,可通过访问该数据传递文件获取执行顺序,或者说获取各个所述图像优化参数对应的优先级。
176.除了图像处理的应用流程之外,如图7中所示:当第一硬件抽象层调用拦截层的configure_streams()方法时,拦截层会初始化集成在拦截层的算法实例。当第二硬件抽象层调用拦截层的process_capture_result()方法时,拦截层会对数据进行拦截,然后调用拦截层的算法对数据进行后处理。当相机应用层关闭当前相机应用时,第一硬件抽象层会调用拦截层的close()方法,拦截层的算法实例会在这个时候被析构掉。如此,可以基于图7获知拦截层的各类理流程。
177.在一些实施例,所述对所述预览图像进行处理,生成目标图像,包括:
178.根据所述数据传递文件,访问对应的算法节点文件;
179.根据所述算法节点文件,调用对应的图像处理算法对所述预览图像进行处理,生成目标图像。
180.这里,算法节点文件为algobasenode.cpp。
181.为了在拦截层上统一各个集成算法对外的接口,各集成算法的所属类必须继承抽象类algobasenode{},并重写基类的虚函数接口。
182.这里,在使用中,各种图像处理算法都需继承该抽象类algobasenode{}。例如,beautynode{}就是继承自抽象类algobasenod{},美颜算法的集成代码主要是在beautynode.cpp中实现。
183.在通过该入口文件来访问所述拦截层的数据传递文件后,通过algobasenode()这一抽象类,来访问算法节点文件。进而就调用对应的图像处理算法,如图7所示的美颜算法:beautynode()来对所述预览图像进行处理,生成目标图像。
184.需要说明的是,由于本公开实施例中在硬件抽象层中加入了拦截层,为了支持该拦截层的实现,本公开实施例在拦截层实现第一硬件抽象层定义的hal层固定接口,实现承上(即第一硬件抽象层)启下(即第二硬件抽象层)的透传功能。
185.如此,本公开实施例提供的图像生成方法,相机应用层将检测的图像采集指令传输至相机服务层,以使相机服务层通过第一硬件抽象层所提供的接口,经由拦截层将图像采集指令传输至第二硬件抽象层,第二硬件抽象层则基于该图像采集指令生成预览图像。在生成预览图像后,就逐步向上一层返回该预览图像,由于本公开的拦截层上集成有各类图像处理算法,拦截层在收到预览图像后,就基于对应的图像处理算法对预览图像进行处理生成目标图像,并向它的上一层相机应用层返回该目标图像。
186.这样,由于本公开将第三方研发出的各类算法从平台方对应的第二硬件抽象层上剥离开来,单独集成在第一硬件抽象层和第二硬件抽象层之间的拦截层上,解耦了算法和平台;那么一方面,本公司的产品在更换平台方后,在移植上更为容易,也无需为适应不同的平台所进行的代码修改,可以大幅降低软件开发的复杂性。另一方面,引入了拦截层,将各类算法集成在拦截层来实现单模块维护,可以减少将一部分算法集成在第二硬件抽象层,而另一部分算法集成在拦截层所带来的重复工作量,最后,算法的集成位置变得统一,维护相对简便,也提升了整个硬件抽象层的稳定性。
187.本公开还提供一种图像生成装置,图8是根据一示例性实施例示出的一种图像生成装置的结构示意图,如图8所示,所述图像生成装置900,包括:
188.第一传输模块901,用于在检测到图像采集指令时,相机应用层将所述图像采集指令传输至相机服务层;
189.第二传输模块902,用于所述相机服务层通过系统方对应的第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至平台方对应的第二硬件抽象层;其中,所述拦截层位于所述第一硬件抽象层和所述第二硬件抽象层之间,集成有各类图像处理算法;
190.生成模块903,用于所述第二硬件抽象层基于所述图像采集指令,生成预览图像,并向所述拦截层返回所述预览图像;
191.处理模块904,用于所述拦截层根据所述图像采集指令确定的图像处理算法,对所述预览图像进行处理,生成目标图像,并向所述相机应用层返回所述目标图像。
192.在一些实施例中,所述装置还包括:
193.获取模块,用于获取第二硬件抽象层所包含的各个方法的调用接口;
194.接口确定模块,用于所述相机应用层根据所述图像采集指令,从多个所述调用接口中确定出目标接口;
195.所述第二传输模块,还用于:
196.所述相机服务层通过所述第一硬件抽象层所提供的接口,经由拦截层将所述图像采集指令传输至所述第二硬件抽象层的所述目标接口。
197.在一些实施例中,所述获取模块,包括:
198.标识确定模块,用于通过所述相机服务层访问所述第一硬件抽象层,利用所述第一硬件抽象层,确定所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识;
199.判断模块,用于根据所述第二硬件抽象层的动态数据库标识和所述拦截层的动态数据库标识,确定所述拦截层对应的第一动态数据库和所述第二硬件抽象层对应的第二动态数据库是否存在;
200.加载模块,用于若存在,加载所述第一动态数据库和所述第二动态数据库,并基于所述第一动态数据库和所述第二动态数据库的返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
201.在一些实施例中,所述加载模块,包括:
202.第一访问模块,用于根据预设的开启函数访问第一动态数据库,并通过第一动态数据库访问第二动态数据库,得到第二动态数据库的第一返回参数;
203.句柄获取模块,用于将所述第二动态数据库的第一返回参数传输至第一动态数据库,得到第一动态数据库的句柄;
204.获取子模块,用于将所述句柄传输给预设的调用函数,根据所述调用函数的第二返回参数,获取第二硬件抽象层所包含的各个方法的调用接口。
205.在一些实施例中,所述装置还包括:
206.参数获取模块,用于获取所述图像采集指令中的图像采集参数;其中,所述图像采集参数包括:一个或多个图像优化参数;
207.所述处理模块,包括:
208.顺序确定模块,用于所述拦截层根据多个所述图像优化参数对应的优先级,确定各个所述图像优化参数对应的图像处理算法的处理顺序;
209.图像处理模块,用于根据所述处理顺序,对所述预览图像进行处理,生成目标图像。
210.在一些实施例中,所述装置还包括:
211.第二访问模块,用于通过对所述拦截层的配置方法的调用来访问所述拦截层的数据传递文件;
212.顺序获取模块,用于根据所述数据传递文件,获取各个所述图像优化参数对应的图像处理算法的处理顺序;其中,所述数据传递文件中存储有各个所述图像优化参数对应的优先级。
213.在一些实施例中,所述图像处理模块,还用于:
214.根据所述数据传递文件访问对应的算法节点文件;
215.根据所述算法节点文件,调用对应的图像处理算法对所述预览图像进行处理,生成目标图像。
216.在一些实施例中,所述图像优化参数包括:美颜参数或滤镜参数。
217.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
218.图9是根据一示例性实施例示出的一种图像生成装置1800的框图。例如,装置1800可以是移动电话、计算机、数字广播终端、消息收发设备、游戏控制台、平板设备、医疗设备、健身设备、个人数字助理等。
219.参照图9,装置1800可以包括以下一个或多个组件:处理组件1802,存储器1804,电力组件1806,多媒体组件1808,音频组件1810,输入/输出(i/o)接口1812,传感器组件1814,以及通信组件1816。
220.处理组件1802通常控制装置1800的整体操作,诸如与显示、电话呼叫、数据通信、相机操作和记录操作相关联的操作。处理组件1802可以包括一个或多个处理器1820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件1802还可以包括一个或多个模块,便于处理组件1802和其他组件之间的交互。例如,处理组件1802可以包括多媒体模块,以方便多媒体组件1808和处理组件1802之间的交互。
221.存储器1804被配置为存储各种类型的数据以支持在装置1800的操作。这些数据的示例包括用于在装置1800上操作的任何应用程序或方法的指令、联系人数据、电话簿数据、消息、图像、视频等。存储器1804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器(prom)、只读存储器(rom)、磁存储器、快闪存储器、磁盘或光盘。
222.电力组件1806为装置1800各种组件提供电力。电力组件1806可以包括:电源管理系统,一个或多个电源,及其他与为装置1800生成、管理和分配电力相关联的组件。
223.多媒体组件1808包括在所述装置1800和用户之间提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件1808包括一个前置摄像头和/或后置摄像头。当装置1800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和/或后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
224.音频组件1810被配置为输出和/或输入音频信号。例如,音频组件1810包括一个麦克风(mic),当装置1800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器1804或经由通信组件1816发送。在一些实施例中,音频组件1810还包括一个扬声器,用于输出音频信号。
225.i/o接口1812为处理组件1802和外围接口模块之间提供接口,上述外围接口模块可以是键盘、点击轮、按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和
锁定按钮。
226.传感器组件1814包括一个或多个传感器,用于为装置1800提供各个方面的状态评估。例如,传感器组件1814可以检测到装置1800的打开/关闭状态、组件的相对定位,例如所述组件为装置1800的显示器和小键盘,传感器组件1814还可以检测装置1800或装置1800一个组件的位置改变,用户与装置1800接触的存在或不存在,装置1800方位或加速/减速和装置1800的温度变化。传感器组件1814可以包括接近传感器,被配置为在没有任何的物理接触时检测附近物体的存在。传感器组件1814还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件1814还可以包括加速度传感器、陀螺仪传感器、磁传感器、压力传感器或温度传感器。
227.通信组件1816被配置为便于装置1800和其他设备之间有线或无线方式的通信。装置1800可以接入基于通信标准的无线网络,如wifi、2g或3g,或它们的组合。在一个示例性实施例中,通信组件1816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件1816还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术、超宽带(uwb)技术、蓝牙(bt)技术或其他技术来实现。
228.在示例性实施例中,装置1800可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
229.在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1804,上述指令可由装置1800的处理器1820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
230.一种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得能够执行上述方法。
231.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
232.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献