人脸识别
来源:互联网 发布:淘宝网帽子女包头帽 编辑:程序博客网 时间:2024/06/06 01:39
项目地址
链接:http://pan.baidu.com/s/1miKdwFI
密码:kow2
总体思路:
1、从相册选择带人脸的一张图
2、识别出有几个人
3、根据识别出来的特征来描绘人脸特征 (画图)
识别效果
代码实战
STEP1 从相册取出图
extension ViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate { func chooseImage() { let picker = UIImagePickerController() picker.delegate = self picker.sourceType = .savedPhotosAlbum present(picker, animated: true) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { picker.dismiss(animated: true, completion: nil) guard let uiImage = info[UIImagePickerControllerOriginalImage] as? UIImage else { fatalError("no image selected") } self.buttonOriginalImage.setBackgroundImage(uiImage, for: .normal) self.processImage(image: uiImage) }}
STEP2 得到人脸数目
func preformRequestForFaceLandmarks(image: UIImage) { selectedImage = image self.resultLabel.text = "相片處理中。。。" let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:]) do { let request = VNDetectFaceLandmarksRequest(completionHandler: handleFaceLandmarksDetection) try handler.perform([request]) } catch { print(error) } }
func handleFaceLandmarksDetection(request: VNRequest, error: Error?){ guard let observations = request.results as? [VNFaceObservation] else { fatalError("could not get results from request") } self.resultLabel.text = "found \(observations.count) faces" }
STEP3 得到人脸的特征点
func addFaceFeature(forObservation face: VNFaceObservation, toView view: UIView) ->[VNFaceLandmarkRegion2D]{// 找到所有的面部特徵 眼睛鼻子嘴巴。。。。// 把他們畫出來 guard let landmarks = face.landmarks else { return [] } var landmarkRegions: [VNFaceLandmarkRegion2D] = [] if let faceContour = landmarks.faceContour { landmarkRegions.append(faceContour) } if let leftEye = landmarks.leftEye { landmarkRegions.append(leftEye) } if let rightEye = landmarks.rightEye { landmarkRegions.append(rightEye) } if let nose = landmarks.nose { landmarkRegions.append(nose) } if let innerLips = landmarks.innerLips { landmarkRegions.append(innerLips) } if let noesCrest = landmarks.noseCrest { landmarkRegions.append(noesCrest) } if let medianLine = landmarks.medianLine { landmarkRegions.append(medianLine) } if let outLips = landmarks.outerLips { landmarkRegions.append(outLips) } if let lefEyebrow = landmarks.leftEyebrow { landmarkRegions.append(lefEyebrow) } if let rightEyebrow = landmarks.rightEyebrow { landmarkRegions.append(rightEyebrow) } return landmarkRegions }
STEP4 把点画成图
func drawOnImage(source: UIImage,boundingRect: CGRect,faceLandmarkRegions: [VNFaceLandmarkRegion2D]) -> UIImage { UIGraphicsBeginImageContextWithOptions(source.size, false, 1) let context = UIGraphicsGetCurrentContext()! context.translateBy(x: 0, y: source.size.height) context.scaleBy(x: 1.0, y: -1.0)// context.setBlendMode(CGBlendMode.colorBurn) context.setBlendMode(CGBlendMode.colorDodge) context.setLineJoin(.round) context.setLineCap(.round) context.setShouldAntialias(true) context.setAllowsAntialiasing(true) let rectWidth = source.size.width * boundingRect.size.width let rectHeight = source.size.height * boundingRect.size.height // ERROR// let rect = CGRect(x: 0, y: 0, width: rectWidth, height: rectHeight) let rect = CGRect(x: 0, y: 0, width: source.size.width, height: source.size.height) context.draw(source.cgImage!, in: rect) var fillColor = UIColor.green fillColor.setFill() context.addRect(CGRect(x: boundingRect.origin.x * source.size.width, y:boundingRect.origin.y * source.size.height, width: rectWidth, height: rectHeight)) context.drawPath(using: CGPathDrawingMode.stroke) //draw overlay fillColor = UIColor.blue fillColor.setStroke() context.setLineWidth(8.0) for faceLandmarkRegion in faceLandmarkRegions { var points: [CGPoint] = [] for i in 0..<faceLandmarkRegion.pointCount { let point = faceLandmarkRegion.normalizedPoints[i] let p = CGPoint(x: CGFloat(point.x), y: CGFloat(point.y)) points.append(p) } let mappedPoints = points.map { CGPoint(x: boundingRect.origin.x * source.size.width + $0.x * rectWidth, y: boundingRect.origin.y * source.size.height + $0.y * rectHeight) } context.addLines(between: mappedPoints) context.drawPath(using: CGPathDrawingMode.stroke) } let coloredImg : UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return coloredImg }
阅读全文
1 0
- 语音识别&人脸识别
- 【人脸识别】初识人脸识别
- 【人脸识别】初识人脸识别
- OpenCV的行人识别&人脸识别
- 图片识别之人脸识别API
- OpenCV的行人识别&人脸识别
- IOS人脸识别和二维码识别
- 人脸识别之颜色识别
- Face++ 人脸识别,身份识别集成
- 人脸识别:(抓拍+识别)
- 人脸识别的发展方向:蒙面识别
- 人脸识别
- 人脸识别
- 人脸识别算法
- 简单人脸识别
- 人脸识别代码
- 人脸识别
- [Camera] 人脸识别
- 8皇后问题 递归 函数调用是重点
- java 中 mongodb的各种操作 模糊查询 精确查询 等等
- Spring之Session篇
- nodeJS中express+busboy实现文件上传
- Java set 集合的基本用法
- 人脸识别
- OpenCV笔记大集锦
- IntelliJ IDEA 创建maven springmvc 简单项目
- NoSQL简介
- (c#) 销毁资源和释放内存
- 3D数学 学习笔记(7) 视图、视锥、视场(Field of View)、裁切空间、屏幕空间
- tp3.2下支付宝即时到账开发的一种方式
- 微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作
- c#访问Oracle数据库,执行数据库操作