{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"# Kaggleのノートブック環境外でモデルをトレーニングし、トレーニングされたモデルを外部データソースとしてアップロードしてKaggleに送信する","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pylab as plt\nimport cv2\nplt.style.use('ggplot')\nfrom IPython.display import Video\nfrom IPython.display import HTML\nimport os","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ひとまず何があるか確認\nlistdir = \"../input/deepfake-detection-challenge/\"\nos.listdir(\"../input/deepfake-detection-challenge\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# train_sample_videos と test_videos には動画ファイルが入ってる\nos.listdir(\"../input/deepfake-detection-challenge/train_sample_videos\")[:5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pd.read_csv(listdir + \"sample_submission.csv\").head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# もちろんだがtestデータとtrainデータには同じ動画ファイルはないようだ\n\"\"\"\nfor sample_id in pd.read_csv(listdir + \"sample_submission.csv\")[\"filename\"].values:\n    if sample_id in os.listdir(\"../input/deepfake-detection-challenge/train_sample_videos\"):\n        print(sample_id)\n    else:\n        pass\n\"\"\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# trainデータの中身はこんな感じ\ntrain_sample_metadata = pd.read_json('../input/deepfake-detection-challenge/train_sample_videos/metadata.json').T\ntrain_sample_metadata.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"labelについて\")\ndisplay(train_sample_metadata[\"label\"].value_counts())\nprint(\"splitについて\")\ndisplay(train_sample_metadata[\"split\"].value_counts())\nprint(\"original\")\ndisplay(train_sample_metadata[\"original\"].value_counts())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# いったんどんなんか見てみる\nimport cv2 as cv\nimport os\nimport matplotlib.pylab as plt\ntrain_dir = '/kaggle/input/deepfake-detection-challenge/train_sample_videos/'\nfig, ax = plt.subplots(1,1, figsize=(15, 15))\ntrain_video_files = [train_dir + x for x in os.listdir(train_dir)]\nvideo_file = '/kaggle/input/deepfake-detection-challenge/train_sample_videos/akxoopqjqz.mp4'\ncap = cv.VideoCapture(video_file)\nsuccess, image = cap.read()\nimage = cv.cvtColor(image, cv.COLOR_BGR2RGB)\ncap.release()   \nax.imshow(image)\nax.xaxis.set_visible(False)\nax.yaxis.set_visible(False)\nax.title.set_text(f\"FRAME 0: {video_file.split('/')[-1]}\")\nplt.grid(False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 動画を再生してみる。とにかく違和感がすごい。\nfake_videos = list(train_sample_metadata.loc[train_sample_metadata.label=='FAKE'].index)\nfrom base64 import b64encode\n\ndef play_video(video_file, subset='train_sample_videos'):\n    video_url = open(os.path.join('../input/deepfake-detection-challenge', subset,video_file),'rb').read()\n    data_url = \"data:video/mp4;base64,\" + b64encode(video_url).decode()\n    return HTML(\"\"\"<video width=500 controls><source src=\"%s\" type=\"video/mp4\"></video>\"\"\" % data_url)\nplay_video(fake_videos[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#モデル作製の流れは\n#①顔だけに注目した画像を切り抜く。\n#②YOLOなどでモデル作製でいいのか？？？？","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}