@@ -45,7 +45,12 @@ function analyzeFaces (gcsUri) {
45
45
faces . forEach ( ( face , faceIdx ) => {
46
46
console . log ( '\tThumbnail size:' , face . thumbnail . length ) ;
47
47
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
+ }
49
54
} ) ;
50
55
} ) ;
51
56
} )
@@ -86,7 +91,12 @@ function analyzeLabelsGCS (gcsUri) {
86
91
console . log ( 'Label description:' , label . description ) ;
87
92
console . log ( 'Locations:' ) ;
88
93
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
+ }
90
100
} ) ;
91
101
} ) ;
92
102
} )
@@ -133,7 +143,12 @@ function analyzeLabelsLocal (path) {
133
143
console . log ( 'Label description:' , label . description ) ;
134
144
console . log ( 'Locations:' ) ;
135
145
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
+ }
137
152
} ) ;
138
153
} ) ;
139
154
} )
@@ -172,8 +187,12 @@ function analyzeShots (gcsUri) {
172
187
console . log ( 'Shot changes:' ) ;
173
188
shotChanges . forEach ( ( shot , shotIdx ) => {
174
189
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
+ }
177
196
} ) ;
178
197
} )
179
198
. catch ( ( err ) => {
@@ -198,6 +217,9 @@ function analyzeSafeSearch (gcsUri) {
198
217
features : [ 'SAFE_SEARCH_DETECTION' ]
199
218
} ;
200
219
220
+ // Human-readable likelihoods
221
+ const likelihoods = [ 'UNKNOWN' , 'VERY_UNLIKELY' , 'UNLIKELY' , 'POSSIBLE' , 'LIKELY' , 'VERY_LIKELY' ] ;
222
+
201
223
// Detects unsafe content
202
224
video . annotateVideo ( request )
203
225
. then ( ( results ) => {
@@ -210,12 +232,12 @@ function analyzeSafeSearch (gcsUri) {
210
232
const safeSearchResults = results [ 0 ] . annotationResults [ 0 ] . safeSearchAnnotations ;
211
233
console . log ( 'Safe search results:' ) ;
212
234
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 ] } ` ) ;
219
241
} ) ;
220
242
} )
221
243
. catch ( ( err ) => {
@@ -256,11 +278,11 @@ require(`yargs`) // eslint-disable-line
256
278
{ } ,
257
279
( opts ) => analyzeSafeSearch ( opts . gcsUri )
258
280
)
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` )
264
286
. wrap ( 120 )
265
287
. recommendCommands ( )
266
288
. epilogue ( `For more information, see https://cloud.google.com/video-intelligence/docs` )
0 commit comments