{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 32 sessions\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import csv\n", "from py.Dataset import Dataset\n", "from py.Session import Session, MotionImage, LapseImage\n", "from datetime import datetime\n", "\n", "DIR = '/home/AMMOD_data/camera_traps/BayerWald/Vielkadaver-Projekt/'\n", "\n", "ds = Dataset(DIR)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def parse_datetime(datetime_str: str) -> datetime:\n", " return datetime.strptime(datetime_str[:-5], \"%Y-%m-%dT%H:%M:%S\")\n", "\n", "assert parse_datetime(\"2021-05-28T09:55:24+0100\") == datetime(2021, 5, 28, 9, 55, 24)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Header: ['observationID', 'deploymentID', 'sequenceID', 'mediaID', 'timestamp', 'observationType', 'cameraSetup', 'taxonID', 'scientificName', 'count', 'countNew', 'lifeStage', 'sex', 'behaviour', 'individualID', 'classificationMethod', 'classifiedBy', 'classificationTimestamp', 'classificationConfidence', 'comments', '_id']\n", "Trying to create session VIELAAS_Spring_Session03-VIELAAS_Beaver_03...\n", "There are no sessions matching this name: []\n", "Trying to create session VIELAAS_Spring_Session03-VIELAAS_Ermine_03...\n", "There are no sessions matching this name: []\n", "Trying to create session VIELAAS_Spring_Session03-VIELAAS_Fox_03...\n", "Session 'Fox_03' at folder: /home/AMMOD_data/camera_traps/BayerWald/Vielkadaver-Projekt/VIELAAS_Spring_Session03-VIELAAS_Fox_03\n", "Loaded scans.\n", "Generating motion map...\n", "Trying to create session VIELAAS_Spring_Session03-VIELAAS_Rat_03...\n", "There are no sessions matching this name: []\n", "Successfully found 3695 images\n", "Skipped 138 images because session was not found\n", "For 0 session dates less images were found than specified (inconsistency)\n", "For 6 session dates more images were found than specified (ambiguous)\n" ] } ], "source": [ "with open(\"Kadaverbilder_leer.csv\", newline=\"\") as csvfile:\n", " reader = csv.reader(csvfile, delimiter=\";\")\n", " header = next(reader)\n", " print(\"Header: \", header)\n", " session_col = header.index(\"deploymentID\")\n", " datetime_col = header.index(\"timestamp\")\n", " session_name: str = None\n", " session: Session = None\n", " successful = 0\n", " skipped = 0\n", " less_found = 0\n", " ambiguous = 0\n", " results = []\n", " last_date = None\n", " last_date_occurences = 0\n", " for row in reader:\n", " # print(row)\n", " # open session if not already opened\n", " if session_name != row[session_col]:\n", " session_name = row[session_col]\n", " print(f\"Trying to create session {session_name}...\")\n", " try:\n", " session = ds.create_session(session_name)\n", " except ValueError as e:\n", " print(e)\n", " session = None\n", " if session is None:\n", " skipped += 1\n", " else:\n", " # get datetime\n", " date = parse_datetime(row[datetime_col])\n", " if date == last_date:\n", " last_date_occurences += 1\n", " else:\n", " # look for images\n", " images = session.get_motion_images_from_date(last_date)\n", "\n", " if len(images) < last_date_occurences:\n", " less_found += last_date_occurences\n", " elif len(images) > last_date_occurences:\n", " ambiguous += last_date_occurences\n", " else:\n", " for image in images:\n", " results.append([session.name, image.filename])\n", " successful += last_date_occurences\n", "\n", " last_date = date\n", " last_date_occurences = 1\n", "print(f\"Successfully found {successful} images\")\n", "print(f\"Skipped {skipped} images because session was not found\")\n", "print(f\"For {less_found} session dates less images were found than specified (inconsistency)\")\n", "print(f\"For {ambiguous} session dates more images were found than specified (ambiguous)\")\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "np.save(\"csv_test_images.npy\", results)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0,\n", " 1,\n", " 2,\n", " 3,\n", " 4,\n", " 5,\n", " 431,\n", " 432,\n", " 433,\n", " 434,\n", " 435,\n", " 436,\n", " 437,\n", " 438,\n", " 439,\n", " 440,\n", " 441,\n", " 442,\n", " 443,\n", " 444,\n", " 445,\n", " 446,\n", " 447,\n", " 448,\n", " 449,\n", " 450,\n", " 451,\n", " 452,\n", " 453,\n", " 454,\n", " 455,\n", " 456,\n", " 457,\n", " 458,\n", " 459,\n", " 460,\n", " 461,\n", " 462,\n", " 463,\n", " 464,\n", " 465,\n", " 466,\n", " 467,\n", " 468,\n", " 469,\n", " 470,\n", " 471,\n", " 472,\n", " 473,\n", " 474,\n", " 475,\n", " 476,\n", " 477,\n", " 478,\n", " 479,\n", " 480,\n", " 2176,\n", " 2177,\n", " 2178,\n", " 2179,\n", " 2180,\n", " 2181,\n", " 2182,\n", " 2183,\n", " 2184,\n", " 2185,\n", " 2186,\n", " 2187,\n", " 2188,\n", " 2189,\n", " 2190,\n", " 2286,\n", " 2287,\n", " 2288,\n", " 2289,\n", " 2290,\n", " 2291,\n", " 2292,\n", " 2293,\n", " 2294,\n", " 2295,\n", " 2326,\n", " 2327,\n", " 2328,\n", " 2329,\n", " 2330,\n", " 2331,\n", " 2332,\n", " 2333,\n", " 2334,\n", " 2335,\n", " 2336,\n", " 2337,\n", " 2338,\n", " 2339,\n", " 2340,\n", " 2341,\n", " 2342,\n", " 2343,\n", " 2344,\n", " 2345,\n", " 2346,\n", " 2347,\n", " 2348,\n", " 2349,\n", " 2350,\n", " 2351,\n", " 2352,\n", " 2353,\n", " 2354,\n", " 2355,\n", " 2356,\n", " 2357,\n", " 2358,\n", " 2359,\n", " 2360,\n", " 2361,\n", " 2362,\n", " 2363,\n", " 2364,\n", " 2365,\n", " 2366,\n", " 2367,\n", " 2368,\n", " 2369,\n", " 2370,\n", " 2371,\n", " 2372,\n", " 2373,\n", " 2374,\n", " 2375,\n", " 2376,\n", " 2377,\n", " 2378,\n", " 2379,\n", " 2380,\n", " 2381,\n", " 2382,\n", " 2383,\n", " 2384,\n", " 2385,\n", " 2386,\n", " 2387,\n", " 2388,\n", " 2389,\n", " 2390,\n", " 2391,\n", " 2392,\n", " 2393,\n", " 2394,\n", " 2395,\n", " 2396,\n", " 2397,\n", " 2398,\n", " 2399,\n", " 2400,\n", " 2401,\n", " 2402,\n", " 2403,\n", " 2404,\n", " 2405,\n", " 2406,\n", " 2407,\n", " 2408,\n", " 2409,\n", " 2410,\n", " 2411,\n", " 2412,\n", " 2413,\n", " 2414,\n", " 2415,\n", " 2416,\n", " 2417,\n", " 2418,\n", " 2419,\n", " 2420,\n", " 2421,\n", " 2422,\n", " 2423,\n", " 2424,\n", " 2425,\n", " 2426,\n", " 2427,\n", " 2428,\n", " 2429,\n", " 2430,\n", " 2431,\n", " 2432,\n", " 2433,\n", " 2434,\n", " 2435,\n", " 2436,\n", " 2437,\n", " 2438,\n", " 2439,\n", " 2440,\n", " 2441,\n", " 2442,\n", " 2443,\n", " 2444,\n", " 2445,\n", " 2446,\n", " 2447,\n", " 2448,\n", " 2449,\n", " 2450,\n", " 2451,\n", " 2452,\n", " 2453,\n", " 2454,\n", " 2455,\n", " 2456,\n", " 2457,\n", " 2458,\n", " 2459,\n", " 2460,\n", " 2461,\n", " 2462,\n", " 2463,\n", " 2464,\n", " 2465,\n", " 2466,\n", " 2467,\n", " 2468,\n", " 2469,\n", " 2470,\n", " 2471,\n", " 2472,\n", " 2473,\n", " 2474,\n", " 2475,\n", " 2476,\n", " 2477,\n", " 2478,\n", " 2479,\n", " 2480,\n", " 2481,\n", " 2482,\n", " 2483,\n", " 2484,\n", " 2485,\n", " 2486,\n", " 2487,\n", " 2488,\n", " 2489,\n", " 2490,\n", " 2491,\n", " 2492,\n", " 2493,\n", " 2494,\n", " 2495,\n", " 2496,\n", " 2497,\n", " 2498,\n", " 2499,\n", " 2500,\n", " 2501,\n", " 2502,\n", " 2503,\n", " 2504,\n", " 2505,\n", " 2506,\n", " 2507,\n", " 2508,\n", " 2509,\n", " 2510,\n", " 2511,\n", " 2512,\n", " 2513,\n", " 2514,\n", " 2515,\n", " 2516,\n", " 2517,\n", " 2518,\n", " 2519,\n", " 2520,\n", " 2521,\n", " 2522,\n", " 2523,\n", " 2524,\n", " 2525,\n", " 2526,\n", " 2527,\n", " 2528,\n", " 2529,\n", " 2530,\n", " 2531,\n", " 2532,\n", " 2533,\n", " 2534,\n", " 2535,\n", " 2536,\n", " 2537,\n", " 2538,\n", " 2539,\n", " 2540,\n", " 2541,\n", " 2542,\n", " 2543,\n", " 2544,\n", " 2545,\n", " 2546,\n", " 2547,\n", " 2548,\n", " 2549,\n", " 2550,\n", " 2551,\n", " 2552,\n", " 2553,\n", " 2554,\n", " 2555,\n", " 2556,\n", " 2557,\n", " 2558,\n", " 2559,\n", " 2560,\n", " 2561,\n", " 2562,\n", " 2563,\n", " 2564,\n", " 2565,\n", " 2566,\n", " 2567,\n", " 2568,\n", " 2569,\n", " 2570,\n", " 2571,\n", " 2572,\n", " 2573,\n", " 2574,\n", " 2575,\n", " 2576,\n", " 2577,\n", " 2578,\n", " 2579,\n", " 2580,\n", " 2581,\n", " 2582,\n", " 2583,\n", " 2584,\n", " 2585,\n", " 2586,\n", " 2587,\n", " 2588,\n", " 2589,\n", " 2590,\n", " 2591,\n", " 2592,\n", " 2593,\n", " 2594,\n", " 2595,\n", " 2596,\n", " 2597,\n", " 2598,\n", " 2599,\n", " 2600,\n", " 2601,\n", " 2602,\n", " 2603,\n", " 2604,\n", " 2605,\n", " 2606,\n", " 2607,\n", " 2608,\n", " 2609,\n", " 2610,\n", " 2611,\n", " 2612,\n", " 2613,\n", " 2614,\n", " 2615,\n", " 2616,\n", " 2617,\n", " 2618,\n", " 2619,\n", " 2620,\n", " 2621,\n", " 2622,\n", " 2623,\n", " 2624,\n", " 2625,\n", " 2626,\n", " 2627,\n", " 2628,\n", " 2629,\n", " 2630,\n", " 2631,\n", " 2632,\n", " 2633,\n", " 2634,\n", " 2635,\n", " 2636,\n", " 2637,\n", " 2638,\n", " 2639,\n", " 2640,\n", " 2641,\n", " 2642,\n", " 2643,\n", " 2644,\n", " 2645,\n", " 2646,\n", " 2647,\n", " 2648,\n", " 2649,\n", " 2650,\n", " 2651,\n", " 2652,\n", " 2653,\n", " 2654,\n", " 2655,\n", " 2656,\n", " 2657,\n", " 2658,\n", " 2659,\n", " 2660,\n", " 2661,\n", " 2662,\n", " 2663,\n", " 2664,\n", " 2665,\n", " 2666,\n", " 2667,\n", " 2668,\n", " 2669,\n", " 2670,\n", " 2671,\n", " 2672,\n", " 2673,\n", " 2674,\n", " 2675,\n", " 2676,\n", " 2677,\n", " 2678,\n", " 2679,\n", " 2680,\n", " 2681,\n", " 2682,\n", " 2683,\n", " 2684,\n", " 2685,\n", " 2686,\n", " 2687,\n", " 2688,\n", " 2689,\n", " 2690,\n", " 2691,\n", " 2692,\n", " 2693,\n", " 2694,\n", " 2695,\n", " 2696,\n", " 2697,\n", " 2698,\n", " 2699,\n", " 2700,\n", " 2701,\n", " 2702,\n", " 2703,\n", " 2704,\n", " 2705,\n", " 2706,\n", " 2707,\n", " 2708,\n", " 2709,\n", " 2710,\n", " 2711,\n", " 2712,\n", " 2713,\n", " 2714,\n", " 2715,\n", " 2716,\n", " 2717,\n", " 2718,\n", " 2719,\n", " 2720,\n", " 2721,\n", " 2722,\n", " 2723,\n", " 2724,\n", " 2725,\n", " 2726,\n", " 2727,\n", " 2728,\n", " 2729,\n", " 2730,\n", " 2731,\n", " 2732,\n", " 2733,\n", " 2734,\n", " 2735,\n", " 2736,\n", " 2737,\n", " 2738,\n", " 2739,\n", " 2740,\n", " 2741,\n", " 2742,\n", " 2743,\n", " 2744,\n", " 2745,\n", " 2746,\n", " 2747,\n", " 2748,\n", " 2749,\n", " 2750,\n", " 2751,\n", " 2752,\n", " 2753,\n", " 2754,\n", " 2755,\n", " 2756,\n", " 2757,\n", " 2758,\n", " 2759,\n", " 2760,\n", " 2761,\n", " 2762,\n", " 2763,\n", " 2764,\n", " 2765,\n", " 2766,\n", " 2767,\n", " 2768,\n", " 2769,\n", " 2770,\n", " 2771,\n", " 2772,\n", " 2773,\n", " 2774,\n", " 2775,\n", " 2776,\n", " 2777,\n", " 2778,\n", " 2779,\n", " 2780,\n", " 2781,\n", " 2782,\n", " 2783,\n", " 2784,\n", " 2785,\n", " 2786,\n", " 2787,\n", " 2788,\n", " 2789,\n", " 2790,\n", " 2791,\n", " 2792,\n", " 2793,\n", " 2794,\n", " 2795,\n", " 2796,\n", " 2797,\n", " 2798,\n", " 2799,\n", " 2800,\n", " 2801,\n", " 2802,\n", " 2803,\n", " 2804,\n", " 2805,\n", " 2806,\n", " 2807,\n", " 2808,\n", " 2809,\n", " 2810,\n", " 2811,\n", " 2812,\n", " 2813,\n", " 2814,\n", " 2815,\n", " 2816,\n", " 2817,\n", " 2818,\n", " 2819,\n", " 2820,\n", " 2821,\n", " 2822,\n", " 2823,\n", " 2824,\n", " 2825,\n", " 2826,\n", " 2827,\n", " 2828,\n", " 2829,\n", " 2830,\n", " 2831,\n", " 2832,\n", " 2833,\n", " 2834,\n", " 2835,\n", " 2836,\n", " 2837,\n", " 2838,\n", " 2839,\n", " 2840,\n", " 2841,\n", " 2842,\n", " 2843,\n", " 2844,\n", " 2845,\n", " 2846,\n", " 2847,\n", " 2848,\n", " 2849,\n", " 2850,\n", " 2851,\n", " 2852,\n", " 2853,\n", " 2854,\n", " 2855,\n", " 2856,\n", " 2857,\n", " 2858,\n", " 2859,\n", " 2860,\n", " 2861,\n", " 2862,\n", " 2863,\n", " 2864,\n", " 2865,\n", " 2866,\n", " 2867,\n", " 2868,\n", " 2869,\n", " 2870,\n", " 2871,\n", " 2872,\n", " 2873,\n", " 2874,\n", " 2875,\n", " 2876,\n", " 2877,\n", " 2878,\n", " 2879,\n", " 2880,\n", " 2881,\n", " 2882,\n", " 2883,\n", " 2884,\n", " 2885,\n", " 2886,\n", " 2887,\n", " 2888,\n", " 2889,\n", " 2890,\n", " 2891,\n", " 2892,\n", " 2893,\n", " 2894,\n", " 2895,\n", " 2896,\n", " 2897,\n", " 2898,\n", " 2899,\n", " 2900,\n", " 2901,\n", " 2902,\n", " 2903,\n", " 2904,\n", " 2905,\n", " 2906,\n", " 2907,\n", " 2908,\n", " 2909,\n", " 2910,\n", " 2911,\n", " 2912,\n", " 2913,\n", " 2914,\n", " 2915,\n", " 2916,\n", " 2917,\n", " 2918,\n", " 2919,\n", " 2920,\n", " 2921,\n", " 2922,\n", " 2923,\n", " 2924,\n", " 2925,\n", " 2926,\n", " 2927,\n", " 2928,\n", " 2929,\n", " 2930,\n", " 2931,\n", " 2932,\n", " 2933,\n", " 2934,\n", " 2935,\n", " 2936,\n", " 2937,\n", " 2938,\n", " 2939,\n", " 2940,\n", " 2941,\n", " 2942,\n", " 2943,\n", " 2944,\n", " 2945,\n", " 2946,\n", " 2947,\n", " 2948,\n", " 2949,\n", " 2950,\n", " 2951,\n", " 2952,\n", " 2953,\n", " 2954,\n", " 2955,\n", " 2956,\n", " 2957,\n", " 2958,\n", " 2959,\n", " 2960,\n", " 2961,\n", " 2962,\n", " 2963,\n", " 2964,\n", " 2965,\n", " 2966,\n", " 2967,\n", " 2968,\n", " 2969,\n", " 2970,\n", " 2971,\n", " 2972,\n", " 2973,\n", " 2974,\n", " 2975,\n", " 2976,\n", " 2977,\n", " 2978,\n", " 2979,\n", " 2980,\n", " 2981,\n", " 2982,\n", " 2983,\n", " 2984,\n", " 2985,\n", " 2986,\n", " 2987,\n", " 2988,\n", " 2989,\n", " 2990,\n", " 2991,\n", " 2992,\n", " 2993,\n", " 2994,\n", " 2995,\n", " 2996,\n", " 2997,\n", " 2998,\n", " 2999,\n", " 3000,\n", " 3001,\n", " 3002,\n", " 3003,\n", " 3004,\n", " 3005,\n", " 3006,\n", " 3007,\n", " 3008,\n", " 3009,\n", " 3010,\n", " 3011,\n", " 3012,\n", " 3013,\n", " 3014,\n", " 3015,\n", " 3016,\n", " 3017,\n", " 3018,\n", " 3019,\n", " 3020,\n", " 3021,\n", " 3022,\n", " 3023,\n", " 3024,\n", " 3025,\n", " 3026,\n", " 3027,\n", " 3028,\n", " 3029,\n", " 3030,\n", " 3031,\n", " 3032,\n", " 3033,\n", " 3034,\n", " 3035,\n", " 3036,\n", " 3037,\n", " 3038,\n", " 3039,\n", " 3040,\n", " 3041,\n", " 3042,\n", " 3043,\n", " 3044,\n", " 3045,\n", " 3046,\n", " 3047,\n", " 3048,\n", " 3049,\n", " 3050,\n", " 3051,\n", " 3052,\n", " 3053,\n", " 3054,\n", " 3055,\n", " 3056,\n", " 3057,\n", " 3058,\n", " 3059,\n", " 3060,\n", " 3061,\n", " 3062,\n", " 3063,\n", " 3064,\n", " 3065,\n", " 3066,\n", " 3067,\n", " 3068,\n", " 3069,\n", " 3070,\n", " 3071,\n", " 3072,\n", " 3073,\n", " 3074,\n", " 3075,\n", " 3076,\n", " 3077,\n", " 3078,\n", " 3079,\n", " 3080,\n", " 3081,\n", " 3082,\n", " 3083,\n", " 3084,\n", " 3085,\n", " 3086,\n", " 3087,\n", " 3088,\n", " 3089,\n", " 3090,\n", " 3091,\n", " 3092,\n", " 3093,\n", " 3094,\n", " 3095,\n", " 3096,\n", " 3097,\n", " 3098,\n", " 3099,\n", " 3100,\n", " 3101,\n", " 3102,\n", " 3103,\n", " 3104,\n", " 3105,\n", " 3106,\n", " 3107,\n", " 3108,\n", " 3109,\n", " 3110,\n", " 3111,\n", " 3112,\n", " 3113,\n", " 3114,\n", " 3115,\n", " 3116,\n", " 3117,\n", " 3118,\n", " 3119,\n", " 3120,\n", " 3121,\n", " 3122,\n", " 3123,\n", " 3124,\n", " 3125,\n", " 3126,\n", " 3127,\n", " 3128,\n", " 3129,\n", " 3130,\n", " 3131,\n", " 3132,\n", " 3133,\n", " 3134,\n", " 3135,\n", " 3136,\n", " 3137,\n", " 3138,\n", " 3139,\n", " 3140,\n", " 3141,\n", " 3142,\n", " 3143,\n", " 3144,\n", " 3145,\n", " 3146,\n", " 3147,\n", " 3148,\n", " 3149,\n", " 3150,\n", " 3151,\n", " 3152,\n", " 3153,\n", " 3154,\n", " 3155,\n", " 3156,\n", " 3157,\n", " 3158,\n", " 3159,\n", " 3160,\n", " 3161,\n", " 3162,\n", " 3163,\n", " 3164,\n", " 3165,\n", " 3166,\n", " 3167,\n", " 3168,\n", " 3169,\n", " 3170,\n", " 3171,\n", " 3172,\n", " 3173,\n", " 3174,\n", " 3175,\n", " 3176,\n", " 3177,\n", " 3178,\n", " 3179,\n", " 3180,\n", " 3181,\n", " 3182,\n", " 3183,\n", " 3184,\n", " 3185,\n", " 3186,\n", " 3187,\n", " 3188,\n", " 3189,\n", " 3190,\n", " 3191,\n", " 3192,\n", " 3193,\n", " 3194,\n", " 3195,\n", " 3196,\n", " 3197,\n", " 3198,\n", " 3199,\n", " 3200,\n", " 3201,\n", " 3202,\n", " 3203,\n", " 3204,\n", " 3205,\n", " 3206,\n", " 3207,\n", " 3208,\n", " 3209,\n", " 3210,\n", " 3211,\n", " 3212,\n", " 3213,\n", " 3214,\n", " 3215,\n", " 3216,\n", " 3217,\n", " 3218,\n", " 3219,\n", " 3220,\n", " 3221,\n", " 3222,\n", " 3223,\n", " 3224,\n", " 3225,\n", " 3226,\n", " 3227,\n", " 3228,\n", " 3229,\n", " 3230,\n", " 3231,\n", " 3232,\n", " 3233,\n", " 3234,\n", " 3235,\n", " 3236,\n", " 3237,\n", " 3238,\n", " 3239,\n", " 3240,\n", " 3241,\n", " 3242,\n", " 3243,\n", " 3244,\n", " ...]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = []\n", "for i in range(3600):\n", " if [\"Fox_03\", f\"Fox_03_{i:05d}.jpg\"] not in results:\n", " l.append(i)\n", "l" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { "display_name": "Python 3.6.9 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }