相机控制方法

文档序号:6368149阅读:224来源:国知局
专利名称:相机控制方法
技术领域
本发明涉及一种相机控制方法。
背景技术
目前,例如通过计算 机进行证件照片拍摄的应用越来越广泛,而通过例如计算机的智能设备控制相机是证件照拍摄系统所必不可少的一部分。不过对于应用系统如身份证人像采集系统、护照人像采集系统等而言,要支持相机取景框视频实时预览,又要实现界面响应,同时还要做到支持不同型号的相机。由于有一部分相机厂商提供的SDK (SoftwareDevelopment Kit,即软件开发工具包)调用只能在同一个子线程完成,如佳能1100D的SDK,这给开发者带来了很大的麻烦。相机制造商为开发人员提供了丰富的SDK资源,便于开发人员进行开发。SDK —般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合,一般由头文件(.H)、库文件(.lib)和动态链接库文件(.dll)组成。它可以简单的为某个程序设计语言提供应用程序接口 API (Application ProgrammingInterface,应用编程接口)的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。依据前述内容可知,通过SDK控制层,SDK所包含的功能模块能够为应用程序所使用。不过当前相机管理模块对相机基本动作的调用都采用多个子线程控制,使得支持一个子线程调用的SDK在被调用时实现会非常麻烦。

发明内容
当前相机管理控制方法不能够支持SDK调用只能在同一个子线程完成的情形,在这样的情形中,相机管理控制模块的通用性受到软件环境的制约比较强,造成其通用性差。因此,为了提高相机控制方法的通用性,依据本发明,可以采用以下技术方案 一种相机控制方法,应用系统发起对相机操作的调用,被调用操作的主线程进入应用
系统临界区,执行被调用操作的指令子线程,并在指令子线程执行完毕后主线程离开应用系统临界区;
所述指令子线程为对相机基本动作的调用,被调用的基本动作封装在相机SDK中。依据上述相机控制方法,被调用操作的主线程进入应用系统临界区,阻止多个进程同时访问同一资源,为了保证对相机的单一操作,此时别的指令调用将在此处等待。采用同一个子线程控制所有对象及基本动作的调用,从而,可以支持那些SDK调用必须在同一子线程完成情况的相机中,而这种调用方式也满足其他相机的应用,实现控制方法的通用性。依据较佳的实例,本发明的目的还可以通过以下技术方案进一步实现,针对相机SDK封装的所有基本动作,以基本动作为列表单元在应用系统初始化时创建相机列表对象并获取相机列表,以索引方式查询列表对象以备调用。在应用系统初始化时创建线程等待事件并设置该线程等待事件为未触发,从而,当无应用系统发起对相机操作的调用时,挂起执行指令子线程;而在主线程进入应用系统临界区时,清空线程等待事件,激活指令子线程的执行;并在应用系统调用子线程完成后重新挂起执行指令子线程。执行指令子线程退出标志为一布尔表达式,从而,在该布尔型表达式为真时,指令执行子线程将退出;而在该布尔表达式为假时,指令执行子线程被循环执行。指令的执行采用无阻塞方式。所述指令子线程为后台线程。相机SDK封装的所有基本动作并进一步封装,被封装的对应于基本动作的每一个操作对外发布为一个接口,每个接口对应有一个指令,以备上层调用;其中,指令对应于所述相机列表的索引项,且对应为所述指令子线程中的指令。在应用系统初始化时创建指令等待事件并设置为未被触发,并在所述指令等待事件未触发时,指令等待事件的线程被挂起;而当事件触发时,指令等待事件被激活。为每一个所述指令创建一个应用系统内核对象事件,该应用系统内核事件属于所述指令等待事件。


图I为依据本发明的一种部署结构图,虚线框内为依据本发明的结构原理。图2为一种相机管理方法结构框图,上边的虚线框表示主线程工作流程。图3为相机基本动作控制流程图。
具体实施例方式下面结合说明书附图对本发明进一步的说明,在示例的描述中选用的术语名称可能包含特定的结构或者特性,但仅用表达于实例的技术条件,不应对本发明请求保护的技术方案构成限定。参照说明书附图1,依据本发明,一种相机控制方法,概要的表现在对相机的宏观的管理和对相机基本动作的控制,相机基本动作控制对具体相机SDK的调用。对具体相机SDK调用的封装,如连接相机、断开相机、拍照、查询一帧视频等。参见说明书附图2,其中上边的虚线框表示的是主线程工作流程,下边的虚线框表 示的是子线程工作流程,选用佳能1100D相机,Cannon EOS Digital SDK EDSDK2. 10 SDK,具体的应用系统为身份证人像采集系统,具体流程如下
1)身份证人像采集系统调用相机管理模块初始化,相机管理模块启动指令执行子线程,没有指令传入时,由于等待线程事件处于未触发状态故指令执行子线程处于挂起状态;
2)身份证人像采集系统发起对相机管理模块的指令调用如连接相机,相机管理模块主线程进入系统临界区,此时别的指令将无法进入,相机管理模块主线程清空线程事件,此时指令执行子线程被激活,主线程离开临界区,完成连接相机指令调用;
3)由于步骤2)中线程事件被清空即被触发,指令执行子线程被激活,指令执行子线程执行相机基本动作控制模块执行连接相机指令,此时如图3中所示相机基本动作控制模块调用Cannon EOS Digital SDK EDSDK2. 10 SDK中连接相机指令,执行完成后,线程事件被指令执行子线程设置成未被触发状态,指令执行子线程被挂起;
4)身份证人像采集系统发起对相机管理模块的其他调用,执行步骤2)和3),以同样的方式调用;
5)身份证人像采集系统调用相机管理模块的卸载,相机管理模块执行其自身的模块卸 载。在上述内容中,应用系统发起对相机操作的调用,被调用操作的主线程进入应用系统临界区,执行被调用操作的指令子线程,并在指令子线程执行完毕后主线程离开应用系统临界区;
所述指令子线程为对相机基本动作的调用,被调用的基本动作封装在相机SDK中。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。进程进入临界区的调度原则是
I、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。具体相机SDK是相关相机厂商为解决在PC上控制该厂商部分型号相机而开发的中间件,如佳能的EDSDK2. 10 API主要对外公布的接口方法有初始化SDK、卸载SDK、查询相机个数、建立会话、关闭会话、拍照等,具体内容可参照Cannon EOS Digital SDKEDSDK2. 10 API 文档。可以依据SDK公布的借口方法封装对具体相机SDK的调用,对外公布的主要接口方法有打开相机、关闭相机、启动视频、停止视频、捕获一巾贞视频、开启自动对焦功能。被封装的部分为了有利于供应用系统直接调用,还可以进一步封装对上述被封装的接口方法的调用;对应用系统可见的是仍然是对外公布的接口方法打开相机、关闭相机、启动视频、停止视频、捕获一巾贞视频、开启自动对焦功能等。那么,针对相机SDK封装的所有基本动作,以基本动作为列表单元在应用系统初始化时创建相机列表对象并对应地依据相机SDK封装的所有基本动作形成相机列表,在相机列表中以索引方式查询列表对象以备调用。在相机初始化时,对整个相机基本动作所涉及的对象进行初始化,以备调用。同时,可以设置相机拍照、设置属性、状态改变的回调函数接受地址。索引查找算法表现在索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。索引查找的过程是首先根据给定的索引值K1,在索引表上查找出索引值等于KI的索引项,以确定对应予表在主表中的开始位置和长度,然后再根据给定的关键字K2,茬对应的子表中查找出关键字等于K2的元素(结点)。对索引表或子表进行查找时,若表是顺序存储的有序表,则既可进行顺序查找,也可进行二分查找,否则只能进行顺序查找。索引是一种树状结构,其中存储了关键字和指向包含关键字所在记录的数据页的指针。当使用索引查找时,系统沿着索引的树状结构,根据索引中关键字和指针,找到符合查询条件的的记录。最后,将全部查找到的符合查询语句条件的记录显示出来。索引查找算法比较简单,也方便各层目录的创建。应用系统初始化时创建线程等待事件并设置该线程等待事件为未触发,从而,当无应用系统发起对相机操作的调用时,挂起执行指令子线程;而在主线程进入应用系统临界区时,清空线程等待事件,激活指令子线程的执行;并在应用系统调用子线程完成后重新挂起执行指令子线程。
初始化后,相机基本动作公布的接口可供调用,执行具体调用的过程是对具体相机SDK的调用,如具体相机SDK为佳能EDSDK2. 10 SDK,当相机应用系统调用相机基本动作中某个接口方法时,被封装的相机基本动作索引将调用EDSDK2. 10 SDK中的对应方法,如当相机管理模块调用拍照时,调用EDSDK2. 10 SDK中发送拍照指令以此来驱动相机。当操作完成时,可以执行相关初始化内容的卸载,释放相关资源。执行指令子线程退出标志为一布尔表达式,方便应用系统的直接操作,比较简便,从而,可以设定在该布尔表达式为真时,指令执行子线程将退出;而在该布尔表达式为假时,指令执行子线程被循环执行。初始化时,设置退出标志为假。指令的执行采用无阻塞方式,那么应用系统调用相关执行时尤其是查询视频无需等待,待指令执行完成后通过消息机制将指令的执行如视频查询结果直接发送给应用系统,而应用系统在收到指令执行完成的消息如查询视频完成消息后可以在进行下一条指令的调用如下一帧视频的查询;在没有收到指令完成消息时如视频查询完成消息,主消息循环可以处理其他消息,此种方法较传统的阻塞方式具有明显的高效性。所述指令子线程为后台线程,从而在主线程退出时,后台线程也被强制退出,释放相关资源。相机SDK封装的所有基本动作并进一步封装,被封装的对应于基本动作的每一个操作对外发布为一个接口,每个接口对应有一个指令,以备上层调用;其中,指令对应于所述相机列表的索引项,且对应为所述指令子线程中的指令,被进一步封装后,可以更好的与应用系统的接口,对于程序设计人员来说,设计更加简单。在应用系统初始化时创建指令等待事件并设置为未被触发,并在所述指令等待事件未触发时,指令等待事件的线程被挂起;而当事件触发时,指令等待事件被激活。创建指令等待事件并设置为未被触发,本文提到的事件都是应用系统的一种内核对象,主要是用来完成线程间同步问题的,在事件未触发时,设置等待事件的线程被挂起,当事件触发时,设置等待事件的线程被激活;这里我们规定对外发布的每一个接口方法为一个指令,此步所要完成的是为每个指令创建一个应用系统内核对象事件,用来同步指令调用线程和指令执行线程。结合前述内容,创建线程等待事件并设置为未被触发,此处的线程等待事件主要是为了在无指令调用时,挂起执行指令子线程,在有指令调用时,激活执行指令子线程,此处提到的执行指令子线程主要执行对相机基本动作的调用,如连接相机、拍照等都是由该线程直接调用相机基本动作完成。之后,创建指令执行子线程并启动,此处为指令执行子线程分配内存空间,并激活使其处于后台运行状态,由于线程等待事件被设置为未被触发,故此时的指令执行子线程处于挂起状态。前面提到的卸载,还具体表现在首先是设置子线程退出标志为真,则指令执行子线程退出;然后卸载从内存中卸载基本动作初始化的内容;之后释放线程等待事件,进一步释放指令等待事件。依据上述内容,应用系统采用了模块化和接口标准化;相机基本动作和相机管理都被独立创建,对于相机开发者只需要按照相机基本动作控制定义的接口开发出相应的相机基本动作控制模块即可,对于应用系统开发者只需要按照相机管理定义的接口直接调用相机管理模块即可,减轻两者开发的工作量,同时不同型号的相机只要按标准的接口开发基本动作控制模块即可,基本动作控制模块的更换对应用程序不造成任何影响,此种办法给相机开发者和应用程序开发者都带来了极大的便捷性。 另外,子线程执行过程中采用了事件等待模式,即在没有被调用的时候子线程处于挂起状态不占用CPU,降低了 CPU的占用率。
权利要求
1.一种相机控制方法,其特征在于,应用系统发起对相机操作的调用,被调用操作的主线程进入应用系统临界区,执行被调用操作的指令子线程,并在指令子线程执行完毕后主线程离开应用系统临界区; 所述指令子线程为对相机基本动作的调用,被调用的基本动作封装在相机SDK中。
2.根据权利要求I所述的相机控制方法,其特征在于,针对相机SDK封装的所有基本动作,以基本动作为列表单元在应用系统初始化时创建相机列表对象并获取相机列表,以索弓I方式查询列表对象以备调用。
3.根据权利要求2所述的相机控制方法,其特征在于,应用系统初始化时创建线程等待事件并设置该线程等待事件为未触发,从而,当无应用系统发起对相机操作的调用时,挂起执行指令子线程;而在主线程进入应用系统临界区时,清空线程等待事件,激活指令子线程的执行;并在应用系统调用子线程完成后重新挂起执行指令子线程。
4.根据权利要求3所述的相机控制方法,其特征在于,执行指令子线程退出标志为一布尔表达式,从而,在该布尔表达式为真时,指令执行子线程将退出;而在该布尔表达式为假时,指令执行子线程被循环执行。
5.根据权利要求4所述的相机控制方法,其特征在于,指令的执行采用无阻塞方式。
6.根据权利要求I至5任一所述的相机控制方法,其特征在于,所述指令子线程为后台线程。
7.根据权利要求2所述的相机控制方法,其特征在于,相机SDK封装的所有基本动作并进一步封装,被封装的对应于基本动作的每一个操作对外发布为一个接口,每个接口对应有一个指令,以备上层调用;其中,指令对应于所述相机列表的索引项,且对应为所述指令子线程中的指令。
8.根据权利要求7所述的相机控制方法,其特征在于,在应用系统初始化时创建指令等待事件并设置为未被触发,并在所述指令等待事件未触发时,指令等待事件的线程被挂起;而当事件触发时,指令等待事件被激活。
9.根据权利要求8所述的相机控制方法,其特征在于,为每一个所述指令创建一个应用系统内核对象事件,该应用系统内核事件属于所述指令等待事件。
全文摘要
本发明公开了一种相机控制方法,应用系统发起对相机操作的调用,被调用操作的主线程进入应用系统临界区,执行被调用操作的指令子线程,并在指令子线程执行完毕后主线程离开应用系统临界区;所述指令子线程为对相机基本动作的调用,被调用的基本动作封装在相机SDK中。依据本发明的相机控制方法能够提高相机控制方法的通用性。
文档编号G06F9/48GK102662752SQ20121011249
公开日2012年9月12日 申请日期2012年4月17日 优先权日2012年4月17日
发明者方亮 申请人:山东神思电子技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1