Spaces:
Build error
Build error
Download app.py from TheHouseOfAI/ActionRecognition: direct link, hf CLI and curl.
- Browser
- Download file 9.81 kB
-
https://huggingface.co/spaces/TheHouseOfAI/ActionRecognition/resolve/main/app.py
- Command line
-
hf download hf://spaces/TheHouseOfAI/ActionRecognition/app.py
-
curl -L -o app.py https://huggingface.co/spaces/TheHouseOfAI/ActionRecognition/resolve/main/app.py
9.81 kB
| # Bibliotheken | |
| import tensorflow as tf | |
| import tensorflow_hub as hub | |
| import cv2 | |
| import numpy as np | |
| from urllib import request | |
| i3d = hub.load("https://tfhub.dev/deepmind/i3d-kinetics-400/1").signatures['default'] | |
| # Officële Engelstalige labels | |
| KINETICS_URL = "https://raw.githubusercontent.com/deepmind/kinetics-i3d/master/data/label_map.txt" | |
| with request.urlopen(KINETICS_URL) as obj: | |
| labels = [line.decode("utf-8").strip() for line in obj.readlines()] | |
| # Zelf gedefiniëerde Nederlandstalige labels | |
| #labels_nl = ['abseilen', 'luchtdrummen', 'vragen beantwoorden', 'applaudisseren', 'crème aanbrengen', 'boogschieten', 'armworstelen', 'bloemen schikken', 'computer in elkaar zetten', 'veilen', 'baby wakker worden ', 'koekjes bakken', 'ballon blazen', 'verbanden', 'barbequen', 'bartending', 'beatboxing', 'bijen houden', 'buikdansen', 'bankdrukken', 'achterover buigen', 'buigen metaal', 'fietsen door de sneeuw', 'zandstralen', 'glas blazen', 'bladeren blazen', 'neus blazen', 'kaarsen uitblazen', 'bobsleeën', 'boekbinden', 'springen op trampoline', ' bowlen', 'haar vlechten', 'paneren of paneermeel', 'breakdancing', 'borstel schilderen', 'haar borstelen', 'tanden poetsen', 'kast bouwen', 'schuur bouwen', 'bungeejumpen', 'busking ', 'kanoën of kajakken', 'capoeira', 'baby dragen', 'cartwheeling', 'pompoen snijden', 'vissen vangen', 'honkbal vangen of gooien', 'frisbee vangen of gooien', 'softbal vangen of gooien ', 'vieren', 'olie verversen', 'wiel verwisselen', 'banden controleren', 'chee rleiden', 'houthakken', 'klappen', 'aardewerk maken', 'schoon en eikel', 'vloer schoonmaken', 'goten schoonmaken', 'zwembad schoonmaken', 'schoenen schoonmaken', 'toilet schoonmaken', ' ramen lappen', 'touwklimmen', 'ladder beklimmen', 'boomklimmen', 'contactjongleren', 'kip koken', 'ei koken', 'koken op kampvuur', 'worstjes koken', 'geld tellen' , 'country line dancing', 'cracking neck', 'crawling baby', 'crossing river', 'huilen', 'krullend haar', 'nagels knippen', 'ananas snijden', 'watermeloen snijden', 'dansballet' , 'dansende charleston', 'dansende gangnamstijl', 'dansende macarena', 'deadlifting', 'de kerstboom versieren', 'graven', 'dineren', 'disc golfen', 'klifduiken', 'trefbal', 'aerobics doen', 'de was doen', 'nagels doen', 'tekenen', 'basketbal dribbelen', 'drinken', 'bier drinken', 'shotjes drinken', 'autorijden', 'tractor rijden', 'droppen schoppen', 'vingers trommelen', 'basketbal dunken', 'haar verven', 'hamburger eten', 'taart eten', 'eten g wortelen', 'chips eten', 'donuts eten', 'hotdog eten', 'ijs eten', 'spaghetti eten', 'watermeloen eten', 'eieren zoeken', 'arm trainen', 'trainen met een oefening bal', 'vuur blussen', 'faceplanting', 'vogels voeren', 'vissen voeren', 'geiten voeren', 'wenkbrauwen vullen', 'vingerknippen', 'haar fixeren', 'pannenkoek omdraaien', 'vliegende vlieger ', 'kleding opvouwen', 'servetten opvouwen', 'papier opvouwen', 'front raises', 'groenten frituren', 'vuilnis verzamelen', 'gorgelen', 'haar knippen', 'een tatoeage laten zetten', 'geven of een onderscheiding ontvangen', 'golf chippen', 'golf rijden', 'golf putten', 'vlees malen', 'hond verzorgen', 'paard verzorgen', 'gymnastiek tuimelen', 'hamerwerpen', 'headbangen', ' kopstoten', 'hoogspringen', 'hoge trap', 'honkbal slaan', 'hockeystop', 'slang vasthouden', 'hinkelen', 'hoverboarden', 'knuffelen', 'hoelahoep', 'hurdling', ' slingeren (sport)', 'ijsklimmen', 'ijsvissen', 'schaatsen', 'strijken', 'speerwerpen', 'jetskiën', 'joggen', 'jongleren met ballen', 'jongleren met vuur', 'jongleren met voetbal', 'springen in het zwembad', 'jumpstyle dansen', 'schoppen met velddoelpunt', 'schoppen met voetbal', 'kussen', 'kitesurfen', 'breien' , 'krumping', 'lachen', 'stenen leggen', 'verspringen', 'lunge', 'cake maken', 'sandwich maken', 'bed opmaken', 'sieraden maken', 'pizza maken', 'sneeuwpop maken', 'sushi maken', 'thee zetten', 'marcheren', 'rug masseren', 'voeten masseren', 'benen masseren', 'hoofd masseren', 'koe melken', 'vloer dweilen', 'motorrijden', 'meubels verplaatsen', 'gazon maaien', 'nieuwsverankering', 'fles openen', 'openingscadeau', 'paragliding', 'parasailing', 'parkour', 'American football passeren (in game)' , 'American football passeren (niet in het spel)', 'appels schillen', 'aardappelen schillen', 'aaidier (geen kat)', 'kat aaien', 'fruit plukken', 'bomen planten', 'pleisteren', 'accordeon spelen', 'badminton spelen', 'doedelzak spelen', 'basketbal spelen', 'basgitaar spelen', 'kaarten spelen', 'c spelen ello', 'schaken', 'klarinet spelen', 'controller spelen', 'cricket spelen', 'bekkens spelen', 'didgeridoo spelen', 'drums spelen', 'fluit spelen', 'gitaar spelen', 'spelen mondharmonica', 'harp spelen', 'ijshockey spelen', 'keyboard spelen', 'kickball spelen', 'monopolie spelen', 'orgel spelen', 'paintball spelen', 'piano spelen', 'poker spelen', ' blokfluit spelen', 'saxofoon spelen', 'squash of racquetball spelen', 'tennis spelen', 'trombone spelen', 'trompet spelen', 'ukelele spelen', 'viool spelen', 'volleyballen', 'xylofoon spelen' , 'polsstokhoogspringen', 'weersvoorspelling presenteren', 'pull ups', 'vuist pompen', 'gas pompen', 'bokszak', 'bokser (boksen)', 'push up', 'auto duwen', 'kar duwen', 'rolstoel duwen', 'boek lezen', 'krant lezen', 'muziek opnemen', 'fietsen', 'kameel rijden', 'olifant rijden', 'mechanische stier rijden', 'berg rijden fiets', 'muilezelrijden', 'rijden of lopen met paard', 'rijdende scooter', 'rijden op eenwieler', 'papier scheuren', 'robotdansen', 'rotsklimmen', 'rotsschaarpapier', 'rolschaatsen', 'rennen op loopband', 'zeilen', 'salsadansen', 'schuurvloer ', 'eieren klauteren', 'duiken', 'tafel dekken', 'handen schudden', 'hoofd schudden', 'messen slijpen', 'potlood slijpen', 'hoofd scheren', 'benen scheren', 'schaap scheren ', 'schoenen glimmen', 'basketbal schieten', 'doel (voetbal) schieten', 'kogelstoten', 'sneeuwschuiven', 'papier versnipperen', 'kaarten schudden', 'side kick', 'tolken in gebarentaal' , 'zingen', 'situp', 'skateboarden', 'schansspringen', 'skiën (geen slalom of langlaufen)', 'langlaufen', 'slalom skiën', 'touwtjespringen', 'parachutespringen', 'slacklinen' , 'slaan', 'sledehondenraces', 'roken', 'roken waterpijp', 'snatch gewichtheffen', 'niezen', 'snuiven', 'snorkelen', 'snowboarden', 'snowkiten', 'sneeuwmobiel', 'salto', 'spinning poi', 'spuiten', 'spuiten', 'springplankduiken', 'squat', 'tong uitsteken', 's stampende druiven', 'arm strekken', 'been strekken', 'gitaar tokkelen', 'surfende menigte', 'surfend water', 'veegvloer', 'rugslag zwemmen', 'schoolslag zwemmen', 'zwemmen vlinderslag' , 'swing dancing', 'swinging legs', 'swinging on something', 'zwaardvechten', 'tai chi', 'een douche nemen', 'tangodansen', 'tapdansen', 'tikken op gitaar', 'tikken pen', 'bier proeven', 'eten proeven', 'getuigen', 'sms-en', 'bijl gooien', 'bal gooien', 'discuswerpen', 'kietelen', 'rodelen', 'munt gooien', ' sla gooien', 'hond trainen', 'trapezing', 'baard trimmen of scheren', 'bomen trimmen', 'hinkstapspringen', 'vlinderdas binden', 'knoop binden (niet op een stropdas)', 'das binden ', 'uitpakken', 'vrachtwagen lossen', 'computer gebruiken', 'afstandsbediening gebruiken (geen gamen)', 'segway gebruiken', 'kluis', 'in de rij wachten', 'de hond uitlaten', 'afwassen ', 'voeten wassen', 'haar wassen', 'handen wassen', 'waterskiën', 'waterglijden', 'planten water geven', 'terug waxen', 'borst harsen', 'waxen wenkbrauwen trekken', 'benen harsen', 'mand weven', 'lassen', 'fluiten', 'windsurfen', 'cadeau inpakken', 'worstelen', 'schrijven', 'geeuwen', 'yoga', 'zumba' ] | |
| def crop_center_square(frame): | |
| y, x = frame.shape[0:2] | |
| min_dim = min(y, x) | |
| start_x = (x // 2) - (min_dim // 2) | |
| start_y = (y // 2) - (min_dim // 2) | |
| return frame[start_y:start_y+min_dim,start_x:start_x+min_dim] | |
| def load_video(path, max_frames=0, resize=(224, 224)): | |
| cap = cv2.VideoCapture(path) | |
| frames = [] | |
| try: | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| frame = crop_center_square(frame) | |
| frame = cv2.resize(frame, resize) | |
| frame = frame[:, :, [2, 1, 0]] | |
| frames.append(frame) | |
| if len(frames) == max_frames: | |
| break | |
| finally: | |
| cap.release() | |
| return np.array(frames) / 255.0 | |
| def predict(sample_video): | |
| # Add a batch axis to the sample video. | |
| model_input = tf.constant(sample_video, dtype=tf.float32)[tf.newaxis, ...] | |
| logits = i3d(model_input)['default'][0] | |
| probabilities = tf.nn.softmax(logits) | |
| voorspelling = "" | |
| print("Top 3 voorspellingen:") | |
| for i in np.argsort(probabilities)[::-1][:3]: | |
| voorspelling = voorspelling + "\n" + f"{labels[i]:22}: {probabilities[i] * 100:5.2f}%" | |
| return voorspelling | |
| def voorspelling(video_path): | |
| sample_video = load_video(video_path) | |
| return predict(sample_video) | |
| import gradio as gr | |
| video_in = gr.Video(label="Video IN - Bestand in MP4 formaat en maximum 50 MB") | |
| classificatie_out = gr.Text(label="Classificatie - voorspelling :") | |
| demo = gr.Interface(fn=voorspelling, | |
| inputs=video_in, | |
| outputs=classificatie_out, | |
| examples=["golf.mp4", "push_up.mp4", "sit_ups.mp4", "gewichtheffen.mp4", "tennis_opslag_01.mp4"], | |
| title="Videoclassificatie op basis van actieherkenning", | |
| description="Videoclassificatie is de taak om een omschrijving (classificatie) te geven in relatie tot de inhoud van een video. Een goede classificatie is er een die de hele video het best beschrijft. Een video kan bijvoorbeeld een bloem in een frame bevatten, maar de omschrijving die centraal staat in de video kan iets anders zijn (bijvoorbeeld 'wandelen'). Selecteer één van de voorbeelden of laad zelf een video op ...", | |
| article = "Inflated 3D Convnet model trained for action recognition on Kinetics-400 : https://github.com/deepmind/kinetics-i3d") | |
| demo.launch() |