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 自定义相机扫描身份证信息相关推荐

  1. C# 国腾 二代身份证 扫描身份证信息

    可以扫描身份证的 姓名 性别 民族 地址 身份证号码 签发机关 开始日期 结束日期  身份证正面 反面  正反面  证件照 等 <%@ Page Language="c#" ...

  2. 手机怎么扫描身份证扫描件?这个方法就挺简单

    智能手机已经成为人们生活中不可或缺的一部分,我们可以用手机拍照.录制视频.听音乐.发送信息和拨打电话等等.但是,您是否知道您的智能手机还可以扫描身份证扫描件吗?这样可以方便地将纸质身份证转换成电子文件 ...

  3. js如何实现扫描身份证识别_移动端扫描身份证获取获取身份证信息。

    移动端扫描身份证获取身份证信息(前端部分) 最近做了个扫描身份证的功能主要分以下几个步骤 1:使用H5+调用手机底层相机拍照功能 if(window.plus){ playCamera(); }els ...

  4. uni开发微信小程序自定义相机自动检测(人像+身份证)

    之前开发过微信小程序自定义相机拍照检测人像和身份证检测.一直期望写篇文章记录一下,趁现在有点时间,总结一下. 需求点: 1.能够自定拍摄人像 2.能够自动拍摄身份证正面照 3.识别身份证并且和人脸照比 ...

  5. js如何实现扫描身份证识别_如何识别身份证上信息?快速录入看这招

    在我们生活中有时会出现扫描文件的现象.当然最方便的就是用手机扫描证件,可是如何才能用手机扫描证件呢?其实很简单,小编今天就来为大家分享如何用手机扫描证件!希望小编今天的经验能对大家带来帮助哦!(下面的 ...

  6. Android 拍身份证(自定义相机)

    Android自定义相机拍摄二代身份证. 感谢开源,尊重他人劳动成果,本自定义相机拍照核心逻辑取自云栖社区上Android 手把手带你玩转自定义相机 文章,本文仅仅在此基础上再次封装了返回拍照地址等监 ...

  7. Android 自定义相机 身份证拍照 自定义身份证相机

    项目中需要用到拍摄身份证,拍完照片后直接拿到和身份证比例一致的图片,做成功的结果如下:    拍完照后直接拿到裁剪好的图本文的核心技术来自: https://yq.aliyun.com/article ...

  8. Android拍照扫描识别身份证信息SDK

    Android拍照扫描识别身份证信息SDK 移动互联网是大趋势? 随着智能手机的硬件不断优化,移动互联网及应用大范围普及,互联网+各行各业,跨界.融合.创新,市场瞬息万变,有野心的企业和人.技术都在拼 ...

  9. 自动拍照扫描识别身份证信息SDK

    自动拍照扫描识别身份证信息SDK 互联网金融,金融行业,P2P,的大背景:去年开始一股互联网加的风,刮遍了全国各地,到了2016/2017年火了互联网金融,也火了OCR识别软件(自动拍照扫描识别身份证 ...

最新文章

  1. 在Redis中设置了过期时间的Key,需要注意哪些问题?
  2. 原型设计工具【收集转帖】
  3. 【C语言笔记结构体】
  4. Java线程池架构(一)原理和源码解析
  5. 四个角不是直角的四边形_同步资料人教版四上数学第五单元平行四边形和梯形5.1...
  6. iOS版本更新与集成百度地图
  7. python之路 -- 并发编程之线程
  8. Xlib: connection to :0.0 refused by server解决方法
  9. python appium 并行多设备_appium 多个设备同时执行
  10. 计算机考研C语言题库
  11. 8421BCD码与十进制之间的转换
  12. linux网卡配置trunk模式,centos配置单网卡为Trunk模式
  13. cve_2019_0708复现踩坑
  14. 将Excel文件导入到数据库中
  15. GBase 8c 技术白皮书 六
  16. Hyperopt的使用
  17. 对抗苹果隐私新规?iOS应用1个月没更新 谷歌回应了
  18. 【Android】关于statusbar的处理
  19. How to design an FPGA from scratch-1_FPGA_8_24
  20. 基于springboot物业管理系统毕设

热门文章

  1. prometheus使用pushgateway监控网路丢包
  2. 【嵙大OJ】 未完成Problem 2131:求余弦值
  3. windows10内网(局域网)远程桌面连接
  4. java小黑框运行时汉字为古文,Spring使用中中文乱码的情况
  5. C#同一窗口通过一个按键切换显示不同画面
  6. 【PHP】工银e缴费PHP版本对接?
  7. iSee在第一年发展期间的败笔
  8. android实时传输视频Socket
  9. 安全防御——防火墙二
  10. 大力推荐,群聊软件Mumble