GitHub地址:KJVisionDemo
人脸矩形检测
人脸特征识别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Usb8rM1B-1603176244145)(https://upload-images.jianshu.io/upload_images/1933747-6d092ce749856bf6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
API架构 一 Vision框架共包括以下类
VNRequestHandler :继承自NSObject的VNImageRequestHandler 和 VNSequenceRequestHandler
VNRequest :图像分析请求的抽象超类
VNObservation :图像分析结果的抽象超类
VNFaceLandmarks :面部信息类
VNError :错误信息类
VNUtils :工具类
VNTypes
两个协议:VNRequestRevisionProviding 和 VNFaceObservationAccepting
Vison 的应用场景
1、图像配准
2、矩形检测
3、二维码/条形码检测
4、目标跟踪:脸部,矩形和通用模板
5、文字检测:监测文字外框和文字识别
6、人脸检测:支持检测笑脸、侧脸、局部遮挡脸部、戴眼镜和帽子等场景,可以标记出人脸的矩形区域
7、人脸特征点:可以标记出人脸和眼睛、眉毛、鼻子、嘴、牙齿的轮廓,以及人脸的中轴线
Vision 支持多种图片类型
CIImage、NSURL、NSData、CGImageRef、CVPixelBufferRef
框架整体介绍
作者信息
Github地址:https://github.com/yangKJ
简书地址:https://www.jianshu.com/u/c84c00476ab6
博客地址:https://blog.csdn.net/qq_34534179
作者其他Pod库
播放器 - KJPlayer是一款视频播放器,AVPlayer的封装,继承UIView
pod 'KJPlayer' # 播放器功能区
pod 'KJPlayer/KJPlayerView' # 自带展示界面
实用又方便的Category和一些自定义控件
pod 'KJEmitterView'
pod 'KJEmitterView/Function'#
pod 'KJEmitterView/Control' # 自定义控件
轮播图 - 支持缩放 多种pagecontrol 支持继承自定义样式 自带网络加载和缓存
pod 'KJBannerView' # 轮播图,网络图片加载
菜单控件 - 下拉控件 选择控件
pod 'KJMenuView' # 菜单控件
加载Loading - 多种样式供选择
pod 'KJLoadingAnimation' # 加载控件
Issue
如果您在使用中有好的需求及建议,或者遇到什么bug,欢迎随时issue,我会及时的回复,有空也会不断优化更新这些库
使用方法
1、流程
给各种功能的 Request 提供给一个 RequestHandler
RequestHandler持有需要识别的图片信息
并将处理结果分发给每个 Request 的 completion Block 中
可以从 results 属性中得到 Observation 信息数组
2、代码示例
//
// ViewController.m
// KJVisionDemo
//
// Created by 杨科军 on 2019/10/31.
// Copyright © 2019 杨科军. All rights reserved.
//
#import "ViewController.h"
#import "KJVisionTool.h"
@interface ViewController ()
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) NSMutableArray *temps;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.temps = [NSMutableArray array];
[self.view addSubview:self.imageView];
UIImage *image = [UIImage imageNamed:@"AAA"];
self.imageView.image = image;
[KJVisionTool kj_detectImageWithType:(KJDetectFaceTypeRectanglesRequest) Image:image Block:^(NSArray * _Nonnull datas) {
self.imageView.image = [KJVisionTool kj_drawImage:image Rects:datas];
}];
return;
// [KJVisionTool kj_detectImageWithType:(KJDetectFaceTypeLandmarksRequest) Image:image Block:^(NSArray * _Nonnull datas) {
// if (datas.count) {
// KJVisionModel *model = datas[0];
// self.imageView.image = [KJVisionTool kj_drawImage:image Observation:model.observation LandMarkPoints:model.allPoints];
//