@@ -45,7 +45,12 @@ function analyzeFaces (gcsUri) {
4545 faces . forEach ( ( face , faceIdx ) => {
4646 console . log ( '\tThumbnail size:' , face . thumbnail . length ) ;
4747 face . segments . forEach ( ( segment , segmentIdx ) => {
48- console . log ( `\tTrack ${ segmentIdx } of face ${ faceIdx } : frames ${ segment . startTimeOffset } to ${ segment . endTimeOffset } ` ) ;
48+ if ( segment . startTimeOffset === - 1 && segment . endTimeOffset === - 1 ) {
49+ console . log ( `\tEntire video` ) ;
50+ } else {
51+ console . log ( `\tStart: ${ segment . startTimeOffset / 1e6 } s` ) ;
52+ console . log ( `\tEnd: ${ segment . endTimeOffset / 1e6 } s` ) ;
53+ }
4954 } ) ;
5055 } ) ;
5156 } )
@@ -86,7 +91,12 @@ function analyzeLabelsGCS (gcsUri) {
8691 console . log ( 'Label description:' , label . description ) ;
8792 console . log ( 'Locations:' ) ;
8893 label . locations . forEach ( ( location ) => {
89- console . log ( `\tFrames ${ location . segment . startTimeOffset } to ${ location . segment . endTimeOffset } ` ) ;
94+ if ( location . segment . startTimeOffset === - 1 && location . segment . endTimeOffset === - 1 ) {
95+ console . log ( `\tEntire video` ) ;
96+ } else {
97+ console . log ( `\tStart: ${ location . segment . startTimeOffset / 1e6 } s` ) ;
98+ console . log ( `\tEnd: ${ location . segment . endTimeOffset / 1e6 } s` ) ;
99+ }
90100 } ) ;
91101 } ) ;
92102 } )
@@ -133,7 +143,12 @@ function analyzeLabelsLocal (path) {
133143 console . log ( 'Label description:' , label . description ) ;
134144 console . log ( 'Locations:' ) ;
135145 label . locations . forEach ( ( location ) => {
136- console . log ( `\tFrames ${ location . segment . startTimeOffset } to ${ location . segment . endTimeOffset } ` ) ;
146+ if ( location . segment . startTimeOffset === - 1 && location . segment . endTimeOffset === - 1 ) {
147+ console . log ( `\tEntire video` ) ;
148+ } else {
149+ console . log ( `\tStart: ${ location . segment . startTimeOffset / 1e6 } s` ) ;
150+ console . log ( `\tEnd: ${ location . segment . endTimeOffset / 1e6 } s` ) ;
151+ }
137152 } ) ;
138153 } ) ;
139154 } )
@@ -172,8 +187,12 @@ function analyzeShots (gcsUri) {
172187 console . log ( 'Shot changes:' ) ;
173188 shotChanges . forEach ( ( shot , shotIdx ) => {
174189 console . log ( `Scene ${ shotIdx } :` ) ;
175- console . log ( `\tStart: ${ shot . startTimeOffset } ` ) ;
176- console . log ( `\tEnd: ${ shot . endTimeOffset } ` ) ;
190+ if ( shot . startTimeOffset === - 1 && shot . endTimeOffset === - 1 ) {
191+ console . log ( `\tEntire video` ) ;
192+ } else {
193+ console . log ( `\tStart: ${ shot . startTimeOffset } ` ) ;
194+ console . log ( `\tEnd: ${ shot . endTimeOffset } ` ) ;
195+ }
177196 } ) ;
178197 } )
179198 . catch ( ( err ) => {
@@ -198,6 +217,9 @@ function analyzeSafeSearch (gcsUri) {
198217 features : [ 'SAFE_SEARCH_DETECTION' ]
199218 } ;
200219
220+ // Human-readable likelihoods
221+ const likelihoods = [ 'UNKNOWN' , 'VERY_UNLIKELY' , 'UNLIKELY' , 'POSSIBLE' , 'LIKELY' , 'VERY_LIKELY' ] ;
222+
201223 // Detects unsafe content
202224 video . annotateVideo ( request )
203225 . then ( ( results ) => {
@@ -210,12 +232,12 @@ function analyzeSafeSearch (gcsUri) {
210232 const safeSearchResults = results [ 0 ] . annotationResults [ 0 ] . safeSearchAnnotations ;
211233 console . log ( 'Safe search results:' ) ;
212234 safeSearchResults . forEach ( ( result ) => {
213- console . log ( `Frame ${ result . timeOffset } : ` ) ;
214- console . log ( `\tAdult: ${ result . adult } ` ) ;
215- console . log ( `\tSpoof: ${ result . spoof } ` ) ;
216- console . log ( `\tMedical: ${ result . medical } ` ) ;
217- console . log ( `\tViolent: ${ result . violent } ` ) ;
218- console . log ( `\tRacy: ${ result . racy } ` ) ;
235+ console . log ( `Time: ${ result . timeOffset / 1e6 } s ` ) ;
236+ console . log ( `\tAdult: ${ likelihoods [ result . adult ] } ` ) ;
237+ console . log ( `\tSpoof: ${ likelihoods [ result . spoof ] } ` ) ;
238+ console . log ( `\tMedical: ${ likelihoods [ result . medical ] } ` ) ;
239+ console . log ( `\tViolent: ${ likelihoods [ result . violent ] } ` ) ;
240+ console . log ( `\tRacy: ${ likelihoods [ result . racy ] } ` ) ;
219241 } ) ;
220242 } )
221243 . catch ( ( err ) => {
@@ -256,11 +278,11 @@ require(`yargs`) // eslint-disable-line
256278 { } ,
257279 ( opts ) => analyzeSafeSearch ( opts . gcsUri )
258280 )
259- . example ( `node $0 faces gs://my-bucket/my-video .mp4` )
260- . example ( `node $0 shots gs://my-bucket/my-video .mp4` )
261- . example ( `node $0 labels-gcs gs://my-bucket/my-video .mp4` )
262- . example ( `node $0 labels-file my-video .mp4` )
263- . example ( `node $0 safe-search gs://my-bucket/my-video .mp4` )
281+ . example ( `node $0 faces gs://demomaker/volleyball_court .mp4` )
282+ . example ( `node $0 shots gs://demomaker/volleyball_court .mp4` )
283+ . example ( `node $0 labels-gcs gs://demomaker/volleyball_court .mp4` )
284+ . example ( `node $0 labels-file cat .mp4` )
285+ . example ( `node $0 safe-search gs://demomaker/volleyball_court .mp4` )
264286 . wrap ( 120 )
265287 . recommendCommands ( )
266288 . epilogue ( `For more information, see https://cloud.google.com/video-intelligence/docs` )
0 commit comments