ContentSecurityObject.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # @Author : Rocky
  2. # @File : ContentSecurityObject.py
  3. # @Time : 2023/8/18 11:02
  4. from alibabacloud_green20220302.client import Client as Green20220302Client
  5. from alibabacloud_tea_openapi import models as open_api_models
  6. from alibabacloud_green20220302 import models as green_20220302_models
  7. from alibabacloud_tea_util import models as util_models
  8. from Ansjer.config import LOGGER
  9. from django.conf import settings
  10. ALICLOUD_AK = settings.ALICLOUD_AK
  11. ALICLOUD_SK = settings.ALICLOUD_SK
  12. TEXT_ILLEGAL_LABEL_LIST = ['political_content', 'profanity', 'contraband', 'sexual_content', 'violence',
  13. 'negative_content', 'religion', 'cyberbullying']
  14. IMAGE_ILLEGAL_LABEL_LIST = ['pornographic_adultContent', 'sexual_suggestiveContent', 'political_politicalFigure_1',
  15. 'violent_blood', 'contraband_drug']
  16. class ContentSecurity:
  17. """
  18. 阿里云内容安全服务类
  19. """
  20. def __init__(self):
  21. pass
  22. @staticmethod
  23. def create_client() -> Green20220302Client:
  24. """
  25. 使用AK&SK初始化账号Client
  26. @return: Client
  27. @throws Exception
  28. """
  29. config = open_api_models.Config(
  30. # 必填,您的 AccessKey ID,
  31. access_key_id=ALICLOUD_AK,
  32. # 必填,您的 AccessKey Secret,
  33. access_key_secret=ALICLOUD_SK
  34. )
  35. # Endpoint 请参考 https://api.aliyun.com/product/Green
  36. config.endpoint = f'green-cip.cn-shanghai.aliyuncs.com'
  37. return Green20220302Client(config)
  38. def text_review(self, service, service_parameters):
  39. """
  40. 文本审核
  41. @param service: 审核服务类型
  42. @param service_parameters: 审核服务参数集
  43. @return: bool, True: 审核通过, False: 审核不通过
  44. """
  45. client = self.create_client()
  46. text_moderation_request = green_20220302_models.TextModerationRequest(service, service_parameters)
  47. runtime = util_models.RuntimeOptions()
  48. res = client.text_moderation_with_options(text_moderation_request, runtime)
  49. print(res)
  50. if res.status_code != 200:
  51. return False
  52. labels = res.body.data.labels
  53. labels_list = labels.split(',')
  54. for label in labels_list:
  55. if label in TEXT_ILLEGAL_LABEL_LIST:
  56. return False
  57. return True
  58. def image_review(self, service, service_parameters):
  59. """
  60. 图片审核
  61. @param service: 审核服务类型
  62. @param service_parameters: 审核服务参数集
  63. @return: bool, True: 审核通过, False: 审核不通过
  64. """
  65. client = self.create_client()
  66. image_moderation_request = green_20220302_models.ImageModerationRequest(service, service_parameters)
  67. runtime = util_models.RuntimeOptions()
  68. res = client.image_moderation_with_options(image_moderation_request, runtime)
  69. print(res)
  70. LOGGER.info('图片审核响应内容:{}'.format(res))
  71. if res.status_code != 200:
  72. return False
  73. # 获取审核结果
  74. result = res.body
  75. if result.code != 200:
  76. return False
  77. result_list = result.data.result
  78. # 配到风险标签且置信分高于80时返回False
  79. for result in result_list:
  80. if result.label in IMAGE_ILLEGAL_LABEL_LIST:
  81. if result.confidence >= 80:
  82. return False
  83. return True