Flutter敏感内容分析插件sensitive_content_analysis的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter敏感内容分析插件 sensitive_content_analysis 的使用

概述

通过使用 Sensitive Content Analysis 插件,您可以检测图片和视频中的不当内容,并在显示之前提醒用户。该插件允许您在应用中集成 Apple 的 SensitiveContentAnalysis 框架,以提供更安全的用户体验。

最低要求

  • iOS/iPadOS: >=16.0
  • macOS: >=14.0

注意事项

  • 为了保持包的轻量级并让您完全控制UI的外观,此包故意不包含叠加或模糊功能。
  • 该框架仅在物理设备上工作。

安装

添加应用权限

要在您的应用中使用 SensitiveContentAnalysis,您需要添加 com.apple.developer.sensitivecontentanalysis.client 权限到您的应用签名代码中:

<key>com.apple.developer.sensitivecontentanalysis.client</key>
<array>
    <string>analysis</string>
</array>

可以通过在 Xcode 中启用“Sensitive Content Analysis”能力来添加此权限。

安装测试配置文件

对于测试目的,Apple 提供了一个测试配置文件,使您可以在不安装实际的NSFW内容的情况下评估框架的功能。

更多信息参见:Testing Your App’s Response to Sensitive Media

使用与示例

检查策略

检查当前用户的策略设置是否允许敏感内容分析:

final sca = SensitiveContentAnalysis();

int? policy = await sca.checkPolicy();
if (policy != null) {
  print('Current policy: $policy');
}

策略值解释

  • disabled = 0: 框架不检测裸露内容。
  • simpleInterventions = 1: 用户启用了敏感内容警告。
  • descriptiveInterventions = 2: 用户启用了通信安全性控制和敏感内容警告。

分析图像

文件图像

final sca = SensitiveContentAnalysis();
final ImagePicker picker = ImagePicker();

// Pick an image.
final XFile? image = await picker.pickImage(source: ImageSource.gallery);

if (image != null) {
  Uint8List imageData = await image.readAsBytes();

  // Analyze the image for sensitive content.
  final bool? isSensitive = await sca.analyzeImage(imageData);
  if (isSensitive != null) {
    print('Is sensitive: $isSensitive');
  }
}

网络图像

final String url = "https://example.com/image.png";

final bool? isSensitive = await sca.analyzeNetworkImage(url: url);
if (isSensitive != null) {
  print('Is sensitive: $isSensitive');
}

分析视频

网络视频

Future<void> analyzeNetworkVideo() async {
  Dio dio = Dio();
  Directory tempDir = await getTemporaryDirectory();

  const url = "https://example.com/video.mov";
  final videoName = p.basename(url);
  final file = File("${tempDir.path}/$videoName");
  final response = await dio.download(url, file.path);

  if (response.statusCode == 200) {
    bool? isSensitive = await sca.analyzeVideo(url: file.path);
    print("SENSITIVE: $isSensitive");
    await file.delete();
  }
}

本地视频

Future<void> analyzeLocalVideo() async {
  const XTypeGroup typeGroup = XTypeGroup(
    label: 'video',
    extensions: ['mp4', 'mkv', 'avi', 'mov'],
  );
  final XFile? selectedFile =
      await openFile(acceptedTypeGroups: [typeGroup]);

  if (selectedFile != null) {
    bool? isSensitive = await sca.analyzeVideo(url: selectedFile.path);
    print("SENSITIVE: $isSensitive");
  }
}

示例Demo

以下是一个完整的Flutter应用程序示例,展示了如何使用 sensitive_content_analysis 插件进行各种操作:

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:sensitive_content_analysis/sensitive_content_analysis.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final sca = SensitiveContentAnalysis();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Sensitive Content Analysis Demo')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async => await checkPolicy(),
                child: Text('Check Policy'),
              ),
              ElevatedButton(
                onPressed: () async => await analyzeImage(),
                child: Text('Analyze Local Image'),
              ),
              ElevatedButton(
                onPressed: () async => await analyzeNetworkImage(),
                child: Text('Analyze Network Image'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Future<void> checkPolicy() async {
    int? policy = await sca.checkPolicy();
    print('Current policy: $policy');
  }

  Future<void> analyzeImage() async {
    final ImagePicker picker = ImagePicker();
    final XFile? image = await picker.pickImage(source: ImageSource.gallery);

    if (image != null) {
      Uint8List imageData = await image.readAsBytes();
      final bool? isSensitive = await sca.analyzeImage(imageData);
      print('Is sensitive: $isSensitive');
    }
  }

  Future<void> analyzeNetworkImage() async {
    final String url = "https://example.com/image.png";
    final bool? isSensitive = await sca.analyzeNetworkImage(url: url);
    print('Is sensitive: $isSensitive');
  }
}

这个示例包含了基本的按钮和功能调用,可以帮助你快速上手 sensitive_content_analysis 插件。


更多关于Flutter敏感内容分析插件sensitive_content_analysis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter敏感内容分析插件sensitive_content_analysis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用sensitive_content_analysis插件来进行敏感内容分析的代码示例。这个插件通常用于检测文本中的敏感信息,如脏话、色情内容等。

首先,确保你已经在pubspec.yaml文件中添加了sensitive_content_analysis依赖:

dependencies:
  flutter:
    sdk: flutter
  sensitive_content_analysis: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中编写代码来使用这个插件。以下是一个简单的示例,展示如何检测一段文本中的敏感内容:

import 'package:flutter/material.dart';
import 'package:sensitive_content_analysis/sensitive_content_analysis.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sensitive Content Analysis Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SensitiveContentAnalysisScreen(),
    );
  }
}

class SensitiveContentAnalysisScreen extends StatefulWidget {
  @override
  _SensitiveContentAnalysisScreenState createState() => _SensitiveContentAnalysisScreenState();
}

class _SensitiveContentAnalysisScreenState extends State<SensitiveContentAnalysisScreen> {
  final TextEditingController _controller = TextEditingController();
  String _result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Sensitive Content Analysis Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              maxLines: 10,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter text to analyze',
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  _result = 'Analyzing...';
                });

                try {
                  final SensitiveContentAnalysis sensitiveContentAnalysis = SensitiveContentAnalysis();
                  final bool isSensitive = await sensitiveContentAnalysis.isSensitive(_controller.text);
                  setState(() {
                    _result = isSensitive ? 'The text contains sensitive content.' : 'The text does not contain sensitive content.';
                  });
                } catch (e) {
                  setState(() {
                    _result = 'Error analyzing text: $e';
                  });
                }
              },
              child: Text('Analyze'),
            ),
            SizedBox(height: 20),
            Text(
              _result,
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个文本字段用于输入要分析的文本,以及一个按钮用于触发敏感内容分析。分析的结果会显示在下方的文本区域中。

注意:

  1. SensitiveContentAnalysis类的isSensitive方法是一个异步方法,它返回一个布尔值,指示输入文本是否包含敏感内容。
  2. 在实际使用中,你可能需要根据插件的文档来调整或扩展敏感内容分析的功能。
  3. 确保你已经正确配置了插件所需的任何依赖项或服务(如果有的话)。

希望这个示例能帮助你理解如何在Flutter项目中使用sensitive_content_analysis插件进行敏感内容分析。

回到顶部