उपयोगकर्ता-जनित सामग्री (UGC) प्लेटफ़ॉर्म की अन्तरक्रियाशीलता और अप्रत्याशितता इस बात का एक बड़ा हिस्सा है कि वे इतने लोकप्रिय क्यों हैं। लेकिन, उस अप्रत्याशितता का मतलब है कि समुदायों को अपनी सामग्री की निगरानी में मेहनती होना चाहिए ताकि यह सुनिश्चित हो सके कि यह उनके सामुदायिक दिशानिर्देशों या स्वीकार्य उपयोग नीति को पूरा करता है और सभी उपयोगकर्ताओं के लिए उपयुक्त, सुरक्षित और स्वागत योग्य है। इसका परिणाम अक्सर एक मॉडरेशन प्रणाली में होता है जहां उपयोगकर्ता समुदाय के दिशा-निर्देशों के लिए संभावित अपराधों की रिपोर्ट करते हैं और मॉडरेटर या व्यवस्थापक आवश्यक कार्रवाई करते हैं। यह अक्सर एक मैन्युअल प्रक्रिया होती है जो वांछित होने के लिए बहुत कुछ छोड़ देती है। लाइव-स्ट्रीमिंग (एआई) और मशीन लर्निंग (एमएल) टूल्स में हाल के वर्षों में सुधार हुआ है, और डेवलपर्स इन टूल्स का उपयोग अपने समुदायों को मॉडरेट करने में सहायता के लिए कर सकते हैं। इस पोस्ट में, हम Amazon Interactive Video Service (Amazon IVS) और Amazon Rekognition के साथ ऐसा करने का एक तरीका देखेंगे। आर्टिफिशियल इंटेलिजेंस समाधान अवलोकन के साथ एक एप्लिकेशन में हर लाइव स्ट्रीम के हर फ्रेम का विश्लेषण करना बहुत महंगा और मुश्किल काम होगा। इसके बजाय, डेवलपर अपने मॉडरेटर्स की मदद के लिए एक निर्दिष्ट आवृत्ति पर उनके अनुप्रयोगों में लाइव स्ट्रीम के नमूनों का विश्लेषण कर सकते हैं, अगर सामग्री में मानव मॉडरेटर द्वारा आगे की समीक्षा की आवश्यकता है तो उन्हें सतर्क कर सकते हैं। यह 100% सही समाधान नहीं है, लेकिन यह सामग्री मॉडरेशन को स्वचालित करने और मॉडरेटर के काम को आसान बनाने में मदद करने का एक तरीका है। एआई/एमएल इस समाधान में निम्नलिखित चरण शामिल हैं: कॉन्फ़िगर एक निर्दिष्ट आवृत्ति पर थंबनेल छवियों को सहेजने के लिए अपने Amazon IVS चैनल पर Amazon सिंपल स्टोरेज सर्विस (Amazon S3) में लाइव स्ट्रीम की ऑटो रिकॉर्डिंग एक Amazon EventBridge नियम बनाएं जो Amazon S3 बकेट में एक नया ऑब्जेक्ट बनाए जाने पर सक्रिय होता है एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन बनाएं जो इवेंटब्रिज नियम द्वारा ट्रिगर हो जाता है और नग्नता, हिंसा या जुआ जैसी सामग्री का पता लगाने के लिए अमेज़ॅन रिकॉग्निशन का उपयोग करता है जिसे मानव मॉडरेटर द्वारा नियंत्रित करने की आवश्यकता हो सकती है एक एडब्ल्यूएस लैम्ब्डा फ़ंक्शन बनाएं और यदि आवश्यक हो तो लाइव स्ट्रीम को रोकने के साधन प्रदान करने के लिए इसे अमेज़ॅन एपीआई गेटवे के माध्यम से प्रदर्शित करें एक कस्टम घटना भेजें विश्लेषण के परिणामों से युक्त अमेज़न आईवीएस चैट रूम Amazon EventBridge नियम और AWS लैम्ब्डा फ़ंक्शंस बनाना नियम और कार्यों को बनाना आसान बनाने के लिए हम AWS सर्वर रहित एप्लिकेशन मॉडल (SAM) का उपयोग करेंगे। यहाँ संपूर्ण फ़ाइल है जो आवश्यक अनुमतियों, Amazon EventBridge नियम, AWS लैम्ब्डा परत (AWS SDK निर्भरता के लिए), और फ़ंक्शन परिभाषाओं का वर्णन करती है। हम इसे नीचे तोड़ देंगे। template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: Amazon IVS Moderation Functions Globals: Function: Runtime: nodejs18.x Timeout: 30 MemorySize: 128 Api: EndpointConfiguration: Type: REGIONAL Cors: AllowMethods: "'GET, POST, OPTIONS'" AllowHeaders: "'Content-Type'" AllowOrigin: "'*'" MaxAge: "'600'" Resources: IvsChatLambdaRefLayer: Type: AWS::Serverless::LayerVersion Properties: LayerName: sam-app-dependencies Description: Dependencies for sam app ContentUri: dependencies/ CompatibleRuntimes: - nodejs18.x LicenseInfo: "MIT" RetentionPolicy: Retain IVSAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyName: IVSModerationAccessPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 's3:GetObject' - 's3:GetObjectAcl' - 'ivschat:SendEvent' - 'ivs:StopStream' - 'rekognition:DetectModerationLabels' Resource: '*' Roles: - Ref: ModerateImageRole - Ref: StopStreamRole ApiAccessPolicy: Type: AWS::IAM::Policy Properties: PolicyName: ApiAccessPolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 'sts:AssumeRole' Resource: '*' Roles: - Ref: ModerateImageRole - Ref: StopStreamRole EventRule: Type: AWS::Events::Rule Properties: Description: EventRule State: ENABLED EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - ivs-demo-channel-stream-archive object: key: - suffix: .jpg Targets: - Arn: !GetAtt ModerateImage.Arn Id: MyLambdaFunctionTarget PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref ModerateImage Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt EventRule.Arn ModerateImage: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.moderateImage Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ StopStream: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.stopStream Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ Events: Api1: Type: Api Properties: Path: /stop-stream Method: POST Outputs: ApiURL: Description: "API endpoint URL for Prod environment" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" उस फ़ाइल में बहुत कुछ चल रहा है, तो आइए इसे थोड़ा सा तोड़ दें। सबसे पहले, हम अपने फंक्शन में JavaScript (v3) के लिए AWS SDK को शामिल करने के लिए एक लेयर बनाते हैं। IvsChatLambdaRefLayer: Type: AWS::Serverless::LayerVersion Properties: LayerName: sam-app-dependencies Description: Dependencies for sam app ContentUri: dependencies/ CompatibleRuntimes: - nodejs18.x LicenseInfo: "MIT" RetentionPolicy: Retain निर्देशिका में, एक फ़ाइल होती है जिसमें मॉड्यूल शामिल होते हैं जिनकी हमारे फ़ंक्शन को आवश्यकता होती है। dependencies/nodejs package.json { "dependencies": { "@aws-sdk/client-ivs": "^3.289.0", "@aws-sdk/client-ivschat": "^3.289.0", "@aws-sdk/client-rekognition": "^3.289.0" } } और कुंजियों द्वारा पहचाना जाने वाला अगला खंड हमारे सर्वर रहित एप्लिकेशन को आवश्यक APIs ( , , , , और ) तक पहुंचने की क्षमता देता है और स्टॉप स्ट्रीम विधि को उजागर करता है। जिसे हम Amazon API गेटवे के माध्यम से नीचे बनाएंगे। IVSAccessPolicy APIAccessPolicy s3:GetObject s3:GetObjectAcl ivschat:SendEvent ivs:StopStream rekognition:DetectModerationLabels अगला, हम Amazon EventBridge नियम बनाते हैं। के अंतर्गत संपत्ति Amazon S3 बकेट के नाम से मेल खानी चाहिए जिसे आपने अपने रिकॉर्डिंग कॉन्फ़िगरेशन में कॉन्फ़िगर किया था। अमेज़ॅन एस 3 में रिकॉर्डिंग प्लेलिस्ट और एचएलएस मीडिया समेत विभिन्न फाइलें बनाती है, इसलिए हम इस नियम को केवल हमारे थंबनेल के लिए सक्रिय करने के लिए फ़िल्टर कर सकते हैं, के नीचे को । bucket name object key suffix: jpg EventRule: Type: AWS::Events::Rule Properties: Description: EventRule State: ENABLED EventPattern: source: - aws.s3 detail-type: - "Object Created" detail: bucket: name: - ivs-demo-channel-stream-archive object: key: - suffix: .jpg Targets: - Arn: !GetAtt ModerateImage.Arn Id: MyLambdaFunctionTarget अगला, हम नियम को AWS लैम्ब्डा फ़ंक्शन को लागू करने के लिए आवश्यक अनुमतियाँ देते हैं। PermissionForEventsToInvokeLambda: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref ModerateImage Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !GetAtt EventRule.Arn अब हम अपने कार्य को परिभाषित कर सकते हैं जिसे Amazon EventBridge नियम द्वारा लागू किया जाएगा। ModerateImage: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.moderateImage Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ मैं और को पर्यावरण चर के रूप में घोषित कर रहा हूं, लेकिन आपके एप्लिकेशन को फ़ंक्शन में पारित ईवेंट से ARN मान प्राप्त होने की संभावना है क्योंकि आप इस कार्यक्षमता का उपयोग केवल एक Amazon IVS चैनल से अधिक के साथ करेंगे। नोट: DEMO_CHAT_ARN DEMO_CHANNEL_ARN अंत में, हम उस फ़ंक्शन को परिभाषित कर सकते हैं जिसका उपयोग यदि आवश्यक हो तो स्ट्रीम को रोकने के लिए किया जाएगा। StopStream: Type: 'AWS::Serverless::Function' Properties: Environment: Variables: DEMO_CHAT_ARN: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]' DEMO_CHANNEL_ARN: 'arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]' Handler: index.stopStream Layers: - !Ref IvsChatLambdaRefLayer CodeUri: lambda/ Events: Api1: Type: Api Properties: Path: /stop-stream Method: POST AWS लैम्ब्डा फ़ंक्शंस बनाना अब जब हमने AWS SAM के साथ अपने बुनियादी ढांचे का वर्णन कर लिया है, तो चलिए उन कार्यों को बनाते हैं जिनका हमने वर्णन किया था। में, हम SDK क्लासेस को , उन पर्यावरण चरों से मानों को पुनः प्राप्त करते हैं जिन्हें हमने पारित किया है, और हमारे कार्यों के लिए आवश्यक क्लाइंट के उदाहरण बनाते हैं। index.mjs import Arn import { IvsClient, StopStreamCommand } from "@aws-sdk/client-ivs"; import { IvschatClient, SendEventCommand } from "@aws-sdk/client-ivschat"; import { RekognitionClient, DetectModerationLabelsCommand } from "@aws-sdk/client-rekognition"; const chatArn = process.env.DEMO_CHAT_ARN; const channelArn = process.env.DEMO_CHANNEL_ARN; const ivsClient = new IvsClient(); const ivsChatClient = new IvschatClient(); const rekognitionClient = new RekognitionClient(); फंक्शन Amazon EventBridge ईवेंट प्राप्त करेगा, ईवेंट से और निकालेगा, और श्रेणियों के आधार पर छवियों में किसी भी अनुचित या आपत्तिजनक सामग्री का पता लगाने के लिए के माध्यम से भेजेगा . moderateImage bucket key rekognitionClient DetectModerationLabelsCommand यहाँ सूचीबद्ध export const moderateImage = async (event) => { console.log('moderateImage:', JSON.stringify(event, null, 2)); const bucket = event.detail.bucket.name; const key = event.detail.object.key; const detectLabelsCommandInput = { Image: { S3Object: { Bucket: bucket, Name: key, } }, }; const detectLabelsRequest = new DetectModerationLabelsCommand(detectLabelsCommandInput); const detectLabelsResponse = await rekognitionClient.send(detectLabelsRequest); if (detectLabelsResponse.ModerationLabels) { sendEvent('STREAM_MODERATION', detectLabelsResponse.ModerationLabels); } }; यदि आवश्यक हो, तो फ़ंक्शन किसी दिए गए Amazon IVS चैट रूम में किसी भी फ्रंट एंड कनेक्टेड क्लाइंट को कस्टम इवेंट प्रकाशित करने के लिए कॉल करता है। moderateImage sendEvent const sendEvent = async (eventName, eventDetails) => { const sendEventInput = { roomIdentifier: chatArn, attributes: { streamModerationEvent: JSON.stringify(eventDetails), }, eventName, }; const sendEventRequest = new SendEventCommand(sendEventInput); await ivsChatClient.send(sendEventRequest); }; आपका फ्रंट एंड यह तय कर सकता है कि इस घटना को कैसे संभालना है और इस घटना को प्रकाशित करने का तर्क आपकी व्यावसायिक आवश्यकताओं पर निर्भर करेगा। शायद आप क्लाउडवॉच में कस्टम अलार्म ट्रिगर करना चाहते हैं, एक ईमेल भेजें, या अमेज़ॅन एसएनएस के माध्यम से अधिसूचना प्रकाशित करें? हर एप्लिकेशन की ज़रूरतें अलग-अलग होती हैं, लेकिन इस बिंदु पर मॉडरेशन डेटा उपलब्ध है, जिससे आपको इसकी आवश्यकता है। भेजने के लिए विधि का उपयोग करती है। दोबारा, इसका कार्यान्वयन आप पर निर्भर है। आप संभावित रूप से इस कमांड को पूरी तरह से स्वचालित भी कर सकते हैं यदि Amazon रिकॉग्निशन परिणाम एक निश्चित श्रेणी से मेल खाता है या एक आत्मविश्वास स्तर से अधिक है। StopStreamCommand stopStream ivsClient export const stopStream = async (event) => { console.log('stopStream:', JSON.stringify(event, null, 2)); try { const stopStreamRequest = new StopStreamCommand({ channelArn }); const stopStreamResponse = await ivsClient.send(stopStreamRequest); responseObject.body = JSON.stringify(stopStreamResponse); } catch (err) { responseObject.statusCode = err?.name === 'ChannelNotBroadcasting' ? 404 : 500; responseObject.body = JSON.stringify(err); } return responseObject; }; डेमो मेरे डेमो में, मैंने कस्टम इवेंट्स को सुनने और परिणामों को एक मॉडरेटर दृश्य में प्रदर्शित करने का निर्णय लिया, जो पता लगाए गए आइटम और आत्मविश्वास के स्तर को दर्शाता है। मैं मॉडरेटर को 'स्टॉप स्ट्रीम' बटन के साथ भी प्रस्तुत करता हूं जो उजागर अमेज़ॅन एपीआई गेटवे के माध्यम से विधि को आमंत्रित करता है। stopStream सारांश इस पोस्ट में हमने सीखा कि मानव मध्यस्थों को उन अनुप्रयोगों में सामग्री को मॉडरेट करने में मदद करने के लिए Amazon रिकॉग्निशन का उपयोग कैसे करें जो वे Amazon IVS का उपयोग करके बनाते हैं। अगर आप इस बारे में अधिक जानना चाहते हैं कि कैसे Amazon IVS सुरक्षित UGC समुदायों को बनाने में मदद कर सकता है, तो निम्न ब्लॉग पोस्ट देखें: AWS लैम्ब्डा फ़ंक्शन के साथ Amazon IVS चैट संदेशों को मॉडरेट करना अमेज़ॅन आईवीएस चैट संदेशों को मैन्युअल रूप से मॉडरेट करना