作者:创世魂
● 本类说明
帮助说明:
通过本类可以调用“摄像头”,然后创建相机,实现拍照等事件。
简单来说,通过本类可以自己开发一个简单的相机软件。
如果要访问指定摄像头,需要使用“打开”方法,默认访问“后置摄像头”。
注意:本类位于“多媒体功能支持”模块中,必须添加此模块才能使用。
● 打开
帮助文档如下图:
即打开指定摄像头,默认为“后置摄像头”。
可通过“摄像头类.前置摄像头”来打开前置。
● 锁定
帮助文档如下图:
顾名思义,锁定当前相机仅当前程序可用。
如果想让其它软件访问相机,需要执行“解锁”方法。
● 解锁
帮助文档如下图:
顾名思义,解锁相机让其它程序访问。
● 置展示组件
帮助文档如下图:
顾名思义,设置拍摄时显示图像的组件。
该组件为高级画板,务必保证画板在窗口界面上。
● 开始预览
帮助文档如下图:
在绑定的“高级画板”上显示相机画面。
● 停止预览
帮助文档如下图:
暂停当前画面预览,“高级画板”上显示的界面将停留在最后一帧上。
● 开始聚焦
帮助文档如下图:
本方法即我们常说的“对焦”。
● 开始检测脸部
帮助文档如下图:
安卓内置的2D人脸检测方法,本方法调用后会不停的发送“检测到人脸”事件。
本方法不建议用来做人脸识别功能,因为照片也可以识别。
● 停止检测脸部
帮助文档如下图:
顾名思义,调用本方法后,将会停止人脸检测。
● 拍照
帮助文档如下图:
顾名思义,执行本方法后会触发“触发快门”和“得到图像数据”事件。
并且“得到图像数据”事件会触发三次,得到三种不同的图片数据。
● 释放
帮助文档如下图:
顾名思义,释放当前相机所占用的资源。
● 前置摄像头(常)
帮助文档如下图:
以上两个为常量值,通过“摄像头类.XXX”即可调用。
主要作用就是提供给“打开”方法。
● 快门声(写)
帮助文档如下图:
通过本“写属性”可以设置是否开启快门声。
本属性并不保证所有设备都可以正常使用,部分手机强制开启快门。
快门声音为系统相机的快门声音。
● 显示角度(写)
帮助文档如下图:
本“写属性”用来设置预览画面时的角度。
总共四个角度,分别为:0,90,180,270度。
● 得到图像数据(事件)
帮助文档如下图:
通过“拍照”方法触发本事件,本事件总共会触发三次,得到三种不同的图片数据。
分别为:“0=未压缩的原始数据”。
“1=预览数据”和“2=JPEG最终保存数据”
预览数据:通常用来作为拍照完毕后,相机画面显示的数据。
● 检测到人脸(事件)
帮助文档如下图:
当执行“开始检测脸部”后,会不停的发送本事件。
通过本事件中“摄像头脸部类”可以获得人脸数据,关于本类教程中会详细介绍。
● 聚焦完毕(事件)
帮助文档如下图:
执行“聚焦”方法,聚焦完毕后会发送本事件。
还可以通过“聚焦成功”参数来判断是否对焦成功。
● 触发快门(事件)
帮助文档如下图:
执行“拍照”方法会触发本事件。
根据自己的实际需求,决定是否在本事件下执行相应的方法。
● 预览缓存数据(事件)
帮助文档如下图:
当打开摄像头后,本事件会不停的发送。
本事件下的“预览数据”参数,返回的并非正常的图片数据。
可以理解为拍摄时产生的垃圾文件。
界面准备如下图:
在上一个类的基础上,增加一个按钮,分别修改这三个按钮的标题。
修改完毕后点击“确定”保存布局。
代码编写(1):
增加一个“摄像头类”成员变量,起名“摄像头”。
右键“摄像头类”选择添加“事件接收方法”。
代码编写(2):
随后分别依次添加“得到图像数据”,“触发快门”,“聚焦完毕”,“预览缓存数据”和“检测到人脸”事件。
注意:“被缩放”,“预览数据”和“开始移动聚焦”这三个事件实测无效,不讲解。
注意:“发生错误”事件,仅在拍摄时出错的情况下才会触发。
正常情况下根本不会出错,本事件触发的可能性极低,因此不再讲解。
代码编写(3):
在“得到图像数据”事件下,判断来源对象后继续判断“触发标志”参数。
通过判断不同的标志,来保存不同的“图片数据”字节数组。
使用的方法是“写出文件”,可点击跳转查看具体帮助文档。
注意:最后一个触发标志被触发后,如果不再使用摄像头。
建议调用“停止预览”,“解锁”和“释放”方法。
代码编写(4):
分别在“触发快门”,“聚焦完毕”和“预览缓存数据”下执行你想要执行的方法即可。
代码编写(5):
调用“开始检测脸部”后,会触发本事件。
通过“脸部数据”参数可以获得人脸坐标等数据。
详细说明可跳转查看“摄像头脸部类”。
本例子中,判断“数组成员数”的目的,是为了防止没有检测到人脸。
通过“脸部数据”参数,可以看出它是一个数组类的参数。
也就表明,检测人脸时会将画面内出现的人脸全部进行检测。
代码编写(6):
最后在“按钮被单击”下,判断按钮来源,执行对应的方法即可。
运行结果如下图:
可以看到“文本框1”显示可信度为“91”。
高达90以上的基本可以确定为人脸。
图文教程仅能演示到此,其它方法自行测试。
● 取消聚焦
帮助文档如下图:
顾名思义,取消当前所有的对焦动作。
如果遇到摄像头反复对焦的情况(极少遇见),可执行本方法取消对焦操作。
调用方法:“摄像头变量.取消聚焦()”
● 异步拍照
帮助文档如下图:
本方法和“拍照”方法功能一样,不同之处是使用本方法“拍照”界面不会发成卡顿现象。
调用方法:“摄像头变量.异步拍照()”
● 重新连接
帮助文档如下图:
假如:当前程序需要让其它程序临时访问相机。
访问结束后,需要调用本方法让当前程序重新连接到摄像头。
调用方法:“摄像头变量.重新连接()”
● 摄像头数量(读)
帮助文档如下图:
通过本读属性获得前后摄像头的总数量。
手机前后双摄,三摄,或者更多摄像头,均会识别为一个摄像头。
也就意味着,只要手机存在前后摄像头,此方法必然返回“2”。
界面准备:
在原界面的基础上,修改“按钮3”的标题为“摄像头数量”。
代码编写如下图:
在“按钮3”被单击后,利用本方法读取数量,赋值给文本框的内容。
运行结果如下图:
下图为真机(小米6)运行截图,手机为后置双摄前置单摄,可以看到返回的是“2”。
注意:想要读取摄像头数量,必须打开相机才可以读取。
● 本类说明
帮助文档如下图:
顾名思义,通过本类实现了对人脸检测方面的操作。
本类中共有六个读属性。
本类并不能直接创建或者调用,需要通过“摄像头类_检测到人脸”事件才能获取当前对象。
各个方法的帮助说明,如下图所示,不再单独讲解。
“脸部ID”获得当前脸部唯一ID值,可以将ID值存储起来,用于简单的人脸识别。
当然并不建议使用本属性,因为2D人脸识别极其不安全,并且有重复ID的可能性。
代码编写如下图:
直接在“摄像头类_检测到人脸”事件下,通过“脸部数据”参数调用对应的方法就可以读取相关信息。
本例程中的代码,设置了只有当画面内出现“两张人脸”时才会反馈检测数据。
运行结果如下图:
左眼,右眼和嘴部返回“null”,是因为检测失败导致的。
脸部ID返回“-1”同样也是因为检测失败返回的数据。