iOS Yoonit Camera
|
![]() |
目录
安装
将以下行添加到您的 Podfile
文件中
pod 'YoonitCamera'
在项目根目录下运行
pod install
使用
ios-yoonit-camera
提供的所有功能都是通过 CameraView
访问,包括相机预览。请参考我们如何在 示例 中使用的示例。
以下是基本使用代码,更多详细信息,请参阅 API 部分。
相机预览
@IBOutlet var cameraView: CameraView!
不要忘记请求相机权限。开始相机预览
self.cameraView.startPreview()
开始捕获人脸图像
通过相机预览,我们可以开始捕获检测到的人脸并生成图像
self.cameraView.startCaptureType("face")
设置相机事件监听器以获取结果
class YourViewController: UIViewController, CameraEventListenerDelegate {
...
self.cameraView.cameraEventListener = self
...
func onImageCaptured(
_ type: String,
_ count: Int,
_ total: Int,
_ imagePath: String,
_ darkness: NSNumber?,
_ lightness: NSNumber?,
_ sharpness: NSNumber?
) {
// YOUR CODE
}
func onFaceDetected(
_ x: Int,
_ y: Int,
_ width: Int,
_ height: Int,
_ leftEyeOpenProbability: NSNumber?,
_ rightEyeOpenProbability: NSNumber?,
_ smilingProbability: NSNumber?,
_ headEulerAngleX: NSNumber?,
_ headEulerAngleY: NSNumber?,
_ headEulerAngleZ: NSNumber?
) {
// YOUR CODE
}
...
}
开始扫描二维码
通过相机预览,我们可以开始扫描二维码
self.cameraView.startCaptureType("qrcode")
设置相机事件监听器以获取结果
class YourViewController: UIViewController, CameraEventListenerDelegate {
...
self.cameraView.cameraEventListener = self
...
func onQRCodeScanned(content: String) {
// YOUR CODE
}
}
API
变量
变量 | 类型 | 默认值 | 描述 |
---|---|---|---|
detectionTopSize | 浮点数 | '0.0' | 表示百分比。正值扩大并减小检测区域的上边缘。使用 setDetectionBox 获取视觉结果。 |
detectionRightSize | 浮点数 | '0.0' | 表示百分比。正值扩大并减小检测区域的右侧边缘。使用 setDetectionBox 获取视觉结果。 |
detectionBottomSize | 浮点数 | '0.0' | 表示百分比。正值扩大并减小检测区域的下边缘。使用 setDetectionBox 获取视觉结果。 |
detectionLeftSize | 浮点数 | '0.0' | 表示百分比。正值扩大并减小检测区域的左侧边缘。使用 setDetectionBox 获取视觉结果。 |
方法
函数 | 参数 | 有效值 | 返回类型 | 描述 |
---|---|---|---|---|
startPreview | - | - | void | 如果有权限,开始相机预览。 |
startCaptureType | captureType: String |
|
void | 设置捕获类型为 none、face、QR Code 或 frame。 |
stopCapture | - | - | void | 停止任何类型的捕获。 |
destroy | - | - | void | 销毁相机预览。 |
toggleCameraLens | - | - | void | 切换相机前/后置镜头。 |
setCameraLens | cameraLens: String |
|
void | 将相机设置为使用 "front" 或 "back" 镜头。默认值为 "front"。 |
getCameraLens | - | - | String | 返回 "front" 或 "back"。 |
setNumberOfImages | numberOfImages: Int |
任意正 Int 值 |
void | 默认值为 0。值为 0 时保存无穷多图片。当保存的图片达到 "number os images" 时,会触发 onEndCapture 。 |
setTimeBetweenImages | timeBetweenImages: Int64 |
代表毫秒的任意正数 | void | 设置保存人脸/帧图像的时间间隔(毫秒)。 |
setOutputImageWidth | width: Int |
代表像素的任意正数 | void | 设置创建人脸图像的宽度(像素)。 |
setOutputImageHeight | height: Int |
代表像素的任意正数 | void | 设置创建人脸图像的高度(像素)。 |
setSaveImageCaptured | enable: Bool |
true 或 false |
void | 设置在捕获人脸和帧时启用/禁用保存图片。 |
setDetectionBox | enable: Bool |
true 或 false |
void | 设置在检测到人脸/QR Code 时启用/禁用检测框。检测框是人脸/QR Code 的边界框,已归一化到 UI。 |
setDetectionBoxColor | alpha: Float, red: Float, green: Float, blue: Float |
介于 0 和 1 之间的值 |
void | 设置检测框 ARGB 颜色。默认值为 (0.4, 1.0, 1.0, 1.0) 。 |
setDetectionMinSize | minimumSize: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 将人脸/二维码的最小检测尺寸设置为与相机预览相关的百分比。 |
setDetectionMaxSize | maximumSize: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 将人脸/二维码的最大检测尺寸设置为与相机预览相关的百分比。 |
setFaceContours | enable: Bool |
true 或 false |
void | 设置检测到人脸时是否启用/禁用人脸轮廓。 |
setFaceContoursColor | alpha: Float, red: Float, green: Float, blue: Float |
介于 0 和 1 之间的值 |
void | 设置人脸轮廓的ARGB颜色。默认值是(0.4, 1.0, 1.0, 1.0) 。 |
setROI | enable: Bool |
true 或 false |
void | 启用/禁用感兴趣区域的捕获。 |
setROITopOffset | topOffset: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 相机预览顶部距离的百分比。 |
setROIRightOffset | rightOffset: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 相机预览右侧距离的百分比。 |
setROIBottomOffset | bottomOffset: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 相机预览底部距离的百分比。 |
setROILeftOffset | leftOffset: Float |
介于 0 和 1 之间的值。表示百分比。 |
void | 相机预览左侧距离的百分比。 |
setROIAreaOffset | enable: Bool |
true 或 false |
void | 设置是否启用/禁用感兴趣区域的偏移可见性。 |
setROIAreaOffsetColor | alpha: Float, red: Float, green: Float, blue: Float |
介于 0 和 1 之间的值 |
void | 设置人脸感兴趣区域区域的偏移颜色。默认值是(0.4, 1.0, 1.0, 1.0) 。 |
setTorch | enable: Bool |
true 或 false |
void | 设置是否启用/禁用设备的torch。仅适用于"back" 相机镜头。 |
事件
事件 | 参数 | 描述 |
---|---|---|
onImageCaptured | type: String, count: Int, total: Int, imagePath: String, darkness: NSNumber?, lightness: NSNumber?, sharpness: NSNumber? |
必须有已开始的捕获类型(查看startCaptureType )。在图像文件创建时触发
|
onFaceDetected | x: Int, y: Int, width: Int, height: Int, leftEyeOpenProbability: NSNumber?, rightEyeOpenProbability: NSNumber?, smilingProbability: NSNumber?, headEulerAngleX: NSNumber?, headEulerAngleY: NSNumber?, headEulerAngleZ: NSNumber? |
必须有已开始的捕获类型(查看startCaptureType )。触发人脸分析 |
onFaceUndetected | - | 必须有已开始的捕获类型(查看startCaptureType )。在不再检测人脸后触发 |
onEndCapture | - | 必须有已开始的捕获类型(查看startCaptureType )。在创建的图像文件数量等于设置的图像数量时触发(查看setNumberOfImages 方法)。 |
onQRCodeScanned | content: String |
必须有已开始的捕获类型(查看startCaptureType )。在相机扫描QR码时触发。 |
onError | error: String |
触发消息错误。 |
onMessage | message: String |
触发消息。 |
onPermissionDenied | - | 在尝试startPreview 但不存在相机权限时触发。 |
人脸分析
人脸分析是onFaceDetected
发送的响应。这里指定所有参数。
属性 | 类型 | 描述 |
---|---|---|
x | Int |
屏幕中人脸的 x 轴位置。 |
Int |
屏幕中人脸的 y 轴位置。 |
|
width | Int |
屏幕中人脸的宽度位置。 |
height | Int |
屏幕中人脸的高度位置。 |
leftEyeOpenProbability | NSNumber? |
左眼睁开的概率。 |
rightEyeOpenProbability | NSNumber? |
右眼睁开的概率。 |
smilingProbability | NSNumber? |
微笑的概率。 |
headEulerAngleX | NSNumber? |
表示垂直头部方向的度数。参见 头部动作 |
headEulerAngleY | NSNumber? |
表示水平头部方向的度数。参见 头部动作 |
headEulerAngleZ | NSNumber? |
表示头部倾斜方向的度数。参见 头部动作 |
头部动作
在此解释上述 gif 以及如何得到“结果”。每个“动作”(垂直、水平、倾斜)都是一个状态,基于表示头部方向的度数;
头部方向 | 属性 | v < -36° | -36° < v < -12° | -12° < v < 12° | 12° < v < 36° | 36° < v |
---|---|---|---|---|---|---|
垂直 | headEulerAngleX |
极度向下 | 向下 | 前进 | 向上 | 极度向上 |
水平 | headEulerAngleY |
极度向左 | 向左 | 前进 | 向右 | 极度向右 |
倾斜 | headEulerAngleZ |
极度向右 | 向右 | 前进 | 向左 | 极度向左 |
图像质量
图像质量是对三个属性的分类:暗度、亮度和锐度。在 onImageCaptured
事件中提供结果。让我们看看每个参数的详细说明
阈值 | 分类 |
---|---|
暗度 | |
darkness > 0.7 | 太暗 |
darkness <= 0.7 | 可接受 |
亮度 | |
lightness > 0.65 | 太亮 |
lightness <= 0.65 | 可接受 |
锐度 | |
sharpness >= 0.1591 | 模糊 |
sharpness < 0.1591 | 可接受 |
KeyError
预定义的 key error,用于 onError
事件。
关键字错误 | 描述 |
---|---|
INVALID_CAPTURE_TYPE | 尝试启动不存在的捕获类型。 |
INVALID_CAMERA_LENS | 尝试输入无效的相机镜头。 |
INVALID_NUMBER_OF_IMAGES | 尝试输入无效的照片/帧数。 |
INVALID_TIME_BETWEEN_IMAGES | 尝试输入无效的脸部时间间隔。 |
INVALID_OUTPUT_IMAGE_WIDTH | 尝试输入无效的图像宽度。 |
INVALID_OUTPUT_IMAGE_HEIGHT | 尝试输入无效的图像高度。 |
INVALID_DETECTION_BOX_COLOR | 尝试输入无效的检测框ARGB值颜色。 |
INVALID_MINIMUM_SIZE | 尝试输入无效的最小尺寸。 |
INVALID_MAXIMUM_SIZE | 尝试输入无效的最大尺寸。 |
INVALID_ROI_TOP_OFFSET | 尝试输入无效的兴趣区域顶部偏移量。 |
INVALID_ROI_RIGHT_OFFSET | 尝试输入无效的兴趣区域右侧偏移量。 |
INVALID_ROI_BOTTOM_OFFSET | 尝试输入无效的兴趣区域底部偏移量。 |
INVALID_ROI_LEFT_OFFSET | 尝试输入无效的兴趣区域左侧偏移量。 |
INVALID_ROI_COLOR | 尝试输入无效的兴趣区域面积偏移ARGB值颜色。 |
INVALID_FACE_CONTOURS_COLOR | 尝试输入无效的脸部轮廓ARGB值颜色。 |
消息
用于onMessage
事件的预定义关键消息。
消息 | 描述 |
---|---|
INVALID_MINIMUM_SIZE | 相对屏幕宽度的脸部/二维码宽度的百分比小于设置的(setDetectionMinSize )。 |
INVALID_MAXIMUM_SIZE | 相对屏幕宽度的脸部/二维码宽度的百分比大于设置的(setDetectionMaxSize )。 |
INVALID_OUT_OF_ROI | 脸部边界框超出设置的感兴趣区域(setROI )。 |
INVALID_TORCH_LENS_USAGE | 在相机镜头"front"(setTorch )中无法使用手电筒。 |
为使其变得更好做出贡献
克隆仓库,更改您想要的内容,并发送PR。对于提交消息,我们使用约定式提交。
总是欢迎贡献!
用代码