SwiftFltbdfacePlugin.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import Flutter
  2. import UIKit
  3. import IDLFaceSDK
  4. public class SwiftFltbdfacePlugin: NSObject, FlutterPlugin {
  5. var eventSink: FlutterEventSink?
  6. var faceManager = FaceSDKManager.sharedInstance()
  7. public static func register(with registrar: FlutterPluginRegistrar) {
  8. let channel = FlutterMethodChannel(name: "plugin.bughub.dev/fltbdface", binaryMessenger: registrar.messenger())
  9. let instance = SwiftFltbdfacePlugin()
  10. registrar.addMethodCallDelegate(instance, channel: channel)
  11. let eventChannelName = "plugin.bughub.dev/event"
  12. let eventChannel = FlutterEventChannel(name: eventChannelName, binaryMessenger: registrar.messenger())
  13. eventChannel.setStreamHandler(instance)
  14. }
  15. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  16. if call.method == "initialize" {
  17. let arguments = call.arguments as? [String: String] ?? [:]
  18. self.faceManager?.setLicenseID(arguments["licenseId"], andLocalLicenceFile: arguments["licenseFileName"], andRemoteAuthorize: true)
  19. if self.faceManager?.canWork() == true {
  20. var map = [String: Any]()
  21. map["event"] = "initialize"
  22. map["status"] = 0
  23. map["message"] = "初始化成功"
  24. self.eventSink?(map)
  25. print("初始化成功")
  26. }else{
  27. self.eventSink?(FlutterError(code: "10010", message:"初始化失败", details: ""))
  28. print("初始化失败")
  29. }
  30. return
  31. }
  32. else if call.method == "setFaceConfig" {
  33. let arguments = call.arguments as? [String: Any] ?? [:]
  34. self.faceManager?.setMinFaceSize(arguments["minFaceSize"] as? Int32 ?? 200)
  35. self.faceManager?.setNotFaceThreshold(arguments["notFaceValue"] as? CGFloat ?? 0.6)
  36. self.faceManager?.setBlurThreshold(arguments["blurnessValue"] as? CGFloat ?? 0.3)
  37. // self.faceManager?.setIllumThreshold(arguments["brightnessValue"] as? CGFloat ?? 40)
  38. self.faceManager?.setOccluThreshold(arguments["occlusionValue"] as? CGFloat ?? 0.5)
  39. self.faceManager?.setEulurAngleThrPitch(arguments["headPitchValue"] as? Float ?? 8,
  40. yaw: arguments["headYawValue"] as? Float ?? 8,
  41. roll: arguments["headRollValue"] as? Float ?? 8)
  42. self.faceManager?.setImageWithScale(arguments["scale"] as? CGFloat ?? 1.0)
  43. self.faceManager?.setCropFaceSizeHeight(arguments["cropHeight"] as? CGFloat ?? 640)
  44. self.faceManager?.setMaxCropImageNum(6)
  45. self.faceManager?.setImageEncrypteWithType(arguments["secType"] as? Int32 ?? 0)
  46. let list = arguments["livenessTypeList"] as? NSMutableArray as? [Any]
  47. IDLFaceLivenessManager.sharedInstance()?.livenesswithList(list , order: !(arguments["isLivenessRandom"] as? Bool ?? true), numberOfLiveness: arguments["livenessRandomCount"] as? Int ?? 0)
  48. self.faceManager?.initCollect()
  49. return
  50. }
  51. else if call.method == "startFaceLiveness" {
  52. let rootViewController = UIApplication.shared.delegate?.window??.rootViewController
  53. if(nil == rootViewController){
  54. result(FlutterError(code: "500", message: "rootViewController is nil.", details: "rootViewController is not set."))
  55. return
  56. }
  57. print("11111")
  58. let detectController = BDFaceLivenessViewController()
  59. detectController.faceImageAction = {image in
  60. var map = [String: Any]()
  61. map["event"] = "startFaceLiveness"
  62. guard let faceImage = image else {
  63. map["status"] = -1
  64. map["message"] = "采集失败"
  65. self.eventSink?(map)
  66. return
  67. }
  68. map["status"] = 0
  69. map["message"] = "采集成功"
  70. map["data"] = faceImage
  71. self.eventSink?(map)
  72. }
  73. rootViewController?.present(detectController, animated: true, completion: nil)
  74. return
  75. }
  76. }
  77. }
  78. extension SwiftFltbdfacePlugin: FlutterStreamHandler {
  79. public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
  80. print("onListen")
  81. eventSink = events
  82. return nil
  83. }
  84. public func onCancel(withArguments arguments: Any?) -> FlutterError? {
  85. eventSink = nil
  86. return nil
  87. }
  88. }