YoonitCamera 2.7.3

YoonitCamera 2.7.3

Haroldo TeruyaLuigui DelyerMárcio Habigzang Brufatto 维护。



  • CyberLabs.AI、Luigui Delyer 和 Haroldo Teruya

iOS Yoonit Camera

相机预览(前/后)

Yoonit Facefy 集成

人脸检测、抓取和图像裁剪

理解人脸

帧捕获

捕获定时图像

二维码扫描

赞助商

白金
成为赞助商!

目录

安装

将以下行添加到您的 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
  • "none"
  • "face"
  • "qrcode"
  • "frame"
void 设置捕获类型为 none、face、QR Code 或 frame。
stopCapture - - void 停止任何类型的捕获。
destroy - - void 销毁相机预览。
toggleCameraLens - - void 切换相机前/后置镜头。
setCameraLens cameraLens: String
  • "front"
  • "back"
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 truefalse void 设置在捕获人脸和帧时启用/禁用保存图片。
setDetectionBox enable: Bool truefalse void 设置在检测到人脸/QR Code 时启用/禁用检测框。检测框是人脸/QR Code 的边界框,已归一化到 UI。
setDetectionBoxColor alpha: Float, red: Float, green: Float, blue: Float 介于 01 之间的值 void 设置检测框 ARGB 颜色。默认值为 (0.4, 1.0, 1.0, 1.0)
setDetectionMinSize minimumSize: Float 介于 01 之间的值。表示百分比。 void 将人脸/二维码的最小检测尺寸设置为与相机预览相关的百分比。
setDetectionMaxSize maximumSize: Float 介于 01 之间的值。表示百分比。 void 将人脸/二维码的最大检测尺寸设置为与相机预览相关的百分比。
setFaceContours enable: Bool truefalse void 设置检测到人脸时是否启用/禁用人脸轮廓。
setFaceContoursColor alpha: Float, red: Float, green: Float, blue: Float 介于 01 之间的值 void 设置人脸轮廓的ARGB颜色。默认值是(0.4, 1.0, 1.0, 1.0)
setROI enable: Bool truefalse void 启用/禁用感兴趣区域的捕获。
setROITopOffset topOffset: Float 介于 01 之间的值。表示百分比。 void 相机预览顶部距离的百分比。
setROIRightOffset rightOffset: Float 介于 01 之间的值。表示百分比。 void 相机预览右侧距离的百分比。
setROIBottomOffset bottomOffset: Float 介于 01 之间的值。表示百分比。 void 相机预览底部距离的百分比。
setROILeftOffset leftOffset: Float 介于 01 之间的值。表示百分比。 void 相机预览左侧距离的百分比。
setROIAreaOffset enable: Bool truefalse void 设置是否启用/禁用感兴趣区域的偏移可见性。
setROIAreaOffsetColor alpha: Float, red: Float, green: Float, blue: Float 介于 01 之间的值 void 设置人脸感兴趣区域区域的偏移颜色。默认值是(0.4, 1.0, 1.0, 1.0)
setTorch enable: Bool truefalse void 设置是否启用/禁用设备的torch。仅适用于"back"相机镜头。

事件

事件 参数 描述
onImageCaptured type: String, count: Int, total: Int, imagePath: String, darkness: NSNumber?, lightness: NSNumber?, sharpness: NSNumber? 必须有已开始的捕获类型(查看startCaptureType)。在图像文件创建时触发
  • type: '"face"' 或 '"frame"'
  • count: 当前索引
  • total: 需要创建的总数
  • imagePath: 图像路径
  • inferences: 数组中每个元素都是图像推断结果。
  • darkness: 图像黑暗度分类。
  • lightness: 图像亮度分类。
  • sharpness: 图像清晰度分类。
    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。对于提交消息,我们使用约定式提交

    总是欢迎贡献!


    用代码Yoonit团队