SwiftFltbdfacePlugin.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. IDLFaceLivenessManager.sharedInstance()?.livenesswithList(arguments["livenessTypeList"] as? NSMutableArray as? [Any] , order: !(arguments["isLivenessRandom"] as? Bool ?? true), numberOfLiveness: arguments["livenessRandomCount"] as? Int ?? 0)
  47. self.faceManager?.initCollect()
  48. return
  49. }
  50. else if call.method == "startFaceLiveness" {
  51. let rootViewController = UIApplication.shared.delegate?.window??.rootViewController
  52. if(nil == rootViewController){
  53. result(FlutterError(code: "500", message: "rootViewController is nil.", details: "rootViewController is not set."))
  54. return
  55. }
  56. print("11111")
  57. let detectController = BDFaceLivenessViewController()
  58. detectController.resultHandler = { [weak self] imageString in
  59. var map = [String: Any]()
  60. map["event"] = "startFaceLiveness"
  61. map["status"] = 0
  62. map["message"] = "采集成功"
  63. map["data"] = imageString
  64. self?.eventSink?(map)
  65. }
  66. rootViewController?.present(detectController, animated: true, completion: nil)
  67. return
  68. }
  69. }
  70. }
  71. extension SwiftFltbdfacePlugin: FlutterStreamHandler {
  72. public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
  73. eventSink = events
  74. return nil
  75. }
  76. public func onCancel(withArguments arguments: Any?) -> FlutterError? {
  77. eventSink = nil
  78. return nil
  79. }
  80. }