mirror of https://github.com/opencv/opencv.git
Merge pull request #14627 from l-bat:demo_kinetics
* Support 3D ResNet-34-kinetics * Update sample * Remove preprocess * Change test * Fix samplepull/14686/head
parent
8ea2f59d33
commit
f94253b82b
3 changed files with 540 additions and 3 deletions
@ -0,0 +1,400 @@ |
||||
abseiling |
||||
air drumming |
||||
answering questions |
||||
applauding |
||||
applying cream |
||||
archery |
||||
arm wrestling |
||||
arranging flowers |
||||
assembling computer |
||||
auctioning |
||||
baby waking up |
||||
baking cookies |
||||
balloon blowing |
||||
bandaging |
||||
barbequing |
||||
bartending |
||||
beatboxing |
||||
bee keeping |
||||
belly dancing |
||||
bench pressing |
||||
bending back |
||||
bending metal |
||||
biking through snow |
||||
blasting sand |
||||
blowing glass |
||||
blowing leaves |
||||
blowing nose |
||||
blowing out candles |
||||
bobsledding |
||||
bookbinding |
||||
bouncing on trampoline |
||||
bowling |
||||
braiding hair |
||||
breading or breadcrumbing |
||||
breakdancing |
||||
brush painting |
||||
brushing hair |
||||
brushing teeth |
||||
building cabinet |
||||
building shed |
||||
bungee jumping |
||||
busking |
||||
canoeing or kayaking |
||||
capoeira |
||||
carrying baby |
||||
cartwheeling |
||||
carving pumpkin |
||||
catching fish |
||||
catching or throwing baseball |
||||
catching or throwing frisbee |
||||
catching or throwing softball |
||||
celebrating |
||||
changing oil |
||||
changing wheel |
||||
checking tires |
||||
cheerleading |
||||
chopping wood |
||||
clapping |
||||
clay pottery making |
||||
clean and jerk |
||||
cleaning floor |
||||
cleaning gutters |
||||
cleaning pool |
||||
cleaning shoes |
||||
cleaning toilet |
||||
cleaning windows |
||||
climbing a rope |
||||
climbing ladder |
||||
climbing tree |
||||
contact juggling |
||||
cooking chicken |
||||
cooking egg |
||||
cooking on campfire |
||||
cooking sausages |
||||
counting money |
||||
country line dancing |
||||
cracking neck |
||||
crawling baby |
||||
crossing river |
||||
crying |
||||
curling hair |
||||
cutting nails |
||||
cutting pineapple |
||||
cutting watermelon |
||||
dancing ballet |
||||
dancing charleston |
||||
dancing gangnam style |
||||
dancing macarena |
||||
deadlifting |
||||
decorating the christmas tree |
||||
digging |
||||
dining |
||||
disc golfing |
||||
diving cliff |
||||
dodgeball |
||||
doing aerobics |
||||
doing laundry |
||||
doing nails |
||||
drawing |
||||
dribbling basketball |
||||
drinking |
||||
drinking beer |
||||
drinking shots |
||||
driving car |
||||
driving tractor |
||||
drop kicking |
||||
drumming fingers |
||||
dunking basketball |
||||
dying hair |
||||
eating burger |
||||
eating cake |
||||
eating carrots |
||||
eating chips |
||||
eating doughnuts |
||||
eating hotdog |
||||
eating ice cream |
||||
eating spaghetti |
||||
eating watermelon |
||||
egg hunting |
||||
exercising arm |
||||
exercising with an exercise ball |
||||
extinguishing fire |
||||
faceplanting |
||||
feeding birds |
||||
feeding fish |
||||
feeding goats |
||||
filling eyebrows |
||||
finger snapping |
||||
fixing hair |
||||
flipping pancake |
||||
flying kite |
||||
folding clothes |
||||
folding napkins |
||||
folding paper |
||||
front raises |
||||
frying vegetables |
||||
garbage collecting |
||||
gargling |
||||
getting a haircut |
||||
getting a tattoo |
||||
giving or receiving award |
||||
golf chipping |
||||
golf driving |
||||
golf putting |
||||
grinding meat |
||||
grooming dog |
||||
grooming horse |
||||
gymnastics tumbling |
||||
hammer throw |
||||
headbanging |
||||
headbutting |
||||
high jump |
||||
high kick |
||||
hitting baseball |
||||
hockey stop |
||||
holding snake |
||||
hopscotch |
||||
hoverboarding |
||||
hugging |
||||
hula hooping |
||||
hurdling |
||||
hurling (sport) |
||||
ice climbing |
||||
ice fishing |
||||
ice skating |
||||
ironing |
||||
javelin throw |
||||
jetskiing |
||||
jogging |
||||
juggling balls |
||||
juggling fire |
||||
juggling soccer ball |
||||
jumping into pool |
||||
jumpstyle dancing |
||||
kicking field goal |
||||
kicking soccer ball |
||||
kissing |
||||
kitesurfing |
||||
knitting |
||||
krumping |
||||
laughing |
||||
laying bricks |
||||
long jump |
||||
lunge |
||||
making a cake |
||||
making a sandwich |
||||
making bed |
||||
making jewelry |
||||
making pizza |
||||
making snowman |
||||
making sushi |
||||
making tea |
||||
marching |
||||
massaging back |
||||
massaging feet |
||||
massaging legs |
||||
massaging person's head |
||||
milking cow |
||||
mopping floor |
||||
motorcycling |
||||
moving furniture |
||||
mowing lawn |
||||
news anchoring |
||||
opening bottle |
||||
opening present |
||||
paragliding |
||||
parasailing |
||||
parkour |
||||
passing American football (in game) |
||||
passing American football (not in game) |
||||
peeling apples |
||||
peeling potatoes |
||||
petting animal (not cat) |
||||
petting cat |
||||
picking fruit |
||||
planting trees |
||||
plastering |
||||
playing accordion |
||||
playing badminton |
||||
playing bagpipes |
||||
playing basketball |
||||
playing bass guitar |
||||
playing cards |
||||
playing cello |
||||
playing chess |
||||
playing clarinet |
||||
playing controller |
||||
playing cricket |
||||
playing cymbals |
||||
playing didgeridoo |
||||
playing drums |
||||
playing flute |
||||
playing guitar |
||||
playing harmonica |
||||
playing harp |
||||
playing ice hockey |
||||
playing keyboard |
||||
playing kickball |
||||
playing monopoly |
||||
playing organ |
||||
playing paintball |
||||
playing piano |
||||
playing poker |
||||
playing recorder |
||||
playing saxophone |
||||
playing squash or racquetball |
||||
playing tennis |
||||
playing trombone |
||||
playing trumpet |
||||
playing ukulele |
||||
playing violin |
||||
playing volleyball |
||||
playing xylophone |
||||
pole vault |
||||
presenting weather forecast |
||||
pull ups |
||||
pumping fist |
||||
pumping gas |
||||
punching bag |
||||
punching person (boxing) |
||||
push up |
||||
pushing car |
||||
pushing cart |
||||
pushing wheelchair |
||||
reading book |
||||
reading newspaper |
||||
recording music |
||||
riding a bike |
||||
riding camel |
||||
riding elephant |
||||
riding mechanical bull |
||||
riding mountain bike |
||||
riding mule |
||||
riding or walking with horse |
||||
riding scooter |
||||
riding unicycle |
||||
ripping paper |
||||
robot dancing |
||||
rock climbing |
||||
rock scissors paper |
||||
roller skating |
||||
running on treadmill |
||||
sailing |
||||
salsa dancing |
||||
sanding floor |
||||
scrambling eggs |
||||
scuba diving |
||||
setting table |
||||
shaking hands |
||||
shaking head |
||||
sharpening knives |
||||
sharpening pencil |
||||
shaving head |
||||
shaving legs |
||||
shearing sheep |
||||
shining shoes |
||||
shooting basketball |
||||
shooting goal (soccer) |
||||
shot put |
||||
shoveling snow |
||||
shredding paper |
||||
shuffling cards |
||||
side kick |
||||
sign language interpreting |
||||
singing |
||||
situp |
||||
skateboarding |
||||
ski jumping |
||||
skiing (not slalom or crosscountry) |
||||
skiing crosscountry |
||||
skiing slalom |
||||
skipping rope |
||||
skydiving |
||||
slacklining |
||||
slapping |
||||
sled dog racing |
||||
smoking |
||||
smoking hookah |
||||
snatch weight lifting |
||||
sneezing |
||||
sniffing |
||||
snorkeling |
||||
snowboarding |
||||
snowkiting |
||||
snowmobiling |
||||
somersaulting |
||||
spinning poi |
||||
spray painting |
||||
spraying |
||||
springboard diving |
||||
squat |
||||
sticking tongue out |
||||
stomping grapes |
||||
stretching arm |
||||
stretching leg |
||||
strumming guitar |
||||
surfing crowd |
||||
surfing water |
||||
sweeping floor |
||||
swimming backstroke |
||||
swimming breast stroke |
||||
swimming butterfly stroke |
||||
swing dancing |
||||
swinging legs |
||||
swinging on something |
||||
sword fighting |
||||
tai chi |
||||
taking a shower |
||||
tango dancing |
||||
tap dancing |
||||
tapping guitar |
||||
tapping pen |
||||
tasting beer |
||||
tasting food |
||||
testifying |
||||
texting |
||||
throwing axe |
||||
throwing ball |
||||
throwing discus |
||||
tickling |
||||
tobogganing |
||||
tossing coin |
||||
tossing salad |
||||
training dog |
||||
trapezing |
||||
trimming or shaving beard |
||||
trimming trees |
||||
triple jump |
||||
tying bow tie |
||||
tying knot (not on a tie) |
||||
tying tie |
||||
unboxing |
||||
unloading truck |
||||
using computer |
||||
using remote controller (not gaming) |
||||
using segway |
||||
vault |
||||
waiting in line |
||||
walking the dog |
||||
washing dishes |
||||
washing feet |
||||
washing hair |
||||
washing hands |
||||
water skiing |
||||
water sliding |
||||
watering plants |
||||
waxing back |
||||
waxing chest |
||||
waxing eyebrows |
||||
waxing legs |
||||
weaving basket |
||||
welding |
||||
whistling |
||||
windsurfing |
||||
wrapping present |
||||
wrestling |
||||
writing |
||||
yawning |
||||
yoga |
||||
zumba |
@ -0,0 +1,82 @@ |
||||
import os |
||||
import numpy as np |
||||
import cv2 as cv |
||||
import argparse |
||||
from common import findFile |
||||
|
||||
parser = argparse.ArgumentParser(description='Use this script to run action recognition using 3D ResNet34', |
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
||||
parser.add_argument('--input', '-i', help='Path to input video file. Skip this argument to capture frames from a camera.') |
||||
parser.add_argument('--model', required=True, help='Path to model.') |
||||
parser.add_argument('--classes', default=findFile('action_recongnition_kinetics.txt'), help='Path to classes list.') |
||||
|
||||
# To get net download original repository https://github.com/kenshohara/video-classification-3d-cnn-pytorch |
||||
# For correct ONNX export modify file: video-classification-3d-cnn-pytorch/models/resnet.py |
||||
# change |
||||
# - def downsample_basic_block(x, planes, stride): |
||||
# - out = F.avg_pool3d(x, kernel_size=1, stride=stride) |
||||
# - zero_pads = torch.Tensor(out.size(0), planes - out.size(1), |
||||
# - out.size(2), out.size(3), |
||||
# - out.size(4)).zero_() |
||||
# - if isinstance(out.data, torch.cuda.FloatTensor): |
||||
# - zero_pads = zero_pads.cuda() |
||||
# - |
||||
# - out = Variable(torch.cat([out.data, zero_pads], dim=1)) |
||||
# - return out |
||||
|
||||
# To |
||||
# + def downsample_basic_block(x, planes, stride): |
||||
# + out = F.avg_pool3d(x, kernel_size=1, stride=stride) |
||||
# + out = F.pad(out, (0, 0, 0, 0, 0, 0, 0, int(planes - out.size(1)), 0, 0), "constant", 0) |
||||
# + return out |
||||
|
||||
# To ONNX export use torch.onnx.export(model, inputs, model_name) |
||||
|
||||
def get_class_names(path): |
||||
class_names = [] |
||||
with open(path) as f: |
||||
for row in f: |
||||
class_names.append(row[:-1]) |
||||
return class_names |
||||
|
||||
def classify_video(video_path, net_path): |
||||
SAMPLE_DURATION = 16 |
||||
SAMPLE_SIZE = 112 |
||||
mean = (114.7748, 107.7354, 99.4750) |
||||
class_names = get_class_names(args.classes) |
||||
|
||||
net = cv.dnn.readNet(net_path) |
||||
net.setPreferableBackend(cv.dnn.DNN_BACKEND_INFERENCE_ENGINE) |
||||
net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU) |
||||
|
||||
winName = 'Deep learning image classification in OpenCV' |
||||
cv.namedWindow(winName, cv.WINDOW_AUTOSIZE) |
||||
cap = cv.VideoCapture(video_path) |
||||
while cv.waitKey(1) < 0: |
||||
frames = [] |
||||
for _ in range(SAMPLE_DURATION): |
||||
hasFrame, frame = cap.read() |
||||
if not hasFrame: |
||||
exit(0) |
||||
frames.append(frame) |
||||
|
||||
inputs = cv.dnn.blobFromImages(frames, 1, (SAMPLE_SIZE, SAMPLE_SIZE), mean, True, crop=True) |
||||
inputs = np.transpose(inputs, (1, 0, 2, 3)) |
||||
inputs = np.expand_dims(inputs, axis=0) |
||||
net.setInput(inputs) |
||||
outputs = net.forward() |
||||
class_pred = np.argmax(outputs) |
||||
label = class_names[class_pred] |
||||
|
||||
for frame in frames: |
||||
labelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1) |
||||
cv.rectangle(frame, (0, 10 - labelSize[1]), |
||||
(labelSize[0], 10 + baseLine), (255, 255, 255), cv.FILLED) |
||||
cv.putText(frame, label, (0, 10), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0)) |
||||
cv.imshow(winName, frame) |
||||
if cv.waitKey(1) & 0xFF == ord('q'): |
||||
break |
||||
|
||||
if __name__ == "__main__": |
||||
args, _ = parser.parse_known_args() |
||||
classify_video(args.input if args.input else 0, args.model) |
Loading…
Reference in new issue