Swift 自定义相机扫描身份证信息
1.前言
最近在做扫描身份证识别信息的功能,刚开始想的是用扫二维码那个方法,但是失败了,对相机这一块也不是太熟,于是各种招资料,发现扫描身份证的不是很多,最后自己想了个办法,实验后是成功了,但是效果不是太理想,但是其中用到了自定义相机拍照的功能,这里主要记录一下这个功能,扫描为辅。
2.上代码
代码是用swift3.0实现的,代码里有拍照功能,还有去除快门声的方法,亲测去除有用,但不能保证一定不会发出声音
//1.首先引入 AVFoundation这个库
import AVFoundationclass IDTestViewController: UIViewController {//AVCaptureSession对象来执行输入设备和输出设备之间的数据传递var session: AVCaptureSession!//输入var videoInput:AVCaptureDeviceInput!//图片输出var stillImageOutput:AVCaptureStillImageOutput!
//预览图层var preview:AVCaptureVideoPreviewLayer!override func viewDidLoad() {super.viewDidLoad()initAVCaptureSession() }override func viewDidDisappear(_ animated: Bool) {
//关闭sessionself.session.stopRunning()}//MARK: - 初始化相机func initAVCaptureSession(){do{self.session = AVCaptureSession()let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)self.videoInput = try AVCaptureDeviceInput(device: device)self.stillImageOutput = AVCaptureStillImageOutput()let outPutsetting = [AVVideoCodecKey : AVVideoCodecJPEG]stillImageOutput.outputSettings = outPutsettingself.session.addInput(self.videoInput)self.session.addOutput(self.stillImageOutput)self.preview = AVCaptureVideoPreviewLayer(session:self.session)self.preview.videoGravity = AVLayerVideoGravityResizeAspectFillself.preview.frame = self.view.boundsself.view.layer.insertSublayer(self.preview, at: 0)//运行self.session.startRunning()}catch _ as NSError{//打印错误消息let errorAlert = UIAlertController(title: "提醒", message: "请在iPhone的\"设置-隐私-相机\"选项中,允许本程序访问您的相机", preferredStyle: UIAlertControllerStyle.alert)self.present(errorAlert, animated: true, completion: nil)errorAlert.addAction(UIAlertAction.init(title: "好的", style: UIAlertActionStyle.default, handler: { (UIAlertAction) inself.dismiss(animated: true, completion: nil)}))}}func avOrientationForDeviceOrientation(deviceOrientation: UIDeviceOrientation) ->AVCaptureVideoOrientation {//调整拍出来的图片方向与手机的方向var result = AVCaptureVideoOrientation.portraitif ( deviceOrientation == UIDeviceOrientation.landscapeLeft){result = AVCaptureVideoOrientation.landscapeRight}else if ( deviceOrientation == UIDeviceOrientation.landscapeRight ){result = AVCaptureVideoOrientation.landscapeLeft}return result}//拍照func takePhoto(){let stillImageConnect: AVCaptureConnection = self.stillImageOutput.connection(withMediaType: AVMediaTypeVideo)let curDeviceOrientation = UIDevice.current.orientationlet avcaptureOrientation = self.avOrientationForDeviceOrientation(deviceOrientation: curDeviceOrientation)stillImageConnect.videoOrientation = avcaptureOrientationstillImageConnect.videoScaleAndCropFactor = 1.0let path = "/System/Library/Audio/UISounds/photoShutter.caf"let docs = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).lastlet data = NSData(contentsOfFile: path)data?.write(toFile: (docs?.appending("photoShutter.caf"))!, atomically: true)//去除快门声音 var soundID:SystemSoundID = 0if soundID == 0 {//一定放在主目录下(后面有声音下载地址)let path = Bundle.main.path(forResource: "photoShutter2", ofType: "caf")let filePath = URL(fileURLWithPath: path!, isDirectory: false)AudioServicesCreateSystemSoundID(filePath as CFURL, &soundID)}AudioServicesPlaySystemSound(soundID)stillImageOutput.captureStillImageAsynchronously(from: stillImageConnect) { (imageDataSampleBuffer, error) in//转为jpegDatalet jpegData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)//至此你获得了图片的Data格式,转换一下就得到了图片let image = UIImage(data: jpegData!)}
3.总结参考
总结:
其实想实现自己的界面在上面增加自己的控件就可以了,直接加在view上即可。
参考:
1.代码参考自定义相机这篇文章,作者写的挺仔细用的OC语言,我这里只是简单的实现了下部分,不知会出现啥bug,仅供参考哈,想实现更多的功能,去参考他的一下
2.去除快门声参考stackoverflow
声音下载地址
亲测可以的哦,作者确实牛逼
3.身份证识别,这里没有加上识别的代码,其实拍出了图片一切都好做了
我用的是腾讯优图,他上传图片,识别后返回信息给你,免费的哦,不过这种实现方式不太理想,要是能做成像扫二维码那样扫描获得图片估计就会好很多,可惜扫描取出图片我还不会,望有研究过的同学指点一二。
如果真的需要身份证识别功能的,推荐参考光学识别身份证OC,这个我测了是可以用的,并且已经用到了项目中,效果不错,就是不知道扫描后的数据被谁获取了,所以有隐患,如果对数据有保密需求的还是自行决定吧。
4.其他
如果格式什么的有问题,也可以参考简书,文章内容一样,但是那个看着更舒服些。
Swift 自定义相机扫描身份证信息相关推荐
- C# 国腾 二代身份证 扫描身份证信息
可以扫描身份证的 姓名 性别 民族 地址 身份证号码 签发机关 开始日期 结束日期 身份证正面 反面 正反面 证件照 等 <%@ Page Language="c#" ...
- 手机怎么扫描身份证扫描件?这个方法就挺简单
智能手机已经成为人们生活中不可或缺的一部分,我们可以用手机拍照.录制视频.听音乐.发送信息和拨打电话等等.但是,您是否知道您的智能手机还可以扫描身份证扫描件吗?这样可以方便地将纸质身份证转换成电子文件 ...
- js如何实现扫描身份证识别_移动端扫描身份证获取获取身份证信息。
移动端扫描身份证获取身份证信息(前端部分) 最近做了个扫描身份证的功能主要分以下几个步骤 1:使用H5+调用手机底层相机拍照功能 if(window.plus){ playCamera(); }els ...
- uni开发微信小程序自定义相机自动检测(人像+身份证)
之前开发过微信小程序自定义相机拍照检测人像和身份证检测.一直期望写篇文章记录一下,趁现在有点时间,总结一下. 需求点: 1.能够自定拍摄人像 2.能够自动拍摄身份证正面照 3.识别身份证并且和人脸照比 ...
- js如何实现扫描身份证识别_如何识别身份证上信息?快速录入看这招
在我们生活中有时会出现扫描文件的现象.当然最方便的就是用手机扫描证件,可是如何才能用手机扫描证件呢?其实很简单,小编今天就来为大家分享如何用手机扫描证件!希望小编今天的经验能对大家带来帮助哦!(下面的 ...
- Android 拍身份证(自定义相机)
Android自定义相机拍摄二代身份证. 感谢开源,尊重他人劳动成果,本自定义相机拍照核心逻辑取自云栖社区上Android 手把手带你玩转自定义相机 文章,本文仅仅在此基础上再次封装了返回拍照地址等监 ...
- Android 自定义相机 身份证拍照 自定义身份证相机
项目中需要用到拍摄身份证,拍完照片后直接拿到和身份证比例一致的图片,做成功的结果如下: 拍完照后直接拿到裁剪好的图本文的核心技术来自: https://yq.aliyun.com/article ...
- Android拍照扫描识别身份证信息SDK
Android拍照扫描识别身份证信息SDK 移动互联网是大趋势? 随着智能手机的硬件不断优化,移动互联网及应用大范围普及,互联网+各行各业,跨界.融合.创新,市场瞬息万变,有野心的企业和人.技术都在拼 ...
- 自动拍照扫描识别身份证信息SDK
自动拍照扫描识别身份证信息SDK 互联网金融,金融行业,P2P,的大背景:去年开始一股互联网加的风,刮遍了全国各地,到了2016/2017年火了互联网金融,也火了OCR识别软件(自动拍照扫描识别身份证 ...
最新文章
- 在Redis中设置了过期时间的Key,需要注意哪些问题?
- 原型设计工具【收集转帖】
- 【C语言笔记结构体】
- Java线程池架构(一)原理和源码解析
- 四个角不是直角的四边形_同步资料人教版四上数学第五单元平行四边形和梯形5.1...
- iOS版本更新与集成百度地图
- python之路 -- 并发编程之线程
- Xlib: connection to :0.0 refused by server解决方法
- python appium 并行多设备_appium 多个设备同时执行
- 计算机考研C语言题库
- 8421BCD码与十进制之间的转换
- linux网卡配置trunk模式,centos配置单网卡为Trunk模式
- cve_2019_0708复现踩坑
- 将Excel文件导入到数据库中
- GBase 8c 技术白皮书 六
- Hyperopt的使用
- 对抗苹果隐私新规?iOS应用1个月没更新 谷歌回应了
- 【Android】关于statusbar的处理
- How to design an FPGA from scratch-1_FPGA_8_24
- 基于springboot物业管理系统毕设