Skip to content
基于 OpenCV,开发 iOS 平台的图像识别。
Objective-C Objective-C++ Ruby
Branch: master
Clone or download
Latest commit 5a0de5f Jun 28, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Example upgrade OOB to 1.0.0. Jun 28, 2019
OOB update unit test. Jun 28, 2019
.gitignore Initial commit Jul 13, 2017
.travis.yml 集成CI Jun 4, 2019
LICENSE 创建Pod项目 Mar 8, 2019
OOB.podspec upgrade OOB to 1.0.0. Jun 28, 2019
README.md upgrade OOB to 1.0.0. Jun 28, 2019

README.md

OOB

CI Status codecov Version License Platform

识别图片 识别图片 识别视频

快速开始

在终端运行以下命令:

git clone https://github.com/muzipiao/OOB.git

cd OOB/Example 

pod install 

open OOB.xcworkspace

注意:由于 opencv2.framework 压缩包较大(约 146MB),网速比较慢的情况下,下载时间会较长;个别网络(如长城宽带)会一直下载失败,这种情况可切换至其他网络下载或手动集成。

环境需求

  • OpenCV2
  • Foundation.framework
  • UIKit.framework
  • AVFoundation.framework

集成

CocoaPods

CocoaPods 是最简单方便的集成方法,编辑 Podfile 文件,添加

pod 'OOB'

然后执行 pod install 即可。

直接集成

  1. 直接集成 OOB 前,请先集成 OpenCV,参考我的一篇博客:iOS集成OpenCV博客
  2. 从 Git 下载最新代码,找到和 README 同级的 OOB 文件夹,将 OOB 文件夹拖入项目即可。
  3. 在需要使用的地方导入 #import "OOB.h" 即可。

用法

设置预览图层

设置预览图层很简单,添加代码:

// 设置视频预览图层
OOBTemplate.preview = self.view;

注意:

  1. 识别摄像头目标,设置预览图层,展示摄像头视频流。不设置预览图层,不展示摄像头视频流,返回的目标 Frame 按照全屏展示计算。
  2. 识别视频文件目标,传入展示当前视频帧图像的 View。不设置预览图层,返回目标 Frame 按照视频帧图像 100% 不缩放计算(即视频帧图像 sizeToFit 展示)。
  3. 识别背景图片目标,传入展示当前背景图片的 View。不设置预览图层,返回目标 Frame 按照背景图片 100% 不缩放计算(即背景图片 sizeToFit 展示)。

识别摄像头中目标

识别摄像头视频流中的目标,传入目标图片,Block 中回调获取结果,刷新频率和视频帧率相同,示例代码:

/**
 * 开始图像识别
 * targetImg: 待识别的目标图像
 @param targetRect 目标图像在预览图层中的 frame
 @param similarValue 目标模板与视频图像中图像的相似度
 @return 识别图像在block中回调
 */
[OOBTemplate matchCamera:self.targetImg resultBlock:^(CGRect targetRect, CGFloat similarValue) {
    OOBLog(@"与背景中目标的相似度:%.0f %%",similarValue * 100);
    OOBLog(@"摄像头视频流中目标 Rect:%@",NSStringFromCGRect(targetRect));
}];

识别视频文件中目标

识别摄像头视频流中的目标,传入目标图片,视频文件的 URL,Block 中回调获取结果。

视频文件分辨率较小时,刷新频率和视频帧率相同;分辨率较大时,Block 回调速度会变慢,示例代码:

// 待识别的视频文件 URL
NSURL *vdUrl = [[NSBundle mainBundle] URLForResource:@"oob_apple.m4v" withExtension:nil];
/**
 * 开始识别视频中的目标
 @param targetRect 目标在背景图片中的位置
 @param similarValue 对比获取的相似度
 @param frameImg 当前视频帧图像
 */
[OOBTemplate matchVideo:self.targetImg VideoURL:vdUrl resultBlock:^(CGRect targetRect, CGFloat similarValue, UIImage * _Nullable frameImg) {
    OOBLog(@"与背景中目标的相似度:%.0f %%",similarValue * 100);
    OOBLog(@"摄像头视频流中目标 Rect:%@",NSStringFromCGRect(targetRect));
    OOBLog(@"当前视频帧图像:%@",frameImg);
}];

识别背景图片中目标

识别背景图片中的目标,传入目标图片,背景图片,Block 中回调获取结果。示例代码:

/**
 * 开始识别图像中的目标
 * targetRect 目标在背景图片中的位置,注意不是 UImageView 中的实际位置,需要缩放转换
 * similarValue 要求的相似度,最大值为1,要求越大,精度越高,计算量越大
 */
[OOBTemplate matchImage:self.targetImg BgImg:self.bgImg Similar:0.8 resultBlock:^(CGRect targetRect, CGFloat similarValue) {
    OOBLog(@"与背景中目标的相似度:%.0f %%",similarValue * 100);
    OOBLog(@"摄像头视频流中目标 Rect:%@",NSStringFromCGRect(targetRect));
}];

结束图像识别

若识别摄像头视频流,或视频文件流,必须手动结束匹配,调用 [OOBTemplate stopMatch]; 释放资源。

其他设置

可随时切换目标图像,调整目标与背景目标的相似度。其中相似度阈值,默认是 0.7,最大为 1。值设置的小速度快,误报率高;值设置的大,匹配速度越慢,准确率高。

// 调整对比的相似度在 80% 以上,最大为1
OOBTemplate.similarValue = 0.8;
// 切换目标图片
OOBTemplate.targetImage = [UIImage imageNamed:@"apple"];

如果视频摄像头视频流中目标,还可随时切换摄像头,调整视频预览质量。

// 切换为后置摄像头
OOBTemplate.cameraType = OOBCameraTypeBack;
// 切换为前置摄像头
OOBTemplate.cameraType = OOBCameraTypeFront;
// 设置视频预览质量为高,默认预览视频尺寸 1920x1080
OOBTemplate.sessionPreset = AVCaptureSessionPresetHigh;
// 设置视频预览尺寸为 640x480
OOBTemplate.sessionPreset = AVCaptureSessionPreset640x480;

生成一张标记目标的 UIImage 图片,中间透明,边框为切圆角的矩形图片。

// 生成一张和目标图片一样大小的矩形框图片,标记目标位置。颜色红色,线宽为 3,切圆角 5
UIImage *markImage = [OOBTemplate getRectWithSize:_targetImg.size Color:[UIColor redColor] Width:3 Radius:5]; // 设置标记图像为矩形

其他

如果您觉得有所帮助,请在 GitHub OOBDemo 上赏个Star ⭐️,您的鼓励是我前进的动力

You can’t perform that action at this time.