Flutter敏感内容分析插件sensitive_content_analysis的使用
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
更多关于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应用,它包含一个文本字段用于输入要分析的文本,以及一个按钮用于触发敏感内容分析。分析的结果会显示在下方的文本区域中。
注意:
SensitiveContentAnalysis
类的isSensitive
方法是一个异步方法,它返回一个布尔值,指示输入文本是否包含敏感内容。- 在实际使用中,你可能需要根据插件的文档来调整或扩展敏感内容分析的功能。
- 确保你已经正确配置了插件所需的任何依赖项或服务(如果有的话)。
希望这个示例能帮助你理解如何在Flutter项目中使用sensitive_content_analysis
插件进行敏感内容分析。