SwiftFltbdfacePlugin.swift 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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"])
  19. return
  20. }
  21. else if call.method == "setFaceConfig" {
  22. let arguments = call.arguments as? [String: Any] ?? [:]
  23. self.faceManager?.setIllumThreshold(arguments["brightnessValue"] as? Int ?? 40)
  24. self.faceManager?.setBlurThreshold(arguments["blurnessValue"] as? CGFloat ?? 0.5)
  25. self.faceManager?.setOccluThreshold(arguments["occlusionValue"] as? CGFloat ?? 0.5)
  26. self.faceManager?.setEulurAngleThrPitch(arguments["headPitchValue"] as? Int ?? 10,
  27. yaw: arguments["headYawValue"] as? Int ?? 10,
  28. roll: arguments["headRollValue"] as? Int ?? 10)
  29. self.faceManager?.setCropFaceSizeWidth(arguments["cropFaceValue"] as? CGFloat ?? 400)
  30. self.faceManager?.setMinFaceSize(arguments["minFaceSize"] as? Int ?? 200)
  31. self.faceManager?.setNotFaceThreshold(arguments["notFaceValue"] as? CGFloat ?? 0.6)
  32. self.faceManager?.setMaxCropImageNum(arguments["maxCropImageNum"] as? Int ?? 1)
  33. self.faceManager?.setIsCheckQuality(arguments["isCheckFaceQuality"] as? Bool ?? true)
  34. let configModel = LivingConfigModel.sharedInstance()
  35. configModel?.liveActionArray = arguments["livenessTypeList"] as? NSMutableArray ?? []
  36. configModel?.isByOrder = !(arguments["isLivenessRandom"] as? Bool ?? true)
  37. configModel?.numOfLiveness = arguments["livenessRandomCount"] as? Int ?? 0
  38. return
  39. }
  40. else if call.method == "startFaceLiveness" {
  41. let rootViewController = UIApplication.shared.delegate?.window??.rootViewController
  42. if(nil == rootViewController){
  43. result(FlutterError(code: "500", message: "rootViewController is nil.", details: "rootViewController is not set."))
  44. return
  45. }
  46. let detectController = LivenessViewController()
  47. detectController.resultHandler = { [weak self] imageString in
  48. self?.eventSink?(imageString)
  49. }
  50. // let navController = UINavigationController(rootViewController: detectController)
  51. // navController.modalPresentationStyle = .fullScreen
  52. // rootViewController?.present(navController, animated: true, completion: nil)
  53. // let testController = TestViewController()
  54. // let navController = UINavigationController(rootViewController: testController)
  55. // navController.modalPresentationStyle = .fullScreen
  56. rootViewController?.present(detectController, animated: true, completion: nil)
  57. return
  58. }
  59. }
  60. }
  61. extension SwiftFltbdfacePlugin: FlutterStreamHandler {
  62. public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
  63. eventSink = events
  64. return nil
  65. }
  66. public func onCancel(withArguments arguments: Any?) -> FlutterError? {
  67. eventSink = nil
  68. return nil
  69. }
  70. }