├── server ├── home │ ├── __init__.py │ ├── models.py │ ├── static │ │ └── img │ │ │ ├── fabric.jpg │ │ │ ├── textures.jpg │ │ │ ├── thumb-0.png │ │ │ ├── thumb-1.png │ │ │ ├── thumb-10.png │ │ │ ├── thumb-2.png │ │ │ ├── thumb-3.png │ │ │ ├── thumb-4.png │ │ │ ├── thumb-5.png │ │ │ ├── thumb-6.png │ │ │ ├── thumb-7.png │ │ │ ├── thumb-8.png │ │ │ ├── thumb-9.png │ │ │ ├── compare_ui.png │ │ │ ├── opacity_ui.png │ │ │ ├── blob-sequence.jpg │ │ │ ├── siggraph2013.png │ │ │ ├── teaser4-web.jpg │ │ │ ├── representative.jpg │ │ │ ├── opensurfaces-segmentation-ui.png │ │ │ └── siggraph2014-preprint-thumb.png │ ├── tests.py │ ├── templates │ │ ├── index.html │ │ └── index_table.html │ └── urls.py ├── pose │ ├── __init__.py │ ├── cmd │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── fix_pose.py │ ├── migrations │ │ └── __init__.py │ ├── views.py │ ├── admin.py │ └── templates │ │ └── pose │ │ ├── parse_pose_thumb.html │ │ └── parse_pose.svg ├── accounts │ ├── __init__.py │ ├── signals.py │ ├── migrations │ │ └── __init__.py │ ├── templates │ │ ├── account │ │ │ ├── _login_sidebar.html │ │ │ ├── _signup_sidebar.html │ │ │ ├── email │ │ │ │ ├── password_change_subject.txt │ │ │ │ ├── invite_user_subject.txt │ │ │ │ ├── invite_user.txt │ │ │ │ ├── password_change.txt │ │ │ │ ├── password_reset_subject.txt │ │ │ │ ├── email_confirmation_subject.txt │ │ │ │ ├── email_confirmation_message.txt │ │ │ │ └── password_reset.txt │ │ │ ├── signup_footer.html │ │ │ ├── email_confirmed.html │ │ │ ├── email_confirmation_sent.html │ │ │ ├── base.html │ │ │ ├── password_reset_token_fail.html │ │ │ ├── signup_closed.html │ │ │ ├── settings.html │ │ │ ├── signup_ajax.html │ │ │ ├── delete.html │ │ │ ├── password_change.html │ │ │ ├── password_reset_token.html │ │ │ ├── logout.html │ │ │ ├── login_ajax.html │ │ │ ├── password_reset_sent.html │ │ │ ├── email_confirm.html │ │ │ └── password_reset.html │ │ └── admin_shell.html │ ├── urls.py │ ├── tests.py │ ├── admin.py │ └── forms.py ├── analytics │ ├── __init__.py │ ├── js │ ├── models.py │ ├── urls.py │ ├── views.py │ └── tests.py ├── common │ ├── __init__.py │ ├── js │ ├── cmd │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── create_dump_script.py │ ├── migrations │ │ └── __init__.py │ ├── signals.py │ ├── context_processors.py │ ├── static │ │ └── js │ │ │ └── common │ │ │ ├── display_stage.coffee │ │ │ ├── actions_spec.coffee │ │ │ ├── async_table.coffee │ │ │ ├── active_timer.coffee │ │ │ └── hacks.coffee │ ├── views.py │ ├── tests.py │ ├── admin.py │ ├── log.py │ ├── wavelets.py │ ├── cluster.py │ └── http.py ├── licenses │ ├── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── views.py │ ├── tests.py │ ├── admin.py │ └── templates │ │ └── license_inline.html ├── mturk │ ├── __init__.py │ ├── css │ ├── img │ ├── js │ ├── cmd │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── mtexpire_invalid_hits.py │ │ │ ├── mtpending.py │ │ │ ├── mtbalance.py │ │ │ ├── mtcubam.py │ │ │ └── mtconsume.py │ ├── migrations │ │ └── __init__.py │ ├── views │ │ └── __init__.py │ ├── static │ │ ├── img │ │ │ ├── .png │ │ │ └── mturk │ │ │ │ ├── wb1.jpg │ │ │ │ ├── wb2.jpg │ │ │ │ ├── wb3.jpg │ │ │ │ ├── wb4.jpg │ │ │ │ ├── wb5.jpg │ │ │ │ ├── wb6.jpg │ │ │ │ ├── wb7.jpg │ │ │ │ ├── wb8.jpg │ │ │ │ ├── wb9.jpg │ │ │ │ ├── bad1.jpg │ │ │ │ ├── bad2.jpg │ │ │ │ ├── bad3.jpg │ │ │ │ ├── bad4.jpg │ │ │ │ ├── bad5.jpg │ │ │ │ ├── bad6.jpg │ │ │ │ ├── draw1.jpg │ │ │ │ ├── draw2.jpg │ │ │ │ ├── draw3.jpg │ │ │ │ ├── draw4.jpg │ │ │ │ ├── draw5.jpg │ │ │ │ ├── draw6.jpg │ │ │ │ ├── good1.jpg │ │ │ │ ├── good10.jpg │ │ │ │ ├── good11.jpg │ │ │ │ ├── good12.jpg │ │ │ │ ├── good2.jpg │ │ │ │ ├── good3.jpg │ │ │ │ ├── good4.jpg │ │ │ │ ├── good5.jpg │ │ │ │ ├── good6.jpg │ │ │ │ ├── good7.jpg │ │ │ │ ├── good8.jpg │ │ │ │ ├── good9.jpg │ │ │ │ ├── planar.png │ │ │ │ ├── zoom1.jpg │ │ │ │ ├── adjust0.jpg │ │ │ │ ├── adjust1.jpg │ │ │ │ ├── adjust2.jpg │ │ │ │ ├── controls.jpg │ │ │ │ ├── planar2.png │ │ │ │ ├── wb-bad1.jpg │ │ │ │ ├── wb-bad2.jpg │ │ │ │ ├── bsdf_bad1.jpg │ │ │ │ ├── bsdf_bad2.jpg │ │ │ │ ├── bsdf_good1.jpg │ │ │ │ ├── bsdf_good2.jpg │ │ │ │ ├── bsdf_good3.jpg │ │ │ │ ├── bsdf_good4.jpg │ │ │ │ ├── bsdf_good5.jpg │ │ │ │ ├── bsdf_good6.jpg │ │ │ │ ├── nonplanar.png │ │ │ │ ├── nonplanar2.png │ │ │ │ ├── bsdf_controls.jpg │ │ │ │ ├── bsdf_controls1.jpg │ │ │ │ ├── planarity_bad1.jpg │ │ │ │ ├── planarity_bad2.jpg │ │ │ │ ├── planarity_bad3.jpg │ │ │ │ ├── planarity_good1.jpg │ │ │ │ ├── planarity_good2.jpg │ │ │ │ ├── planarity_good3.jpg │ │ │ │ ├── granite-vs-marble.jpg │ │ │ │ ├── label_bsdf_screen.xcf │ │ │ │ ├── quality_rectify_ex1a.jpg │ │ │ │ ├── quality_rectify_ex1b.jpg │ │ │ │ ├── rectify_material_bad1.jpg │ │ │ │ ├── rectify_material_bad2.jpg │ │ │ │ ├── rectify_material_bad3.jpg │ │ │ │ ├── segment_material_bad1.jpg │ │ │ │ ├── segment_material_bad2.jpg │ │ │ │ ├── segment_material_bad3.jpg │ │ │ │ ├── segment_material_bad4.jpg │ │ │ │ ├── quality_bsdf_gloss_ex1a.png │ │ │ │ ├── quality_bsdf_gloss_ex1b.jpg │ │ │ │ ├── rectify_material_good1.jpg │ │ │ │ ├── rectify_material_good2.jpg │ │ │ │ ├── rectify_material_good3.jpg │ │ │ │ ├── rectify_material_good4.jpg │ │ │ │ ├── rectify_material_good5.jpg │ │ │ │ ├── rectify_material_good6.jpg │ │ │ │ ├── rectify_material_good7.jpg │ │ │ │ ├── rectify_material_good8.jpg │ │ │ │ ├── segment_material_good1.jpg │ │ │ │ ├── segment_material_good2.jpg │ │ │ │ ├── quality_bsdf_color_expected.png │ │ │ │ ├── quality_material_shape_bad1.jpg │ │ │ │ └── quality_material_shape_good1.jpg │ │ └── js │ │ │ └── mturk │ │ │ └── admin │ │ │ ├── example.coffee │ │ │ ├── submission.coffee │ │ │ └── feedback.coffee │ ├── Makefile │ ├── signals.py │ ├── templates │ │ └── mturk │ │ │ ├── content_id_script.html │ │ │ ├── content_json_script.html │ │ │ ├── base_fixed.html │ │ │ ├── admin │ │ │ ├── pending_content_thumb_extra.html │ │ │ ├── example_thumb_extra.html │ │ │ ├── test_content_response.html │ │ │ ├── feedback_entry.html │ │ │ ├── feedback.html │ │ │ ├── example.html │ │ │ └── pending_content_base.html │ │ │ ├── webgl_compatible_msg.html │ │ │ ├── experiments │ │ │ ├── filter_content_inst.html │ │ │ └── filter_content_inst_content.html │ │ │ ├── content_script.html │ │ │ ├── content_preview_grid.html │ │ │ ├── loading_script.html │ │ │ ├── webgl_compatible_scripts.html │ │ │ ├── base_responsive.html │ │ │ └── examples.html │ ├── forms.py │ └── tests.py ├── photos │ ├── __init__.py │ ├── js │ ├── cmd │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── templates │ │ └── photos │ │ │ ├── experiments │ │ │ ├── photos_content_script.html │ │ │ ├── quality_scene_thumb.html │ │ │ ├── photos_preload_script.html │ │ │ ├── label_whitebalance_inst.html │ │ │ └── quality_scene_inst.html │ │ │ ├── thumb_no_overlay.html │ │ │ ├── detail │ │ │ ├── photo.html │ │ │ ├── parse_pose.html │ │ │ └── segmentation.html │ │ │ ├── display.svg │ │ │ ├── label_thumb.html │ │ │ ├── thumb.html │ │ │ ├── detail.html │ │ │ └── by_dataset.html │ ├── tests.py │ ├── urls.py │ └── admin.py ├── static │ ├── js │ │ ├── .Rhistory │ │ ├── array_remove.js │ │ ├── google-analytics.js │ │ ├── iso8601.min.js │ │ ├── thumb_votes.js │ │ └── csrf.js │ ├── .gitignore │ ├── robots.txt │ ├── favicon.ico │ ├── img │ │ ├── dust.png │ │ ├── grey.png │ │ ├── dust_@2X.png │ │ ├── grey2x.png │ │ ├── paper_2.png │ │ ├── sort_asc.png │ │ ├── txture.png │ │ ├── darkdenim3.png │ │ ├── grey-white.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ ├── txture_@2X.png │ │ ├── wild_oliva.png │ │ ├── ajax-loader.gif │ │ ├── back_disabled.png │ │ ├── back_enabled.png │ │ ├── black_paper.png │ │ ├── paper_2_@2X.png │ │ ├── wild_oliva2x.png │ │ ├── black_paper_@2X.png │ │ ├── darkdenim3_@2X.png │ │ ├── forward_enabled.png │ │ ├── back_enabled_hover.png │ │ ├── congruent_outline.png │ │ ├── extra_clean_paper.png │ │ ├── forward_disabled.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_desc_disabled.png │ │ ├── glyphicons-halflings.png │ │ ├── extra_clean_paper_@2X.png │ │ ├── forward_enabled_hover.png │ │ └── glyphicons-halflings-white.png │ ├── obj │ │ ├── blob.bin │ │ ├── .htaccess │ │ ├── convert.sh │ │ └── blob.js │ ├── tex │ │ ├── plastic-0.png │ │ ├── plastic-1.png │ │ ├── conductor-0.png │ │ ├── ward-0-ennis.png │ │ └── ward-1-ennis.png │ ├── font │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── css │ │ ├── images │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ ├── ui-icons_cd0a0a_256x240.png │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ └── dc-labelstuff.css │ ├── less │ │ ├── home.less │ │ ├── mixin.less │ │ ├── bootstrap │ │ │ ├── layouts.less │ │ │ ├── component-animations.less │ │ │ ├── utilities.less │ │ │ ├── grid.less │ │ │ ├── breadcrumbs.less │ │ │ ├── responsive-768px-979px.less │ │ │ ├── hero-unit.less │ │ │ ├── wells.less │ │ │ ├── responsive-1200px-min.less │ │ │ ├── close.less │ │ │ ├── accordion.less │ │ │ ├── pager.less │ │ │ ├── media.less │ │ │ └── scaffolding.less │ │ ├── base.less │ │ ├── base-iiw.less │ │ └── font-awesome │ │ │ └── path.less │ └── 500.html ├── segmentation │ ├── __init__.py │ ├── cmd │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ └── __init__.py │ ├── migrations │ │ └── __init__.py │ ├── templates │ │ └── segmentation │ │ │ ├── experiments │ │ │ ├── segment_part_person.html │ │ │ ├── quality_segmentation_inst.html │ │ │ ├── instruction_thumb.html │ │ │ ├── part_instruction_thumb.html │ │ │ ├── quality_segmentation.html │ │ │ ├── quality_segmentation_thumb.html │ │ │ └── quality_segmentation_inst_content.html │ │ │ ├── segmentation_thumb.html │ │ │ └── segmentation.svg │ ├── static │ │ ├── img │ │ │ └── segmentation │ │ │ │ ├── mturk │ │ │ │ ├── bad1.jpg │ │ │ │ ├── bad2.jpg │ │ │ │ ├── bad3.jpg │ │ │ │ ├── good1.jpg │ │ │ │ ├── good2.jpg │ │ │ │ ├── controls.jpg │ │ │ │ ├── good3_horse.jpg │ │ │ │ ├── toggle_off.jpg │ │ │ │ ├── toggle_on.jpg │ │ │ │ ├── scribble_more.jpg │ │ │ │ ├── scribble_start.jpg │ │ │ │ ├── tut_image_im0002.jpg │ │ │ │ └── expected_mask_im0002.png │ │ │ │ └── mturk_part │ │ │ │ ├── bad_1.jpg │ │ │ │ ├── bad_2.jpg │ │ │ │ ├── good_1.jpg │ │ │ │ ├── good_2.jpg │ │ │ │ ├── good_3.jpg │ │ │ │ ├── controls.jpg │ │ │ │ ├── im01996.jpg │ │ │ │ └── expected_mask_im01996.png │ │ └── js │ │ │ └── segmentation │ │ │ └── experiments │ │ │ ├── segment_person_tut.coffee │ │ │ ├── segment_part_person_tut.coffee │ │ │ ├── segment_person.coffee │ │ │ └── scribble_ui.coffee │ ├── admin.py │ ├── tests.py │ └── urls.py ├── config │ ├── .gitignore │ ├── __init__.py │ ├── supervisor_template.conf │ ├── logrotate_template.conf │ └── celery.py ├── templates │ ├── loading_bar.html │ ├── d3_css.html │ ├── block_page.html │ ├── image_square.svg │ ├── base_footer.html │ ├── dataset_items.html │ ├── svg_marker_arrow_black.svg │ ├── dataset_filter_items.html │ ├── list_page.html │ ├── todo.html │ ├── 404.html │ ├── error.html │ ├── 500.html │ ├── grid2_page.html │ ├── grid3_page.html │ ├── grid4_page.html │ ├── grid_page.html │ ├── grid.html │ ├── base_debug_overlay.html │ ├── grid4.html │ ├── endless_list_votes.html │ ├── d3_scripts.html │ ├── base_messages.html │ ├── base_sidenav.html │ ├── modal_loading.html │ ├── entry_li.html │ ├── modal_form.html │ ├── modal_areyousure.html │ ├── entry_scripts.html │ ├── modal_error.html │ ├── endless_list_curate.html │ ├── modal_instructions.html │ ├── endless_list.html │ └── modal_give_up.html ├── .gitignore └── manage.py ├── docs ├── .gitignore ├── extending │ ├── part4.rst │ └── part3.rst ├── _static │ └── favicon.ico ├── api │ ├── common.geom.rst │ ├── mturk.cubam.rst │ ├── mturk.utils.rst │ ├── common.utils.rst │ ├── photos.utils.rst │ ├── shapes.utils.rst │ ├── bsdfs.models.rst │ ├── mturk.models.rst │ ├── photos.models.rst │ ├── accounts.models.rst │ ├── normals.models.rst │ ├── intrinsic.models.rst │ └── shapes.models.rst ├── changes.rst ├── api.rst ├── mturk │ └── commands.rst ├── architecture.rst └── extending.rst ├── scripts ├── .gitignore ├── install │ ├── requirements-python-1.txt │ ├── install_nginx.sh │ ├── build_docker.sh │ ├── install_dirs.sh │ ├── install_all.sh │ ├── install_memcached.sh │ ├── requirements-packages.txt │ ├── install_nodejs.sh │ ├── install_packages.sh │ └── install_server.sh ├── collect_static.sh ├── start_docker.sh ├── create_db.sh ├── run.sh ├── start_worker.sh ├── make_private.sh └── init_db.sh ├── install_all.sh └── .gitignore /server/home/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/pose/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _build 2 | -------------------------------------------------------------------------------- /server/accounts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/accounts/signals.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/analytics/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/home/models.py: -------------------------------------------------------------------------------- 1 | # 2 | -------------------------------------------------------------------------------- /server/licenses/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/mturk/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/photos/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/static/js/.Rhistory: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/.gitignore: -------------------------------------------------------------------------------- 1 | config.sh 2 | -------------------------------------------------------------------------------- /server/common/js: -------------------------------------------------------------------------------- 1 | static/js/common -------------------------------------------------------------------------------- /server/mturk/css: -------------------------------------------------------------------------------- 1 | static/css/mturk -------------------------------------------------------------------------------- /server/mturk/img: -------------------------------------------------------------------------------- 1 | static/img/mturk -------------------------------------------------------------------------------- /server/mturk/js: -------------------------------------------------------------------------------- 1 | static/js/mturk -------------------------------------------------------------------------------- /server/photos/js: -------------------------------------------------------------------------------- 1 | static/js/photos -------------------------------------------------------------------------------- /server/segmentation/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/accounts/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/analytics/js: -------------------------------------------------------------------------------- 1 | static/js/analytics -------------------------------------------------------------------------------- /server/common/cmd: -------------------------------------------------------------------------------- 1 | management/commands -------------------------------------------------------------------------------- /server/common/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/common/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/licenses/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/mturk/cmd: -------------------------------------------------------------------------------- 1 | management/commands -------------------------------------------------------------------------------- /server/mturk/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/mturk/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/photos/cmd: -------------------------------------------------------------------------------- 1 | management/commands -------------------------------------------------------------------------------- /server/photos/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/photos/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/pose/cmd: -------------------------------------------------------------------------------- 1 | management/commands -------------------------------------------------------------------------------- /server/pose/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/pose/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/pose/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/segmentation/cmd: -------------------------------------------------------------------------------- 1 | management/commands -------------------------------------------------------------------------------- /server/segmentation/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/segmentation/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /install_all.sh: -------------------------------------------------------------------------------- 1 | scripts/install/install_all.sh -------------------------------------------------------------------------------- /server/common/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/mturk/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/photos/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/static/.gitignore: -------------------------------------------------------------------------------- 1 | materialshape.csv 2 | -------------------------------------------------------------------------------- /server/pose/views.py: -------------------------------------------------------------------------------- 1 | # Create your views here. 2 | -------------------------------------------------------------------------------- /server/segmentation/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/licenses/views.py: -------------------------------------------------------------------------------- 1 | # Create your views here. 2 | -------------------------------------------------------------------------------- /server/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | -------------------------------------------------------------------------------- /server/mturk/views/__init__.py: -------------------------------------------------------------------------------- 1 | from .external import * 2 | from .admin import * 3 | -------------------------------------------------------------------------------- /docs/extending/part4.rst: -------------------------------------------------------------------------------- 1 | Part 4: Write experiment UI 2 | =========================== 3 | -------------------------------------------------------------------------------- /server/accounts/templates/account/_login_sidebar.html: -------------------------------------------------------------------------------- 1 | {# provide log in sidebar here #} 2 | -------------------------------------------------------------------------------- /server/accounts/templates/account/_signup_sidebar.html: -------------------------------------------------------------------------------- 1 | {# provide sign up in sidebar here #} 2 | -------------------------------------------------------------------------------- /server/analytics/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /docs/_static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/docs/_static/favicon.ico -------------------------------------------------------------------------------- /server/accounts/templates/account/email/password_change_subject.txt: -------------------------------------------------------------------------------- 1 | Change password email notification -------------------------------------------------------------------------------- /server/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/favicon.ico -------------------------------------------------------------------------------- /server/accounts/templates/account/email/invite_user_subject.txt: -------------------------------------------------------------------------------- 1 | Create an account on {{ current_site.name }} -------------------------------------------------------------------------------- /server/static/img/dust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/dust.png -------------------------------------------------------------------------------- /server/static/img/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/grey.png -------------------------------------------------------------------------------- /server/static/obj/blob.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/obj/blob.bin -------------------------------------------------------------------------------- /server/mturk/static/img/.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/.png -------------------------------------------------------------------------------- /server/static/img/dust_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/dust_@2X.png -------------------------------------------------------------------------------- /server/static/img/grey2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/grey2x.png -------------------------------------------------------------------------------- /server/static/img/paper_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/paper_2.png -------------------------------------------------------------------------------- /server/static/img/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/sort_asc.png -------------------------------------------------------------------------------- /server/static/img/txture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/txture.png -------------------------------------------------------------------------------- /server/static/img/darkdenim3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/darkdenim3.png -------------------------------------------------------------------------------- /server/static/img/grey-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/grey-white.png -------------------------------------------------------------------------------- /server/static/img/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/sort_both.png -------------------------------------------------------------------------------- /server/static/img/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/sort_desc.png -------------------------------------------------------------------------------- /server/static/img/txture_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/txture_@2X.png -------------------------------------------------------------------------------- /server/static/img/wild_oliva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/wild_oliva.png -------------------------------------------------------------------------------- /server/static/tex/plastic-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/tex/plastic-0.png -------------------------------------------------------------------------------- /server/static/tex/plastic-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/tex/plastic-1.png -------------------------------------------------------------------------------- /server/analytics/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | 3 | urlpatterns = patterns( 4 | '', 5 | ) 6 | -------------------------------------------------------------------------------- /server/home/static/img/fabric.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/fabric.jpg -------------------------------------------------------------------------------- /server/home/static/img/textures.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/textures.jpg -------------------------------------------------------------------------------- /server/home/static/img/thumb-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-0.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-1.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-10.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-2.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-3.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-4.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-5.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-6.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-7.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-8.png -------------------------------------------------------------------------------- /server/home/static/img/thumb-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/thumb-9.png -------------------------------------------------------------------------------- /server/static/font/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/font/FontAwesome.otf -------------------------------------------------------------------------------- /server/static/img/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/ajax-loader.gif -------------------------------------------------------------------------------- /server/static/img/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/back_disabled.png -------------------------------------------------------------------------------- /server/static/img/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/back_enabled.png -------------------------------------------------------------------------------- /server/static/img/black_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/black_paper.png -------------------------------------------------------------------------------- /server/static/img/paper_2_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/paper_2_@2X.png -------------------------------------------------------------------------------- /server/static/img/wild_oliva2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/wild_oliva2x.png -------------------------------------------------------------------------------- /server/static/tex/conductor-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/tex/conductor-0.png -------------------------------------------------------------------------------- /server/static/tex/ward-0-ennis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/tex/ward-0-ennis.png -------------------------------------------------------------------------------- /server/static/tex/ward-1-ennis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/tex/ward-1-ennis.png -------------------------------------------------------------------------------- /server/home/static/img/compare_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/compare_ui.png -------------------------------------------------------------------------------- /server/home/static/img/opacity_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/opacity_ui.png -------------------------------------------------------------------------------- /server/mturk/Makefile: -------------------------------------------------------------------------------- 1 | poly.js: 2 | coffee --join poly.js --compile --output static/js/ coffee/ 3 | 4 | coffee: poly.js 5 | -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb7.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb8.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb9.jpg -------------------------------------------------------------------------------- /server/static/img/black_paper_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/black_paper_@2X.png -------------------------------------------------------------------------------- /server/static/img/darkdenim3_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/darkdenim3_@2X.png -------------------------------------------------------------------------------- /server/static/img/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/forward_enabled.png -------------------------------------------------------------------------------- /server/config/.gitignore: -------------------------------------------------------------------------------- 1 | settings_local.py 2 | apache_include_local.conf 3 | apache_nossl_local.conf 4 | apache_ssl_local.conf 5 | -------------------------------------------------------------------------------- /server/home/static/img/blob-sequence.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/blob-sequence.jpg -------------------------------------------------------------------------------- /server/home/static/img/siggraph2013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/siggraph2013.png -------------------------------------------------------------------------------- /server/home/static/img/teaser4-web.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/teaser4-web.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bad6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bad6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/draw6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/draw6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good10.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good11.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good12.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good7.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good8.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/good9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/good9.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planar.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/zoom1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/zoom1.jpg -------------------------------------------------------------------------------- /server/static/img/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/back_enabled_hover.png -------------------------------------------------------------------------------- /server/static/img/congruent_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/congruent_outline.png -------------------------------------------------------------------------------- /server/static/img/extra_clean_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/extra_clean_paper.png -------------------------------------------------------------------------------- /server/static/img/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/forward_disabled.png -------------------------------------------------------------------------------- /server/static/img/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/sort_asc_disabled.png -------------------------------------------------------------------------------- /server/static/img/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/sort_desc_disabled.png -------------------------------------------------------------------------------- /server/home/static/img/representative.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/representative.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/adjust0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/adjust0.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/adjust1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/adjust1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/adjust2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/adjust2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/controls.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planar2.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb-bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb-bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/wb-bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/wb-bad2.jpg -------------------------------------------------------------------------------- /server/static/font/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/font/fontawesome-webfont.eot -------------------------------------------------------------------------------- /server/static/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /server/static/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /server/accounts/templates/account/email/invite_user.txt: -------------------------------------------------------------------------------- 1 | You have been invited to sign up at {{ current_site.name }}. 2 | 3 | {{ signup_url }} -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_bad2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_good6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_good6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/nonplanar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/nonplanar.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/nonplanar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/nonplanar2.png -------------------------------------------------------------------------------- /server/static/font/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/font/fontawesome-webfont.woff -------------------------------------------------------------------------------- /server/static/img/extra_clean_paper_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/extra_clean_paper_@2X.png -------------------------------------------------------------------------------- /server/static/img/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/forward_enabled_hover.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_controls.jpg -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/segment_part_person.html: -------------------------------------------------------------------------------- 1 | {% include "segmentation/experiments/segment_person.html" %} 2 | -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/bsdf_controls1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/bsdf_controls1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_bad2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_bad3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_bad3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_good1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_good2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/planarity_good3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/planarity_good3.jpg -------------------------------------------------------------------------------- /server/static/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /server/accounts/templates/account/email/password_change.txt: -------------------------------------------------------------------------------- 1 | This is the email notification to confirm your password has been changed on {{ user.account.now }}. -------------------------------------------------------------------------------- /server/mturk/signals.py: -------------------------------------------------------------------------------- 1 | import django.dispatch 2 | 3 | # sent when a HIT is expired 4 | hit_expired = django.dispatch.Signal(providing_args=["instance"]) 5 | -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/granite-vs-marble.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/granite-vs-marble.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/label_bsdf_screen.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/label_bsdf_screen.xcf -------------------------------------------------------------------------------- /server/mturk/templates/mturk/content_id_script.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/content_json_script.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /server/static/css/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /server/static/css/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /server/static/css/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /server/static/css/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /server/static/css/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /server/static/obj/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | SetOutputFilter DEFLATE 3 | 4 | 5 | 6 | SetOutputFilter DEFLATE 7 | 8 | -------------------------------------------------------------------------------- /server/templates/loading_bar.html: -------------------------------------------------------------------------------- 1 |
2 |
Loading...
3 |
4 | -------------------------------------------------------------------------------- /server/home/static/img/opensurfaces-segmentation-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/opensurfaces-segmentation-ui.png -------------------------------------------------------------------------------- /server/home/static/img/siggraph2014-preprint-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/home/static/img/siggraph2014-preprint-thumb.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_rectify_ex1a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_rectify_ex1a.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_rectify_ex1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_rectify_ex1b.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_bad2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_bad3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_bad3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_bad2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_bad3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_bad3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_bad4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_bad4.jpg -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_bsdf_gloss_ex1a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_bsdf_gloss_ex1a.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_bsdf_gloss_ex1b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_bsdf_gloss_ex1b.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good3.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good4.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good5.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good6.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good7.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/rectify_material_good8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/rectify_material_good8.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_good1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/segment_material_good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/segment_material_good2.jpg -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/bad1.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/bad2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/bad2.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/bad3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/bad3.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/good1.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/good2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/good2.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_bsdf_color_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_bsdf_color_expected.png -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_material_shape_bad1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_material_shape_bad1.jpg -------------------------------------------------------------------------------- /server/mturk/static/img/mturk/quality_material_shape_good1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/mturk/static/img/mturk/quality_material_shape_good1.jpg -------------------------------------------------------------------------------- /server/segmentation/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from segmentation.models import PersonSegmentation 4 | 5 | admin.site.register(PersonSegmentation) 6 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/controls.jpg -------------------------------------------------------------------------------- /server/analytics/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | from cacheback.decorators import cacheback 4 | from common.utils import dump_queryset_to_static_csv 5 | 6 | -------------------------------------------------------------------------------- /server/pose/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from pose.models import ParsePose, Person 4 | 5 | admin.site.register(ParsePose) 6 | admin.site.register(Person) 7 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/good3_horse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/good3_horse.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/toggle_off.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/toggle_off.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/toggle_on.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/toggle_on.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/bad_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/bad_1.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/bad_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/bad_2.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/good_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/good_1.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/good_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/good_2.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/good_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/good_3.jpg -------------------------------------------------------------------------------- /server/static/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/static/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /server/accounts/templates/account/email/password_reset_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}[{{ site_name }}] Password reset{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/scribble_more.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/scribble_more.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/controls.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/im01996.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/im01996.jpg -------------------------------------------------------------------------------- /docs/api/common.geom.rst: -------------------------------------------------------------------------------- 1 | module: ``common.geom`` 2 | ============================ 3 | 4 | .. automodule:: common.geom 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/api/mturk.cubam.rst: -------------------------------------------------------------------------------- 1 | module: ``mturk.cubam`` 2 | ============================ 3 | 4 | .. automodule:: mturk.cubam 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/api/mturk.utils.rst: -------------------------------------------------------------------------------- 1 | module: ``mturk.utils`` 2 | ============================ 3 | 4 | .. automodule:: mturk.utils 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/scribble_start.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/scribble_start.jpg -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/tut_image_im0002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/tut_image_im0002.jpg -------------------------------------------------------------------------------- /docs/api/common.utils.rst: -------------------------------------------------------------------------------- 1 | module: ``common.utils`` 2 | ============================ 3 | 4 | .. automodule:: common.utils 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/api/photos.utils.rst: -------------------------------------------------------------------------------- 1 | module: ``photos.utils`` 2 | ============================ 3 | 4 | .. automodule:: photos.utils 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/api/shapes.utils.rst: -------------------------------------------------------------------------------- 1 | module: ``shapes.utils`` 2 | ============================ 3 | 4 | .. automodule:: shapes.utils 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email/email_confirmation_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}Confirm email address for {{ site_name }}{% endblocktrans %} -------------------------------------------------------------------------------- /server/common/signals.py: -------------------------------------------------------------------------------- 1 | import django.dispatch 2 | 3 | # sent when a worker submission is invalidated by an admin user 4 | marked_invalid = django.dispatch.Signal(providing_args=["instance"]) 5 | -------------------------------------------------------------------------------- /server/pose/templates/pose/parse_pose_thumb.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% include "pose/parse_pose.svg" with orig="True" %} 4 |
5 |
6 | -------------------------------------------------------------------------------- /server/templates/d3_css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk/expected_mask_im0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk/expected_mask_im0002.png -------------------------------------------------------------------------------- /server/templates/block_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate entries_per_page entries %} 3 | {% for entry in entries %} 4 | {% include thumb_template %} 5 | {% endfor %} 6 | {% show_more %} 7 | -------------------------------------------------------------------------------- /server/segmentation/static/img/segmentation/mturk_part/expected_mask_im01996.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/classner/openpose/HEAD/server/segmentation/static/img/segmentation/mturk_part/expected_mask_im01996.png -------------------------------------------------------------------------------- /server/templates/image_square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /server/static/obj/convert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # converts OBJ to THREE.JS format 3 | 4 | for f; do python ~/opt/three.js/utils/exporters/obj/convert_obj_three.py -i $f -o $(basename $f .obj).js -t binary -s smooth; done 5 | -------------------------------------------------------------------------------- /server/templates/base_footer.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/base_fixed.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/base_responsive.html" %} 2 | 3 | {% block css_responsive %}{% endblock %} 4 | 5 | {% block content_tag %} 6 |
7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /server/accounts/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | from accounts.views import admin_shell 3 | 4 | urlpatterns = patterns( 5 | '', 6 | url(r'^admin-shell/$', admin_shell, name='admin-shell'), 7 | ) 8 | -------------------------------------------------------------------------------- /server/config/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | # This will make sure the app is always imported when 4 | # Django starts so that shared_task will use this app. 5 | from .celery import app as celery_app 6 | -------------------------------------------------------------------------------- /server/config/supervisor_template.conf: -------------------------------------------------------------------------------- 1 | [program:PROJECT_NAME] 2 | command = REPO_DIR/scripts/exec_gunicorn.sh 3 | user = SERVER_USER 4 | stdout_logfile = REPO_DIR/run/gunicorn.log 5 | redirect_stderr = true 6 | autorestart = true 7 | -------------------------------------------------------------------------------- /server/templates/dataset_items.html: -------------------------------------------------------------------------------- 1 | {% for c in datasets %} 2 |
  • 3 | {{ c.name }} ({{ c.count }}) 4 |
  • 5 | {% endfor %} 6 | -------------------------------------------------------------------------------- /server/templates/svg_marker_arrow_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/pending_content_thumb_extra.html: -------------------------------------------------------------------------------- 1 |
    2 |

    {{ entry.num_outputs_completed }} / {{ entry.num_outputs_max }} complete, {{ entry.num_outputs_scheduled }} scheduled

    3 |
    4 | -------------------------------------------------------------------------------- /server/templates/dataset_filter_items.html: -------------------------------------------------------------------------------- 1 | {% for c in datasets %} 2 |
  • 3 | {{ c.name }} ({{ c.count }}) 4 |
  • 5 | {% endfor %} 6 | -------------------------------------------------------------------------------- /server/templates/list_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate 12 entries %} 3 | {% for entry in entries %} 4 | 7 | {% endfor %} 8 | {% show_more %} 9 | -------------------------------------------------------------------------------- /docs/api/bsdfs.models.rst: -------------------------------------------------------------------------------- 1 | module: ``bsdfs.models`` 2 | ======================== 3 | 4 | .. automodule:: bsdfs.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /docs/api/mturk.models.rst: -------------------------------------------------------------------------------- 1 | module: ``mturk.models`` 2 | ======================== 3 | 4 | .. automodule:: mturk.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite3 2 | .disable-* 3 | ipython-notebooks 4 | bsdf-sequence 5 | substance-grid-new 6 | substance-grid 7 | texture-grid 8 | image-labels 9 | *.tmp 10 | results_sweep_thresh.json 11 | results_sweep_thresh.pkl 12 | generated-* 13 | -------------------------------------------------------------------------------- /docs/api/photos.models.rst: -------------------------------------------------------------------------------- 1 | module: ``photos.models`` 2 | ========================= 3 | 4 | .. automodule:: photos.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /server/photos/templates/photos/experiments/photos_content_script.html: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/api/accounts.models.rst: -------------------------------------------------------------------------------- 1 | module: ``acounts.models`` 2 | ========================== 3 | 4 | .. automodule:: accounts.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /docs/api/normals.models.rst: -------------------------------------------------------------------------------- 1 | module: ``normals.models`` 2 | ========================== 3 | 4 | .. automodule:: normals.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /server/mturk/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | 3 | # THIS IS UNUSED 4 | 5 | class MTurkAssignmentForm(forms.Form): 6 | data = forms.CharField(required=True) 7 | action_log = forms.CharField(required=True) 8 | feedback = forms.CharField(required=False) 9 | -------------------------------------------------------------------------------- /docs/api/intrinsic.models.rst: -------------------------------------------------------------------------------- 1 | module: ``intrinsic.models`` 2 | ============================ 3 | 4 | .. automodule:: intrinsic.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /server/photos/templates/photos/thumb_no_overlay.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/quality_segmentation_inst.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/experiments/filter_content_inst.html" %} 2 | 3 | {% block instructions_header %} 4 | For this task, you will select segmentations that align with the central person. 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/webgl_compatible_msg.html: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /server/static/js/array_remove.js: -------------------------------------------------------------------------------- 1 | // Array Remove - By John Resig (MIT Licensed) 2 | Array.prototype.remove = function(from, to) { 3 | var rest = this.slice((to || from) + 1 || this.length); 4 | this.length = from < 0 ? this.length + from : from; 5 | return this.push.apply(this, rest); 6 | }; 7 | -------------------------------------------------------------------------------- /docs/api/shapes.models.rst: -------------------------------------------------------------------------------- 1 | module: ``shapes.models`` 2 | ========================= 3 | 4 | .. automodule:: shapes.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | :exclude-members: objects, get_next_by_added, get_previous_by_added, DoesNotExist, MultipleObjectsReturned 9 | -------------------------------------------------------------------------------- /server/accounts/templates/account/signup_footer.html: -------------------------------------------------------------------------------- 1 |

    Note: We do not store your password in plaintext. We hash it with PBKDF2 and SHA256 using 104 iterations, as recommended by NIST.

    2 | -------------------------------------------------------------------------------- /server/templates/todo.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header %} 4 |
    5 |
    6 |

    TODO

    7 |
    8 |
    9 | {% endblock %} 10 | 11 | {% block content %} 12 |

    Placeholder!

    13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /server/templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block navbar %} {% endblock %} 3 | 4 | {% block content %} 5 |
    6 |

    404!

    7 |

    Sorry, this page does not exist.

    8 |
    9 | {% endblock %} 10 | 11 | {% block footer %} {% endblock %} 12 | -------------------------------------------------------------------------------- /server/templates/error.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block navbar %} {% endblock %} 3 | 4 | {% block content %} 5 |
    6 |

    Sorry!

    7 |

    {{ message|safe }}

    8 |
    9 | {% endblock %} 10 | 11 | {% block footer %} {% endblock %} 12 | -------------------------------------------------------------------------------- /scripts/install/requirements-python-1.txt: -------------------------------------------------------------------------------- 1 | # security exceptions (necessary for PIP 1.5) 2 | --allow-all-external 3 | 4 | # celery 5 | pyrabbit>=1.0.0,<1.1 6 | celery>=3.1.9,<3.2 7 | 8 | # scientific computing 9 | scikit-image>=0.9.3,<0.10 10 | numconv>=2.1.1,<2.2 11 | colormath>=1.0.8,<1.1 12 | matplotlib>=1.3.1,<1.4 13 | -------------------------------------------------------------------------------- /server/common/context_processors.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | 3 | 4 | def debug(context): 5 | """ Adds the DEBUG and ENABLE_CACHING variable to the context of all 6 | templates """ 7 | return { 8 | 'DEBUG': settings.DEBUG, 9 | 'ENABLE_CACHING': settings.ENABLE_CACHING, 10 | } 11 | -------------------------------------------------------------------------------- /server/photos/templates/photos/experiments/quality_scene_thumb.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 6 |
    7 | -------------------------------------------------------------------------------- /server/photos/templates/photos/detail/photo.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | {% include "photos/display.svg" with entry=photo orig="True" %} 5 |
    6 |
    7 | 8 |
    9 | {% include "photos/detail/sidebar.html" %} 10 |
    11 |
    12 | -------------------------------------------------------------------------------- /server/templates/500.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block navbar %} {% endblock %} 3 | 4 | {% block content %} 5 |
    6 |

    500!

    7 |

    Sorry, there was an internal server error.

    8 |

    Try refreshing the page.

    9 |
    10 | {% endblock %} 11 | 12 | {% block footer %} {% endblock %} 13 | -------------------------------------------------------------------------------- /server/photos/templates/photos/display.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /server/segmentation/static/js/segmentation/experiments/segment_person_tut.coffee: -------------------------------------------------------------------------------- 1 | $( -> 2 | args = { 3 | 'width': $('#mt-container').width() - 4 4 | 'height': $(window).height() - $('#mt-top-nohover').height() - 16 5 | 'container_id': 'mt-container' 6 | } 7 | 8 | window.controller_ui = new SegmentPersonTutorial(mt_tut_contents, args) 9 | ) 10 | -------------------------------------------------------------------------------- /server/templates/grid2_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate 12 entries %} 3 | 8 | 12 | {% show_more %} 13 | -------------------------------------------------------------------------------- /server/templates/grid3_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate 12 entries %} 3 | 8 | 12 | {% show_more %} 13 | -------------------------------------------------------------------------------- /server/templates/grid4_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate entries %} 3 | 8 | 12 | {% show_more %} 13 | -------------------------------------------------------------------------------- /server/templates/grid_page.html: -------------------------------------------------------------------------------- 1 | {% load endless %} 2 | {% lazy_paginate entries_per_page entries %} 3 | 8 | 12 | {% show_more %} 13 | -------------------------------------------------------------------------------- /scripts/install/install_nginx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Set up nginx and gunicorn 4 | # 5 | 6 | # find the scripts directory (note the /..) 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | # create a new installation 12 | bash "$DIR/make_public.sh" 13 | 14 | echo "$0: done" 15 | -------------------------------------------------------------------------------- /docs/changes.rst: -------------------------------------------------------------------------------- 1 | Change log 2 | ========== 3 | 4 | Before 2014-03-07 5 | ----------------- 6 | 7 | - Refactored ``shapes`` module into three smaller modules: ``shapes``, ``normals``, ``bsdfs`` 8 | - Refactored mturk experiment system to have less dependency on individual modules 9 | - Wrote documentation for the project 10 | - Added "Intrinsic Images in the Wild" code 11 | -------------------------------------------------------------------------------- /server/photos/templates/photos/experiments/photos_preload_script.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /server/static/less/home.less: -------------------------------------------------------------------------------- 1 | /* index page */ 2 | 3 | /* fix the table on the home page */ 4 | @media (min-width: 768px) and (max-width: 979px) { 5 | .home-table-stats { 6 | font-size: 7pt; 7 | .table-condensed; 8 | } 9 | } 10 | @media (min-width: 980px) and (max-width: 1199px) { 11 | .home-table-stats { 12 | font-size: 9pt; 13 | .table-condensed; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/extending/part3.rst: -------------------------------------------------------------------------------- 1 | Part 3: Configure the experiment 2 | ================================ 3 | 4 | Create ``server/tutorial_app/experiments.py`` and implement the 5 | functions described in :ref:`mturk-experiments-py`. 6 | 7 | For our triplet demo, here is an example implementation: 8 | 9 | .. literalinclude:: ../../server/tutorial_app/experiments.py 10 | :language: py 11 | -------------------------------------------------------------------------------- /scripts/collect_static.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copies static files to the data directory. 4 | # 5 | 6 | # Load config 7 | DIR="$( builtin cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" 8 | source "$DIR/load_config.sh" 9 | 10 | echo "Collect static files..." 11 | sudo -u $SERVER_USER bash -c "builtin cd $SRC_DIR; python ./manage.py collectstatic --noinput" 12 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/example_thumb_extra.html: -------------------------------------------------------------------------------- 1 |
    2 | 3 | 4 |
    5 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email/email_confirmation_message.txt: -------------------------------------------------------------------------------- 1 | {% load i18n account_tags %}{% user_display user as username %}{% blocktrans with site_name=current_site.name user_name=username %}Welcome to OpenSurfaces! 2 | 3 | User '{{ user_name }}' at {{ site_name }} has given this as an email address. 4 | 5 | To confirm this is correct, please go to {{ activate_url }} 6 | {% endblocktrans %} 7 | -------------------------------------------------------------------------------- /server/common/static/js/common/display_stage.coffee: -------------------------------------------------------------------------------- 1 | # Passive display of objects 2 | # ... TODO 3 | 4 | class DisplayStage 5 | constructor: (args) -> 6 | 7 | create_stage: -> 8 | # create stage 9 | @stage = new Kinetic.Stage( 10 | container: args.container_id, 11 | width: @size.width, height: @size.height) 12 | @layer = new Kinetic.Layer() 13 | @stage.add(@layer) 14 | -------------------------------------------------------------------------------- /server/common/views.py: -------------------------------------------------------------------------------- 1 | from django.views.generic import TemplateView 2 | 3 | 4 | class Handler500(TemplateView): 5 | 6 | template_name = '500.html' 7 | 8 | @classmethod 9 | def as_error_view(cls): 10 | v = cls.as_view() 11 | 12 | def view(request): 13 | r = v(request) 14 | r.render() 15 | return r 16 | 17 | return view 18 | -------------------------------------------------------------------------------- /server/segmentation/static/js/segmentation/experiments/segment_part_person_tut.coffee: -------------------------------------------------------------------------------- 1 | $( -> 2 | args = { 3 | 'width': $('#mt-container').width() - 4 4 | 'height': $(window).height() - $('#mt-top-nohover').height() - 16 5 | 'container_id': 'mt-container' 6 | 'part_field': 'part-name' 7 | } 8 | 9 | window.controller_ui = new SegmentPersonTutorial(mt_tut_contents, args) 10 | ) 11 | -------------------------------------------------------------------------------- /server/templates/grid.html: -------------------------------------------------------------------------------- 1 | {% if entries %} 2 |
    3 | 8 | 12 |
    13 | {% else %} 14 |

    No items are available.

    15 | {% endif %} 16 | -------------------------------------------------------------------------------- /server/templates/base_debug_overlay.html: -------------------------------------------------------------------------------- 1 | {% if DEBUG %} 2 |
    3 | DEBUG: True 4 |
    5 | {% if ENABLE_CACHING %} 6 | ENABLE_CACHING: True 7 | {% else %} 8 | ENABLE_CACHING: False 9 | {% endif %} 10 |
    11 | {% endif %} 12 | -------------------------------------------------------------------------------- /server/static/less/mixin.less: -------------------------------------------------------------------------------- 1 | /* pattern mixin */ 2 | .pattern-overlay(@img, @opacity: .5) { 3 | content: ''; 4 | display: block; 5 | position: absolute; 6 | top: 0; right: 0; bottom: 0; left: 0; 7 | background: url(@img) repeat center center; 8 | opacity: @opacity; 9 | } 10 | 11 | /* helpers */ 12 | .hidden { 13 | display: none; 14 | } 15 | .cursor-pointer { 16 | cursor: pointer; 17 | } 18 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email/password_reset.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}You're receiving this email because you or someone else has requested a password for your user account at {{ site_name }}. 2 | 3 | It can be safely ignored if you did not request a password reset. Click the link below to reset your password. 4 | 5 | {{ password_reset_url }} 6 | {% endblocktrans %} 7 | -------------------------------------------------------------------------------- /server/templates/grid4.html: -------------------------------------------------------------------------------- 1 | {% if entries %} 2 |
    3 | 8 | 12 |
    13 | {% else %} 14 |

    No items are available.

    15 | {% endif %} 16 | -------------------------------------------------------------------------------- /server/manage.py: -------------------------------------------------------------------------------- 1 | #!/bin/env python2.7 2 | # 3 | # ^ Note the relative path. You must call this the local directory as: 4 | # ./manage.py [args...] 5 | 6 | import os 7 | import sys 8 | 9 | if __name__ == "__main__": 10 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") 11 | 12 | from django.core.management import execute_from_command_line 13 | execute_from_command_line(sys.argv) 14 | -------------------------------------------------------------------------------- /scripts/start_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script starts the openpose container. 4 | # 5 | 6 | # find the scripts directory 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | sudo docker run -t -i -p 45001:80 --link "${PROJECT_NAME}-data:${DB_HOST}" \ 12 | -v ${REPO_DIR}/media:/home/appuser/data/media "${PROJECT_NAME}" /bin/bash 13 | -------------------------------------------------------------------------------- /server/common/static/js/common/actions_spec.coffee: -------------------------------------------------------------------------------- 1 | describe 'UndoableEvent', -> 2 | 3 | beforeEach, -> @ue = new UndoableEvent() 4 | 5 | it "throws an exception", -> 6 | expect(@ue.undo()).toThrow(); 7 | expect(@ue.redo()).toThrow(); 8 | expect(@ue.run()).toThrow(); 9 | expect(@ue.entry()).toThrow(); 10 | 11 | describe 'UndoRedo', -> 12 | 13 | beforeEach, -> 14 | @ur = new UndoRedo() 15 | 16 | -------------------------------------------------------------------------------- /scripts/create_db.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script starts a container with a postgres database 4 | # 5 | 6 | # find the scripts directory 7 | # DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 8 | #source $DIR/load_config.sh 9 | source scripts/load_config.sh 10 | cd "$REPO_DIR" 11 | mkdir -p ${DB_DIR} 12 | sudo docker run --name "${PROJECT_NAME}-data" -v ${DB_DIR}:/var/lib/postgresql/data -d postgres 13 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/layouts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Layouts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container (centered, fixed-width layouts) 7 | .container { 8 | .container-fixed(); 9 | } 10 | 11 | // Fluid layouts (left aligned, with sidebar, min- & max-width content) 12 | .container-fluid { 13 | padding-right: @gridGutterWidth; 14 | padding-left: @gridGutterWidth; 15 | .clearfix(); 16 | } -------------------------------------------------------------------------------- /server/mturk/templates/mturk/experiments/filter_content_inst.html: -------------------------------------------------------------------------------- 1 | {# Base template for binary tasks where users click on items arranged in a grid #} 2 | 3 | {% extends "mturk/base_responsive.html" %} 4 | {% load humanize %} 5 | {% load compress %} 6 | 7 | {% block content %} 8 | 11 | {% include instructions %} 12 | {% endblock content %} 13 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email_confirmed.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | 6 | {% block head_title %}{% trans "Email confirmed" %}{% endblock %} 7 | 8 | {% block content %} 9 |

    {% trans "Email confirmed" %}

    10 |

    {% blocktrans with email=confirmation.email_address.email %}You have confirmed {{ email }}{% endblocktrans %}

    11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | 6 | .fade { 7 | opacity: 0; 8 | .transition(opacity .15s linear); 9 | &.in { 10 | opacity: 1; 11 | } 12 | } 13 | 14 | .collapse { 15 | position: relative; 16 | height: 0; 17 | overflow: hidden; 18 | .transition(height .35s ease); 19 | &.in { 20 | height: auto; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /server/static/js/google-analytics.js: -------------------------------------------------------------------------------- 1 | var _gaq =_gaq||[]; 2 | _gaq.push(['_setAccount','UA-35926441-1']); 3 | _gaq.push(['_trackPageview']); 4 | (function(){ 5 | var ga=document.createElement('script'); 6 | ga.type='text/javascript'; 7 | ga.async=true; 8 | ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js'; 9 | var s=document.getElementsByTagName('script')[0]; 10 | s.parentNode.insertBefore(ga,s); 11 | })(); 12 | -------------------------------------------------------------------------------- /scripts/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script runs everything. 4 | # 5 | 6 | # find the scripts directory 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | touch $REPO_DIR/nginx-access.log 12 | 13 | service rabbitmq-server start 14 | service memcached start 15 | service supervisor start 16 | supervisorctl start ${PROJECT_NAME} 17 | service nginx start 18 | bash "$DIR/start_worker.sh" & 19 | -------------------------------------------------------------------------------- /server/accounts/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/common/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/home/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/licenses/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/mturk/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/photos/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/analytics/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/segmentation/tests.py: -------------------------------------------------------------------------------- 1 | """ 2 | This file demonstrates writing tests using the unittest module. These will pass 3 | when you run "manage.py test". 4 | 5 | Replace this with more appropriate tests for your application. 6 | """ 7 | 8 | from django.test import TestCase 9 | 10 | 11 | class SimpleTest(TestCase): 12 | def test_basic_addition(self): 13 | """ 14 | Tests that 1 + 1 always equals 2. 15 | """ 16 | self.assertEqual(1 + 1, 2) 17 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/instruction_thumb.html: -------------------------------------------------------------------------------- 1 |
    2 | {% with entry.get_entry_dict as prop %} 3 | 4 | 5 | 6 | {% endwith %} 7 |
    8 | -------------------------------------------------------------------------------- /server/templates/endless_list_votes.html: -------------------------------------------------------------------------------- 1 | {% extends "endless_list.html" %} 2 | 3 | {% block scripts %} 4 | {{ block.super }} 5 | 6 | 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /server/config/logrotate_template.conf: -------------------------------------------------------------------------------- 1 | REPO_DIR/run/nginx-*.log { 2 | weekly 3 | missingok 4 | rotate 52 5 | compress 6 | delaycompress 7 | notifempty 8 | create 0640 SERVER_USER SERVER_GROUP 9 | sharedscripts 10 | prerotate 11 | if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ 12 | run-parts /etc/logrotate.d/httpd-prerotate; \ 13 | fi; \ 14 | endscript 15 | postrotate 16 | [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` 17 | endscript 18 | } 19 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/content_script.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/content_preview_grid.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
      4 | {% for c in contents %} 5 |
    • 6 |
      7 | 8 |
      9 |
    • 10 | {% if forloop.counter|divisibleby:"6" %} 11 |
    12 |
      13 | {% endif %} 14 | {% endfor %} 15 |
    16 |
    17 |
    18 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/experiments/filter_content_inst_content.html: -------------------------------------------------------------------------------- 1 | {# Base template for binary tasks where users click on items arranged in a grid #} 2 | 3 | {% load humanize %} 4 | 5 | {% block instructions_content_text %}{% endblock %} 6 | 7 | {% include "mturk/examples.html" %} 8 | 9 |
    10 |

    Why are we doing this?

    11 | 12 |

    We are trying to build a database of materials. This experiment is part of ongoing research at Cornell University. Thank you for participating!

    13 | -------------------------------------------------------------------------------- /server/static/js/iso8601.min.js: -------------------------------------------------------------------------------- 1 | /** https://github.com/csnover/js-iso8601 */(function(n,f){var u=n.parse,c=[1,4,5,6,7,10,11];n.parse=function(t){var i,o,a=0;if(o=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(t)){for(var v=0,r;r=c[v];++v)o[r]=+o[r]||0;o[2]=(+o[2]||1)-1,o[3]=+o[3]||1,o[8]!=="Z"&&o[9]!==f&&(a=o[10]*60+o[11],o[9]==="+"&&(a=0-a)),i=n.UTC(o[1],o[2],o[3],o[4],o[5]+a,o[6],o[7])}else i=u?u(t):NaN;return i}})(Date) 2 | -------------------------------------------------------------------------------- /server/mturk/management/commands/mtexpire_invalid_hits.py: -------------------------------------------------------------------------------- 1 | from clint.textui import progress 2 | 3 | from django.core.management.base import BaseCommand 4 | from django.db import transaction 5 | 6 | from mturk.models import MtHit 7 | 8 | 9 | class Command(BaseCommand): 10 | args = '' 11 | help = 'Fixes a bug with objects being sent out early' 12 | 13 | def handle(self, *args, **options): 14 | from mturk.tasks import expire_invalid_hits 15 | expire_invalid_hits(show_progress=True) 16 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Quick floats 7 | .pull-right { 8 | float: right; 9 | } 10 | .pull-left { 11 | float: left; 12 | } 13 | 14 | // Toggling content 15 | .hide { 16 | display: none; 17 | } 18 | .show { 19 | display: block; 20 | } 21 | 22 | // Visibility 23 | .invisible { 24 | visibility: hidden; 25 | } 26 | 27 | // For Affix plugin 28 | .affix { 29 | position: fixed; 30 | } 31 | -------------------------------------------------------------------------------- /server/static/less/base.less: -------------------------------------------------------------------------------- 1 | // Bootstrap+Bootswatch+DataTables 2 | @import "bootstrap/bootstrap.less"; 3 | @import "bootstrap-ext/bootswatch.less"; 4 | @import "bootstrap-ext/DT_bootstrap.less"; 5 | @import "bootstrap-ext/combobox.less"; 6 | 7 | @import "font-awesome/font-awesome.less"; 8 | 9 | @import "mixin.less"; 10 | @import "global.less"; 11 | @import "jumbotron.less"; 12 | @import "home.less"; 13 | @import "overlay.less"; 14 | @import "svg.less"; 15 | @import "misc.less"; 16 | 17 | @import "responsive.less"; 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Temporary. 2 | images 3 | 4 | # Folders that are being used by the server. 5 | /data/ 6 | /db/ 7 | /media/ 8 | /backup/ 9 | /venv/ 10 | /opt/ 11 | /run/ 12 | /figures/ 13 | /synthetic/ 14 | /test-renders/ 15 | /celerybeat-schedule 16 | 17 | # OS folders. 18 | dist/ 19 | build/ 20 | release/ 21 | .DS_Store/ 22 | 23 | # Files. 24 | *.DS_Store 25 | *~ 26 | *.log 27 | *.pyc 28 | .*.xml 29 | .*.swp 30 | .*.swo 31 | .*.swn 32 | .*.tmp 33 | .swp 34 | .ropeproject 35 | tmp.conf 36 | pg_dump.sql.gz 37 | Thumbs.db 38 | -------------------------------------------------------------------------------- /server/static/css/dc-labelstuff.css: -------------------------------------------------------------------------------- 1 | .chart-row { margin-top: 20px; margin-bottom: 20px; } 2 | .reset { margin-left: 10px; margin-top: -11px; } 3 | .chart-title { font-size: 20px } 4 | .chart-subtitle { margin-top: 10px; color: #444; } 5 | .filter-count { font-weight: bold; color: #914646;} 6 | .total-count { font-weight: bold; color: #914646;} 7 | #data-count { float: right; } 8 | #data-count .reset { margin-top: 0px; } 9 | 10 | table { margin-top: 10px; table-layout: fixed; } 11 | table th, table td { overflow: hidden; } 12 | -------------------------------------------------------------------------------- /server/common/admin.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | # In the admin panel, when adding new fields, 4 | # sets the 'user' field to be the current logged in user 5 | # as the default 6 | class AutoUserMixin(object): 7 | def formfield_for_foreignkey(self, db_field, request, **kwargs): 8 | if db_field.name == 'user': 9 | kwargs['initial'] = request.user.id 10 | return db_field.formfield(**kwargs) 11 | return super(AutoUserMixin, self).formfield_for_foreignkey( 12 | db_field, request, **kwargs) 13 | -------------------------------------------------------------------------------- /server/static/less/base-iiw.less: -------------------------------------------------------------------------------- 1 | // Bootstrap+Bootswatch+DataTables 2 | @import "bootstrap/bootstrap.less"; 3 | @import "bootstrap-ext/bootswatch.less"; 4 | @import "bootstrap-ext/DT_bootstrap.less"; 5 | @import "bootstrap-ext/combobox.less"; 6 | 7 | @import "font-awesome/font-awesome.less"; 8 | 9 | @import "mixin.less"; 10 | @import "global.less"; 11 | @import "jumbotron-iiw.less"; 12 | @import "home.less"; 13 | @import "overlay.less"; 14 | @import "svg.less"; 15 | @import "misc.less"; 16 | 17 | @import "responsive.less"; 18 | -------------------------------------------------------------------------------- /server/templates/d3_scripts.html: -------------------------------------------------------------------------------- 1 | {% load compress %} 2 | 3 | 4 | 5 | 6 | 7 | {% compress js %} 8 | 9 | 10 | {% endcompress %} 11 | -------------------------------------------------------------------------------- /docs/api.rst: -------------------------------------------------------------------------------- 1 | API Reference 2 | ============= 3 | 4 | Models 5 | ------ 6 | 7 | .. toctree:: 8 | :maxdepth: 3 9 | 10 | api/mturk.models 11 | api/intrinsic.models 12 | api/bsdfs.models 13 | api/photos.models 14 | api/shapes.models 15 | api/normals.models 16 | api/accounts.models 17 | 18 | Utilities 19 | --------- 20 | 21 | .. toctree:: 22 | :maxdepth: 3 23 | 24 | api/common.utils 25 | api/common.geom 26 | api/photos.utils 27 | api/shapes.utils 28 | api/mturk.cubam 29 | api/mturk.utils 30 | -------------------------------------------------------------------------------- /server/templates/base_messages.html: -------------------------------------------------------------------------------- 1 | 4 | {% for message in messages %} 5 |
    6 | 7 | {{ message }} 8 |
    9 | {% endfor %} 10 | -------------------------------------------------------------------------------- /server/static/obj/blob.js: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "metadata" : 4 | { 5 | "formatVersion" : 3.1, 6 | "sourceFile" : "blob.obj", 7 | "generatedBy" : "OBJConverter", 8 | "vertices" : 16386, 9 | "faces" : 32768, 10 | "normals" : 16386, 11 | "uvs" : 0, 12 | "materials" : 0 13 | }, 14 | 15 | "materials": [ { 16 | "DbgColor" : 15658734, 17 | "DbgIndex" : 0, 18 | "DbgName" : "default" 19 | }], 20 | 21 | "buffers": "blob.bin" 22 | 23 | } 24 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/part_instruction_thumb.html: -------------------------------------------------------------------------------- 1 |
    2 | {% with entry.get_entry_dict as prop %} 3 | 4 | 5 | 6 |

    Body Part: {{ prop.part_name }}

    7 | {% endwith %} 8 |
    9 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Fixed (940px) 7 | #grid > .core(@gridColumnWidth, @gridGutterWidth); 8 | 9 | // Fluid (940px) 10 | #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); 11 | 12 | // Reset utility classes due to specificity 13 | [class*="span"].hide, 14 | .row-fluid [class*="span"].hide { 15 | display: none; 16 | } 17 | 18 | [class*="span"].pull-right, 19 | .row-fluid [class*="span"].pull-right { 20 | float: right; 21 | } 22 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/quality_segmentation.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/experiments/filter_content.html" %} 2 | 3 | {% block instructions_summary %} 4 | Click on segmentations that are good. Reject segmentations that do not align with the central person. 5 | {% endblock %} 6 | 7 | {% block instructions_extra %} 8 |

    Please check if the segmentations below align with the central person.

    9 | {% endblock %} 10 | 11 | {% block counter_name %} 12 | object(s) are segmented to align with the central person. 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: 8px 15px; 8 | margin: 0 0 @baseLineHeight; 9 | list-style: none; 10 | background-color: #f5f5f5; 11 | .border-radius(@baseBorderRadius); 12 | li { 13 | display: inline-block; 14 | .ie7-inline-block(); 15 | text-shadow: 0 1px 0 @white; 16 | } 17 | .divider { 18 | padding: 0 5px; 19 | color: #ccc; 20 | } 21 | .active { 22 | color: @grayLight; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email_confirmation_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | 6 | {% block head_title %}{% trans "Confirm your email address" %}{% endblock %} 7 | 8 | {% block content %} 9 |

    {% trans "Confirm your email address" %}

    10 | 11 |

    {% blocktrans %}We have sent you an email to {{ email }} for verification. Follow the link provided to finalize the signup process.{% endblocktrans %}

    12 |

    Go back

    13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /server/photos/templates/photos/detail/parse_pose.html: -------------------------------------------------------------------------------- 1 |

    Parse Pose

    2 | {% if photo.persons.all %} 3 | {% for person in photo.persons.all %} 4 |

    Person

    5 | {% if person.parse_poses.all %} 6 | {% include "grid.html" with span="span4" rowsize="3" thumb_template="pose/parse_pose_thumb.html" entries=person.parse_poses.all %} 7 | {% else %} 8 |

    This person has not been annotated, yet.

    9 | {% endif %} 10 | {% endfor %} 11 | {% else %} 12 |

    This photo has not been annotated, yet.

    13 | {% endif %} 14 | -------------------------------------------------------------------------------- /server/photos/templates/photos/experiments/label_whitebalance_inst.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/base_responsive.html" %} 2 | {% load humanize %} 3 | 4 | {% block content %} 5 | 8 | 9 | 12 | {% include instructions %} 13 | 14 | {% comment %} 15 |
    16 |

    These will be your photos for the task:

    17 | {% include "mturk/content_preview_grid.html" %} 18 | {% endcomment %} 19 | 20 | {% endblock content %} 21 | -------------------------------------------------------------------------------- /server/photos/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | from photos.views import photo_by_dataset, photo_detail 3 | 4 | urlpatterns = patterns( 5 | '', 6 | 7 | url(r'^$', 8 | photo_by_dataset, name='photo-by-dataset'), 9 | 10 | url(r'^dataset/(?P\w+)/$', 11 | photo_by_dataset, name='photo-by-dataset'), 12 | 13 | url(r'^dataset/(?P\w+)/(?P\w+)/$', 14 | photo_by_dataset, name='photo-by-dataset'), 15 | 16 | url(r'^(?P\d+)/$', 17 | photo_detail, name='photo-detail'), 18 | 19 | ) 20 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/test_content_response.html: -------------------------------------------------------------------------------- 1 | {% with entry.test_content.content as entry_content %} 2 | {% with entry_content.get_thumb_template as thumb_template %} 3 |
    4 | {% if entry.correct %} 5 | Correct 6 | {% else %} 7 | Incorrect 8 | {% endif %} 9 | Response: "{{ entry.response }}" 10 |
    11 | {% include thumb_template with entry=entry_content %} 12 | {% endwith %} 13 | {% endwith %} 14 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/responsive-768px-979px.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Tablet to desktop 3 | // -------------------------------------------------- 4 | 5 | 6 | @media (min-width: 768px) and (max-width: 979px) { 7 | 8 | // Fixed grid 9 | #grid > .core(@gridColumnWidth768, @gridGutterWidth768); 10 | 11 | // Fluid grid 12 | #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); 13 | 14 | // Input grid 15 | #grid > .input(@gridColumnWidth768, @gridGutterWidth768); 16 | 17 | // No need to reset .thumbnails here since it's the same @gridGutterWidth 18 | 19 | } 20 | -------------------------------------------------------------------------------- /server/common/log.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from datetime import datetime 3 | 4 | 5 | class RateLimitFilter(logging.Filter): 6 | """ 7 | A logging filter that performs rate-limiting on error messages. At most 8 | one error is let through every 'rate' seconds. 9 | """ 10 | def __init__(self, rate=1): 11 | self._rate = rate 12 | self._now = datetime.now() 13 | 14 | def filter(self, record): 15 | if (datetime.now() - self._now).total_seconds() >= self._rate: 16 | self._now = datetime.now() 17 | return True 18 | return False 19 | -------------------------------------------------------------------------------- /server/accounts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.contrib.auth.admin import UserAdmin 3 | from django.contrib.auth.models import User 4 | 5 | from accounts.models import UserProfile 6 | 7 | 8 | # Define a new User admin 9 | class UserAdmin(UserAdmin): 10 | 11 | class UserProfileInline(admin.StackedInline): 12 | model = UserProfile 13 | can_delete = False 14 | verbose_name_plural = 'profile' 15 | 16 | inlines = [UserProfileInline] 17 | 18 | 19 | # Re-register UserAdmin 20 | admin.site.unregister(User) 21 | admin.site.register(User, UserAdmin) 22 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/loading_script.html: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /docs/mturk/commands.rst: -------------------------------------------------------------------------------- 1 | .. _mturk-commands: 2 | 3 | Commands 4 | -------- 5 | 6 | This section provides more detailed documentation of the various MTurk 7 | management commands. All commands must be run from the ``server/`` directory. 8 | 9 | .. automodule:: mturk.management.commands.mtconfigure 10 | .. automodule:: mturk.management.commands.mtconsume 11 | .. automodule:: mturk.management.commands.mtapprove_loop 12 | .. automodule:: mturk.management.commands.mtexpire 13 | .. automodule:: mturk.management.commands.mtsync 14 | .. automodule:: mturk.management.commands.mtcubam 15 | .. automodule:: mturk.management.commands.mtbalance 16 | -------------------------------------------------------------------------------- /server/mturk/management/commands/mtpending.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. describe:: ./manage.py mtpending 3 | 4 | Search for any objects not described by an instance of 5 | :class:`mturk.models.PendingContent` and create ``PendingContent`` 6 | instances. 7 | """ 8 | 9 | from django.core.management.base import BaseCommand 10 | 11 | 12 | class Command(BaseCommand): 13 | args = '' # ' ...' 14 | help = 'Scans for pending objects' 15 | 16 | def handle(self, *args, **options): 17 | from mturk.tasks import scan_all_for_pending_objects_task 18 | scan_all_for_pending_objects_task(show_progress=True) 19 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/segmentation_thumb.html: -------------------------------------------------------------------------------- 1 |
    2 | {% with entry.task.get_entry_dict as task %} 3 |
    4 | {% include "segmentation/segmentation.svg" with orig="True" %} 5 |
    6 |

    Body Part: {{ task.part_name }} 7 | {% for assessment in entry.qualities.all %} 8 | {% if assessment.correct %} 9 | 10 | {% else %} 11 | 12 | {% endif %} 13 | {% endfor %} 14 |

    15 | {% endwith %} 16 |
    17 | -------------------------------------------------------------------------------- /server/templates/base_sidenav.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block css %}{{ block.super }} 4 | 5 | {% endblock %} 6 | 7 | {% block container %} 8 | {% block content_tag %} 9 |
    10 | {% endblock %} 11 | {% block before_sidenav %}{% endblock %} 12 |
    13 |
    14 | {% block sidenav %}{% endblock %} 15 |
    16 |
    17 | {% include "base_messages.html" %} 18 | {% block content %}{% endblock %} 19 |
    20 |
    21 |
    22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /docs/architecture.rst: -------------------------------------------------------------------------------- 1 | Sytem architecture 2 | ================== 3 | 4 | The OpenSurfaces webserver runs using a number of interacting systems: 5 | gunicorn, nginx, postgres, celery, and memcached. All of these components are 6 | automatically configured and should work out of the box. However, should you 7 | need to change/debug/modify the webserver, you need to understand how all the 8 | components fit together. 9 | 10 | .. toctree:: 11 | :maxdepth: 2 12 | 13 | architecture/components 14 | architecture/directory_structure 15 | architecture/settings 16 | architecture/image_data 17 | architecture/installed_packages 18 | -------------------------------------------------------------------------------- /server/segmentation/static/js/segmentation/experiments/segment_person.coffee: -------------------------------------------------------------------------------- 1 | $( -> 2 | args = { 3 | 'width': $('#mt-container').width() - 4 4 | 'height': $(window).height() - $('#mt-top-nohover').height() - 16 5 | 'container_id': 'mt-container' 6 | 'part_field': 'part-name' 7 | } 8 | 9 | window.controller_ui = new SegmentationController(args) 10 | window.controller_ui.reset(window.mt_contents) 11 | ) 12 | 13 | btn_submit = -> 14 | window.mt_submit(window.controller_ui.get_submit_data) 15 | 16 | # wait for everything to load before allowing submit 17 | $(window).on('load', -> 18 | $('#btn-submit').on('click', btn_submit) 19 | ) 20 | -------------------------------------------------------------------------------- /server/config/celery.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | import os 4 | from celery import Celery 5 | from django.conf import settings 6 | 7 | # set the default Django settings module for the 'celery' program. 8 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') 9 | 10 | app = Celery('config') 11 | 12 | # Using a string here means the worker will not have to 13 | # pickle the object when using Windows. 14 | app.config_from_object('django.conf:settings') 15 | app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 16 | 17 | 18 | @app.task(bind=True) 19 | def debug_task(self): 20 | print('Request: {0!r}'.format(self.request)) 21 | -------------------------------------------------------------------------------- /scripts/install/build_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script completely sets up the OpenSurfaces database and server 4 | # 5 | # Usage: ./install_all.sh 6 | # 7 | 8 | # load configuration info 9 | set -e 10 | source "scripts/load_config.sh" 11 | 12 | echo "" 13 | echo "====================================================================" 14 | echo "Now creating docker image." 15 | REV=`git rev-parse HEAD` 16 | docker build -t "${PROJECT_NAME}:${REV}" . 17 | docker tag -f "${PROJECT_NAME}:${REV}" "${PROJECT_NAME}:latest" 18 | 19 | # exit message 20 | echo "$0: done!" 21 | echo "" 22 | echo "====================================================================" 23 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/hero-unit.less: -------------------------------------------------------------------------------- 1 | // 2 | // Hero unit 3 | // -------------------------------------------------- 4 | 5 | 6 | .hero-unit { 7 | padding: 60px; 8 | margin-bottom: 30px; 9 | font-size: 18px; 10 | font-weight: 200; 11 | line-height: @baseLineHeight * 1.5; 12 | color: @heroUnitLeadColor; 13 | background-color: @heroUnitBackground; 14 | .border-radius(6px); 15 | h1 { 16 | margin-bottom: 0; 17 | font-size: 60px; 18 | line-height: 1; 19 | color: @heroUnitHeadingColor; 20 | letter-spacing: -1px; 21 | } 22 | li { 23 | line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /server/accounts/templates/account/base.html: -------------------------------------------------------------------------------- 1 | {% extends "base_sidenav.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | 6 | {% block body_class %}account{% endblock %} 7 | 8 | {% block sidenav %} 9 |
    10 | 18 |
    19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /server/photos/templates/photos/label_thumb.html: -------------------------------------------------------------------------------- 1 | {% with entry.photo as photo %} 2 | 3 |
    4 |
    5 | 6 | 9 |
    10 |
    11 |

    {{ entry.get_thumb_overlay }} | {{ entry.time_s }} s

    12 |
    13 |
    14 |
    15 | {% endwith %} 16 | -------------------------------------------------------------------------------- /server/photos/templates/photos/thumb.html: -------------------------------------------------------------------------------- 1 | 2 |
    3 |
    4 | 5 | 8 |
    9 | {% if entry.dataset %} 10 |
    11 |

    {{ entry.dataset.name }}

    12 |
    13 | {% endif %} 14 |
    15 |
    16 | -------------------------------------------------------------------------------- /scripts/install/install_dirs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script sets up directories and fixes permissions 4 | # 5 | 6 | # find the scripts directory (note the /..) 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | echo "Creating directories..." 12 | mkdir -p $DATA_DIR/media 13 | mkdir -p $DATA_DIR/static 14 | mkdir -p run 15 | mkdir -p $BACKUP_DIR 16 | 17 | echo "Fixing permissions..." 18 | bash "$DIR/fix_permissions.sh" appuser 19 | 20 | echo "Fixing celerybeat-schedule..." 21 | rm -f $SRC_DIR/celerybeat-schedule 22 | 23 | echo "Cleaning old static files..." 24 | rm -rf $DATA_DIR/static/* 25 | 26 | echo "$0: done" 27 | -------------------------------------------------------------------------------- /server/photos/templates/photos/detail/segmentation.html: -------------------------------------------------------------------------------- 1 |

    Segmentation

    2 | {% if photo.persons.all %} 3 | {% for person in photo.persons.all %} 4 |

    Person

    5 | {% for segmentation_task in person.segmentation_tasks.all %} 6 | {% if segmentation_task.responses.all %} 7 | {% include "grid.html" with span="span4" rowsize="3" thumb_template="segmentation/segmentation_thumb.html" entries=segmentation_task.responses.all %} 8 | {% else %} 9 |

    This person has not been annotated, yet.

    10 | {% endif %} 11 | {% endfor %} 12 | {% endfor %} 13 | {% else %} 14 |

    This photo has not been annotated, yet.

    15 | {% endif %} 16 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @wellBackground; 12 | border: 1px solid darken(@wellBackground, 7%); 13 | .border-radius(@wellBorderRadius); 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-large { 23 | padding: 24px; 24 | .border-radius(@borderRadiusLarge); 25 | } 26 | .well-small { 27 | padding: 9px; 28 | .border-radius(@borderRadiusSmall); 29 | } 30 | -------------------------------------------------------------------------------- /server/templates/modal_loading.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | General modal dialog for loading confirmation 3 | Usage: call show_modal_loading("Loading...", 1000) 4 | to show a message after timeout milliseconds 5 | and hide_modal_loading() to cancel/hide 6 | {% endcomment %} 7 | 8 | 18 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/responsive-1200px-min.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Large desktop and up 3 | // -------------------------------------------------- 4 | 5 | 6 | @media (min-width: 1200px) { 7 | 8 | // Fixed grid 9 | #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); 10 | 11 | // Fluid grid 12 | #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); 13 | 14 | // Input grid 15 | #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); 16 | 17 | // Thumbnails 18 | .thumbnails { 19 | margin-left: -@gridGutterWidth1200; 20 | } 21 | .thumbnails > li { 22 | margin-left: @gridGutterWidth1200; 23 | } 24 | .row-fluid .thumbnails { 25 | margin-left: 0; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /server/licenses/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from common.admin import AutoUserMixin 4 | from licenses.models import License 5 | 6 | 7 | class LicenseAdmin(AutoUserMixin, admin.ModelAdmin): 8 | fieldsets = [ 9 | (None, { 10 | 'fields': ['added', 'name', 'url', 'creative_commons', 11 | 'cc_attribution', 'cc_noncommercial', 12 | 'cc_no_deriv', 'cc_share_alike'] 13 | }), 14 | ] 15 | 16 | # fields 17 | readonly_fields = ['added'] 18 | list_display = ['name', 'url'] 19 | 20 | # field display 21 | list_filter = ['name', 'added'] 22 | search_fields = ['name', 'url'] 23 | 24 | 25 | admin.site.register(License, LicenseAdmin) 26 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/feedback_entry.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |

    {{ entry.hit.hit_type.title }}

    4 |
    5 |
    6 | 7 | {% comment %} 8 |
    9 | Preview HIT 10 |
    11 | {% endcomment %} 12 |
    13 |
    14 | {% if entry.hit.sandbox %} 15 |

    SANDBOX

    16 | {% endif %} 17 | 18 | {% include "mturk/admin/assignment_entry_info.html" %} 19 |
    20 |
    21 |
    22 | -------------------------------------------------------------------------------- /server/static/js/thumb_votes.js: -------------------------------------------------------------------------------- 1 | window.update_thumb_votes = function() { 2 | $('.thumb-votes').each(function() { 3 | var $this = $(this); 4 | $this.removeClass('thumb-votes'); 5 | var vals = $this.attr('data-votes').split(','); 6 | $this.text(''); 7 | 8 | total = 0; 9 | for (var i = 0; i < 2; i ++) { 10 | vals[i] = Number(vals[i]); 11 | total += vals[i]; 12 | } 13 | if (total === 0) { return; } 14 | 15 | w = []; 16 | for (var i = 0; i < 3; i ++) { 17 | w[i] = 100 * vals[i] / total; 18 | } 19 | 20 | $this.append('
    ' + vals[0] + '
    '); 22 | $this.append('
    ' + vals[1] + '
    '); 24 | }); 25 | }; 26 | -------------------------------------------------------------------------------- /scripts/install/install_all.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script completely sets up the OpenSurfaces database and server 4 | # 5 | # Usage: ./install_all.sh 6 | # 7 | 8 | # load configuration info 9 | set -e 10 | DIR="$( builtin cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )/.." && pwd )" 11 | source "$DIR/load_config.sh" 12 | 13 | echo "" 14 | echo "====================================================================" 15 | 16 | bash "${DIR}/scripts/install/install_packages.sh" 17 | bash "${DIR}/scripts/install/install_nodejs.sh" 18 | bash "${DIR}/scripts/install/install_python.sh" 19 | bash "${DIR}/scripts/install/install_memcached.sh" 20 | bash "${DIR}/scripts/install/install_server.sh" 21 | bash "${DIR}/scripts/install/install_nginx.sh" 22 | -------------------------------------------------------------------------------- /scripts/install/install_memcached.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Set up Memcached 3 | 4 | # find the scripts directory (note the /..) 5 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 6 | source $DIR/load_config.sh 7 | cd "$REPO_DIR" 8 | 9 | echo "Setting up memcached..." 10 | 11 | sed -r 's|^-m .*$|-m 256|g' /etc/memcached.conf | \ 12 | sed -r 's|^-I .*$|-I 4M|g' \ 13 | > tmp.conf 14 | 15 | if [[ $(grep -c '^-I' /etc/memcached.conf) -eq 0 ]]; then 16 | # '-I' not yet specified 17 | echo "" >> tmp.conf 18 | echo "# Maximum file size limit" >> tmp.conf 19 | echo "-I 4M" >> tmp.conf 20 | fi 21 | 22 | mv -f tmp.conf /etc/memcached.conf 23 | 24 | echo "Restarting memcached..." 25 | service memcached restart 26 | 27 | echo "$0: done" 28 | -------------------------------------------------------------------------------- /server/accounts/templates/account/password_reset_token_fail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load bootstrap_tags %} 6 | 7 | {% block head_title %}{% trans "Bad token" %}{% endblock %} 8 | {% block header %} 9 |
    10 |
    11 |

    Password reset

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |

    {% trans "Bad token" %}

    18 | {% url "account_password_reset" as url %} 19 |

    {% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a new password reset.{% endblocktrans %}

    20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /scripts/install/requirements-packages.txt: -------------------------------------------------------------------------------- 1 | build-essential 2 | cmake 3 | cython 4 | gfortran 5 | git-core 6 | libatlas-base-dev 7 | libatlas-dev 8 | libblas-dev 9 | libboost-dev 10 | libboost-filesystem-dev 11 | libboost-system-dev 12 | libboost-thread-dev 13 | libeigen3-dev 14 | libfftw3-dev 15 | libfreetype6-dev 16 | libjpeg-dev 17 | liblcms 18 | liblcms-dev 19 | liblcms-utils 20 | libmemcached-dev 21 | libpng-dev 22 | libpq-dev 23 | libxml2-dev 24 | libxslt-dev 25 | logrotate 26 | memcached 27 | nginx 28 | nodejs 29 | npm 30 | openssl 31 | postgresql-client 32 | python-dev 33 | python-pil 34 | python-opencv 35 | python-pip 36 | python-setuptools 37 | rabbitmq-server 38 | software-properties-common 39 | supervisor 40 | sudo 41 | swig 42 | vim 43 | zlib1g-dev 44 | -------------------------------------------------------------------------------- /server/accounts/templates/account/signup_closed.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load bootstrap_tags %} 6 | 7 | {% block head_title %}{% trans "Sign up closed" %}{% endblock %} 8 | {% block header %} 9 |
    10 |
    11 |

    Sign up closed

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |

    {% trans "Sign up closed" %}

    18 | {% if code %} 19 |

    {% blocktrans %}The code you provided was not accepted.{% endblocktrans %}

    20 | {% else %} 21 |

    {% blocktrans %}Sign up is closed to the general public.{% endblocktrans %}

    22 | {% endif %} 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /server/templates/entry_li.html: -------------------------------------------------------------------------------- 1 | {% if entry.content %} 2 | {% with entry.content as entry_content %} 3 | {% with entry_content.get_thumb_template as thumb_template %} 4 |
  • 5 | {% include thumb_template with entry=entry_content %} 6 | {% if thumb_template_extra %}{% include thumb_template_extra %}{% endif %} 7 |
  • 8 | {% endwith %} 9 | {% endwith %} 10 | {% else %} 11 |
  • 12 | {% if thumb_template %} 13 | {% include thumb_template %} 14 | {% else %} 15 | {% with entry.get_thumb_template as thumb_template %} 16 | {% include thumb_template %} 17 | {% endwith %} 18 | {% endif %} 19 |
  • 20 | {% endif %} 21 | -------------------------------------------------------------------------------- /server/templates/modal_form.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Show a django form in a modal dialog 3 | {% endcomment %} 4 | 5 | 17 | -------------------------------------------------------------------------------- /server/accounts/templates/account/settings.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load url from future %} 4 | {% load bootstrap_tags %} 5 | 6 | {% block head_title %}Account{% endblock %} 7 | {% block header %} 8 |
    9 |
    10 |

    Account settings

    11 |
    12 |
    13 | {% endblock %} 14 | 15 | {% block content %} 16 |
    17 | {% comment %}Account{% endcomment %} 18 | {% csrf_token %} 19 | {{ form|as_bootstrap }} 20 |
    21 | 22 |
    23 |
    24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /server/templates/modal_areyousure.html: -------------------------------------------------------------------------------- 1 | {# Ask 'are you sure?' #} 2 | 3 | 16 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/quality_segmentation_thumb.html: -------------------------------------------------------------------------------- 1 | {% with entry.task.get_entry_dict as task %} 2 |

    Body Part: {{ task.part_name }}

    3 |
    4 |
    5 | {% include "segmentation/segmentation.svg" with orig="True" %} 6 |
    7 |
    8 | {% with task.photo as photo %} 9 | 10 | 11 | 12 | {% endwith %} 13 |
    14 |
    15 | {% endwith %} 16 | -------------------------------------------------------------------------------- /server/home/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load cache %} 3 | 4 | {% block header %} 5 |
    6 |
    7 |

    OpenPose

    8 |

    The authors of the project.

    9 |

    Max Planck Institute for Intelligent Systems

    10 |
    11 |
    12 | {% endblock %} 13 | 14 | {% block content %} 15 | {% cache 3600 home-index-content %} 16 |
    17 |
    18 | 21 |
    22 | {% include "index_table.html" %} 23 |
    24 |
    25 |
    26 | 27 | {% endcache %} 28 | {% endblock content %} 29 | -------------------------------------------------------------------------------- /server/pose/templates/pose/parse_pose.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% for x, y in entry.pose %} 4 | 5 | {% endfor %} 6 | {% with entry.person.bounding_box as bb %} 7 | 8 | {% endwith %} 9 | 10 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: 20px; 9 | font-weight: bold; 10 | line-height: @baseLineHeight; 11 | color: @black; 12 | text-shadow: 0 1px 0 rgba(255,255,255,1); 13 | .opacity(20); 14 | &:hover { 15 | color: @black; 16 | text-decoration: none; 17 | cursor: pointer; 18 | .opacity(40); 19 | } 20 | } 21 | 22 | // Additional properties for button version 23 | // iOS requires the button element instead of an anchor tag. 24 | // If you want the anchor version, it requires `href="#"`. 25 | button.close { 26 | padding: 0; 27 | cursor: pointer; 28 | background: transparent; 29 | border: 0; 30 | -webkit-appearance: none; 31 | } -------------------------------------------------------------------------------- /server/templates/entry_scripts.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | UNUSED 3 | 4 | {% load compress %} 5 | 6 | 7 | {% compress js %} 8 | 9 | 10 | 11 | 12 | 13 | {% endcompress %} 14 | {% endcomment %} 15 | -------------------------------------------------------------------------------- /server/accounts/templates/account/signup_ajax.html: -------------------------------------------------------------------------------- 1 | {% spaceless %} 2 | {% load url from future %} 3 | {% load i18n %} 4 | {% load bootstrap_tags %} 5 | 6 |
    7 |
    8 | {% csrf_token %} 9 | {{ form|as_bootstrap }} 10 | {% if redirect_field_value %} 11 | 12 | {% endif %} 13 |
    14 | 17 |
    18 | 19 | {% include "account/signup_footer.html" %} 20 | {% endspaceless %} 21 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/accordion.less: -------------------------------------------------------------------------------- 1 | // 2 | // Accordion 3 | // -------------------------------------------------- 4 | 5 | 6 | // Parent container 7 | .accordion { 8 | margin-bottom: @baseLineHeight; 9 | } 10 | 11 | // Group == heading + body 12 | .accordion-group { 13 | margin-bottom: 2px; 14 | border: 1px solid #e5e5e5; 15 | .border-radius(@baseBorderRadius); 16 | } 17 | .accordion-heading { 18 | border-bottom: 0; 19 | } 20 | .accordion-heading .accordion-toggle { 21 | display: block; 22 | padding: 8px 15px; 23 | } 24 | 25 | // General toggle styles 26 | .accordion-toggle { 27 | cursor: pointer; 28 | } 29 | 30 | // Inner needs the styles because you can't animate properly with any styles on the element 31 | .accordion-inner { 32 | padding: 9px 15px; 33 | border-top: 1px solid #e5e5e5; 34 | } 35 | -------------------------------------------------------------------------------- /server/accounts/templates/account/delete.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap_tags %} 5 | 6 | {% block head_title %}Delete Account{% endblock %} 7 | 8 | {% block header %} 9 |
    10 |
    11 |

    Delete Account

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |

    Are you sure?

    18 | 19 |

    If you delete your account, your personal information will be expunged within {{ ACCOUNT_DELETION_EXPUNGE_HOURS }} hours.

    20 | 21 |
    22 | {% csrf_token %} 23 | 24 |
    25 | 26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /server/static/less/font-awesome/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}'); 7 | src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=@{FontAwesomeVersion}') format('embedded-opentype'), 8 | url('@{FontAwesomePath}/fontawesome-webfont.woff?v=@{FontAwesomeVersion}') format('woff'), 9 | url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=@{FontAwesomeVersion}') format('truetype'), 10 | url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=@{FontAwesomeVersion}') format('svg'); 11 | // src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /server/templates/modal_error.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | General modal dialog for error messages 3 | Usage: show_modal_error(message) to show error as modal 4 | hide_modal_error() to hide 5 | {% endcomment %} 6 | 7 | 20 | -------------------------------------------------------------------------------- /server/mturk/management/commands/mtbalance.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. describe:: ./manage.py mtbalance 3 | 4 | Print the current account balance. 5 | 6 | """ 7 | 8 | from django.conf import settings 9 | from django.core.management.base import BaseCommand 10 | 11 | from mturk.utils import get_mturk_connection 12 | 13 | 14 | class Command(BaseCommand): 15 | args = '' # ' ...' 16 | help = 'Prints the current balance' 17 | 18 | def handle(self, *args, **options): 19 | print >>self.stdout, 'MTurk info:' 20 | for key in dir(settings): 21 | if key.startswith('MTURK') or 'DEBUG' in key: 22 | print ' %s: %s' % (key, getattr(settings, key)) 23 | 24 | print '\nFetching account balance...' 25 | print 'Account balance:', get_mturk_connection().get_account_balance() 26 | -------------------------------------------------------------------------------- /server/templates/endless_list_curate.html: -------------------------------------------------------------------------------- 1 | {% extends "endless_list.html" %} 2 | 3 | {% block scripts %}{{ block.super }} 4 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /scripts/start_worker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Start a celery worker 4 | # 5 | 6 | DIR="$( builtin cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" 7 | source $DIR/load_config.sh 8 | 9 | concurrency=2 10 | if [ $# -ge 1 ]; then 11 | concurrency=$1 12 | fi 13 | 14 | user=$SERVER_USER 15 | if [ $# -ge 2 ]; then 16 | user=$2 17 | fi 18 | 19 | # TODO: run as a background process with a higher log level 20 | celery_cmd="builtin cd $SRC_DIR; env http_proxy=http://192.124.27.80:8080 https_proxy=http://192.124.27.80:8080 celery worker -B -A config -Q celery --loglevel=info --concurrency=$concurrency" 21 | 22 | set -x 23 | if [[ $USER == $user ]]; then 24 | rm -f $SRC_DIR/celerybeat-schedule 25 | "$celery_cmd" 26 | else 27 | sudo rm -f $SRC_DIR/celerybeat-schedule 28 | sudo -u $user bash -c "$celery_cmd" 29 | fi 30 | -------------------------------------------------------------------------------- /server/common/wavelets.py: -------------------------------------------------------------------------------- 1 | import pywt 2 | import numpy as np 3 | 4 | 5 | def compute_wavelet_feature_vector(image, wavelet='db6'): 6 | image_np = np.array(image) 7 | rgb = [image_np[:, :, i] for i in (0, 1, 2)] 8 | 9 | if isinstance(wavelet, basestring): 10 | wavelet = pywt.Wavelet(wavelet) 11 | 12 | feature_vector = [] 13 | for c in rgb: 14 | level = pywt.dwt_max_level(min(c.shape[0], c.shape[1]), wavelet.dec_len) 15 | levels = pywt.wavedec2(c, wavelet, mode='sym', level=level) 16 | for coeffs in levels: 17 | if not isinstance(coeffs, tuple): 18 | coeffs = (coeffs,) 19 | for w in coeffs: 20 | w_flat = w.flatten() 21 | feature_vector += [float(np.mean(w_flat)), float(np.std(w_flat))] 22 | 23 | return feature_vector 24 | -------------------------------------------------------------------------------- /server/home/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | from django.views.generic.base import RedirectView 3 | 4 | from home.views import index, publications, dump_csv, entry_ajax 5 | from common.utils import todo_view 6 | 7 | urlpatterns = patterns( 8 | '', 9 | url(r'^$', index, name='home'), 10 | 11 | url(r'^publications/$', 12 | RedirectView.as_view(url='opensurfaces/', permanent=True), 13 | name='publications'), 14 | 15 | url(r'^publications/(?P\w+)/$', 16 | publications, name='publications'), 17 | 18 | url(r'^todo/$', todo_view, name='todo'), 19 | 20 | url(r'^entry-ajax/(?P\w+)/(?P\w+)/$', 21 | entry_ajax, name='entry-ajax'), 22 | 23 | url(r'^dump-csv/(?P\w+)/(?P\w+).csv$', 24 | dump_csv, name='dump-csv'), 25 | ) 26 | -------------------------------------------------------------------------------- /server/pose/management/commands/fix_pose.py: -------------------------------------------------------------------------------- 1 | import os 2 | from optparse import make_option 3 | 4 | from clint.textui import progress 5 | 6 | import json 7 | 8 | from django.core.management.base import BaseCommand 9 | 10 | from pose.models import ParsePose 11 | 12 | import numpy as np 13 | 14 | class Command(BaseCommand): 15 | help = 'Fix scribbles to the new format.' 16 | 17 | def handle(self, *args, **options): 18 | poses = ParsePose.objects.all() 19 | 20 | for pose in progress.bar(poses): 21 | width = pose.photo.orig_width 22 | height = pose.photo.orig_height 23 | 24 | old_factor = float(max(width, height)) 25 | new_factor = float(height) 26 | 27 | pose.pose = (np.array(pose.pose) * old_factor / new_factor).tolist() 28 | 29 | pose.save() 30 | -------------------------------------------------------------------------------- /server/segmentation/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | from segmentation.views import segmentation, task_segment_body, task_segment_part, task_quality 3 | 4 | urlpatterns = patterns( 5 | '', 6 | 7 | url(r'^segmentation$', 8 | segmentation, name='segmentation.segmentation'), 9 | 10 | url(r'^mask$', 11 | task_segment_body, name='segmentation.task_segment_body'), 12 | 13 | url(r'^part$', 14 | task_segment_part, name='segmentation.task_segment_part'), 15 | 16 | url(r'^quality$', 17 | task_quality, name='segmentation.task_quality'), 18 | 19 | url(r'^mask/(?P\w+)$', 20 | task_segment_body), 21 | 22 | url(r'^part/(?P\w+)$', 23 | task_segment_part), 24 | 25 | url(r'^quality/(?P\w+)$', 26 | task_quality), 27 | ) 28 | -------------------------------------------------------------------------------- /server/photos/templates/photos/detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load compress %} 3 | {% load cache %} 4 | 5 | {% block content %} 6 | {% cache 600 photo-detail photo.id %} 7 | 10 | 11 | {# Pills navbar #} 12 | 22 | 23 | {# Photo sections: photo, shapes, vanishing points, etc #} 24 | {% for s in nav_sections %} 25 |
    26 | {% include s.template with nav_section=s.key %} 27 |
    28 | {% endfor %} 29 | 30 | {% endcache %} 31 | {% endblock content %} 32 | -------------------------------------------------------------------------------- /server/templates/modal_instructions.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | General modal dialog for modal instructions 3 | {% endcomment %} 4 | 5 | 24 | -------------------------------------------------------------------------------- /server/licenses/templates/license_inline.html: -------------------------------------------------------------------------------- 1 |

    2 | {% if license %} 3 | License: 4 | {% if license.url %} 5 | {{ license.name }} 6 | {% else %} 7 | {{ license.name }} 8 | {% endif %} 9 | {% else %} 10 | License: Unknown 11 | {% endif %} 12 | 13 | {% if photo.attribution_name %} 14 | {% if photo.attribution_url %} 15 | (Credit: {{ photo.attribution_name }}) 16 | {% else %} 17 | (Credit: {{ photo.attribution_name }}) 18 | {% endif %} 19 | {% elif photo.attribution_url %} 20 | (Credit: {{ photo.attribution_url }}) 21 | {% elif photo.flickr_user.display_name %} 22 | (Credit: {{ photo.flickr_user.display_name }}) 23 | {% endif %} 24 |

    25 | -------------------------------------------------------------------------------- /server/mturk/static/js/mturk/admin/example.coffee: -------------------------------------------------------------------------------- 1 | $(document).on('click', '.example-label', -> 2 | $t = $(@) 3 | id = $t.attr('data-id') 4 | good = $t.attr('data-good') 5 | console.log "#{id}: was #{good}" 6 | 7 | $.ajax('/mturk/admin/example/ajax/', 8 | type: 'POST' 9 | data: 10 | id: id 11 | good: if good == "True" then "False" else "True" 12 | success: => 13 | if good == 'True' 14 | $t.attr('data-good', 'False') 15 | $t.find('.label-success').hide() 16 | $t.find('.label-important').show() 17 | else 18 | $t.attr('data-good', 'True') 19 | $t.find('.label-success').show() 20 | $t.find('.label-important').hide() 21 | console.log 'toggle: success' 22 | error: => 23 | window.show_modal_error("Could not contact server") 24 | console.log 'toggle: error' 25 | ) 26 | ) 27 | -------------------------------------------------------------------------------- /server/templates/endless_list.html: -------------------------------------------------------------------------------- 1 | {% extends base_template %} 2 | {% load cache %} 3 | 4 | {% block content %} 5 | {% if header_text %} 6 | 10 | {% endif %} 11 | 12 |
    13 | 20 |
    21 | 22 |
    23 | {% include page_template %} 24 |
    25 | {% endblock content %} 26 | -------------------------------------------------------------------------------- /server/accounts/templates/account/password_change.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load bootstrap_tags %} 6 | 7 | {% block head_title %}{% trans "Change password" %}{% endblock %} 8 | {% block header %} 9 |
    10 |
    11 |

    Change password

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |
    18 | {% comment %}{% trans "Change password" %}{% endcomment %} 19 |
    20 | {% csrf_token %} 21 | {{ form|as_bootstrap }} 22 |
    23 | 24 |
    25 |
    26 |
    27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /docs/extending.rst: -------------------------------------------------------------------------------- 1 | Extending the system 2 | ==================== 3 | 4 | The OpenSurfaces system was designed to be a modular platform and can handle 5 | new pipelines of experiments. You can add new experiments that use 6 | OpenSurfaces data as input, or you can make a completely new pipeline. 7 | 8 | **Important:** If you want to create a new experiment, we do not recommend 9 | adding to any of the existing apps (``bsdfs``, ``shapes``, ``photos``, etc.). 10 | While there is nothing stopping you, you will find it difficult to properly 11 | organize your experiment, and you will be unable to incorporate any 12 | improvements that we publish. Instead, create new django apps and add your 13 | experiment there. Use ``scripts/create_app.sh `` to create a new app. 14 | 15 | .. .. toctree:: 16 | .. :maxdepth: 2 17 | .. 18 | .. add/part1 19 | .. add/part2 20 | .. add/part3 21 | .. add/part4 22 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | margin: @baseLineHeight 0; 8 | list-style: none; 9 | text-align: center; 10 | .clearfix(); 11 | } 12 | .pager li { 13 | display: inline; 14 | } 15 | .pager li > a, 16 | .pager li > span { 17 | display: inline-block; 18 | padding: 5px 14px; 19 | background-color: #fff; 20 | border: 1px solid #ddd; 21 | .border-radius(15px); 22 | } 23 | .pager li > a:hover { 24 | text-decoration: none; 25 | background-color: #f5f5f5; 26 | } 27 | .pager .next > a, 28 | .pager .next > span { 29 | float: right; 30 | } 31 | .pager .previous > a, 32 | .pager .previous > span { 33 | float: left; 34 | } 35 | .pager .disabled > a, 36 | .pager .disabled > a:hover, 37 | .pager .disabled > span { 38 | color: @grayLight; 39 | background-color: #fff; 40 | cursor: default; 41 | } -------------------------------------------------------------------------------- /server/accounts/templates/account/password_reset_token.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load bootstrap_tags %} 6 | 7 | {% block head_title %}{% trans "Set your new password" %}{% endblock %} 8 | {% block header %} 9 |
    10 |
    11 |

    Password reset

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |
    18 | {% trans "Set your new password" %} 19 |
    20 | {% csrf_token %} 21 | {{ form|as_bootstrap }} 22 |
    23 | 24 |
    25 |
    26 |
    27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /server/common/static/js/common/async_table.coffee: -------------------------------------------------------------------------------- 1 | $( -> 2 | table_attempt = 0 3 | 4 | # update the data after loading 5 | update_table = (callback) -> 6 | table_attempt += 1 7 | url = "#{window.table_url}?attempt=#{table_attempt}" 8 | console.log "updating table... (#{url})" 9 | $.ajax(url, 10 | type: 'GET' 11 | cache: false 12 | timeout: 600000 # 10 min timeout 13 | success: (data) -> 14 | console.log 'success' 15 | $('#table').html(data) 16 | callback?() 17 | error: (data) -> 18 | console.log 'error', data 19 | callback?() 20 | ) 21 | 22 | # continue checking for new table data 23 | check_table = -> 24 | if $('#table > .progress').length > 0 25 | console.log 'sleep 10 seconds...' 26 | setTimeout((-> update_table(check_table)), 10000) 27 | else 28 | console.log 'table loaded' 29 | 30 | update_table(check_table) 31 | ) 32 | -------------------------------------------------------------------------------- /server/templates/modal_give_up.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Give up on a task 3 | {% endcomment %} 4 | 5 | 20 | -------------------------------------------------------------------------------- /server/accounts/templates/account/logout.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | 6 | {% block head_title %}{% trans "Log out" %}{% endblock %} 7 | {% block header %} 8 |
    9 |
    10 |

    Log out

    11 |
    12 |
    13 | {% endblock %} 14 | 15 | {% block content %} 16 |
    17 |
    18 |
    19 | {% comment %}{% trans "Log out" %}{% endcomment %} 20 |
    21 | {% csrf_token %} 22 |

    {% trans "Are you sure?" %}

    23 | 24 |
    25 |
    26 |
    27 |
    28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /server/common/management/commands/create_dump_script.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | from django.contrib.contenttypes.models import ContentType 3 | 4 | class Command(BaseCommand): 5 | args = '' 6 | help = 'Helper to export CSV data' 7 | 8 | def handle(self, *args, **options): 9 | outdir = args[0] if len(args) > 0 else '.' 10 | 11 | print '#!/bin/bash' 12 | print 'set -x' 13 | print 'mkdir -p %s' % outdir 14 | 15 | for ct in ContentType.objects.all(): 16 | #model = ct.model_class() 17 | if ct.app_label in ['photos', 'shapes', 'mturk', 'licenses', 'contenttypes']: 18 | if ct.model not in ['shapeimagesample', 'pendingcontent', 'shapenormallabel', 'shapebsdflabel_mf']: 19 | print './manage.py dumpdata --format json --indent 1 %s.%s > %s/%s.%s.json' % ( 20 | ct.app_label, ct.model, outdir, ct.app_label, ct.model) 21 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/experiments/quality_segmentation_inst_content.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/experiments/filter_content_inst_content.html" %} 2 | 3 | {% block instructions_content_text %} 4 |

    You will be shown a collection of images with a segmentation. Click on the 5 | segmentations that align with the central person.

    6 | 7 | 13 | 14 |

    Do select these:

    15 |
      16 |
    • A segmentation that has only one person with nothing else inside.
    • 17 |
    18 | 19 |

    Do not select these:

    20 |
      21 |
    • A segmentation that has more than the central person inside.
    • 22 |
    23 | 24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /server/mturk/static/js/mturk/admin/submission.coffee: -------------------------------------------------------------------------------- 1 | $('#content-container').on('click', '.action-show-reject', -> 2 | $(@).hide() 3 | $(@).parent('.admin-actions').find('.admin-actions-reject').show() 4 | ) 5 | 6 | $('#content-container').on('click', '.action-review', -> 7 | parent = $(@).parents('.admin-actions')[0] 8 | assignment_id = $(parent).attr('data-assignment') 9 | action = $(@).attr('data-action') 10 | message = $(parent).find(".feedback-#{action}").val() 11 | 12 | $.ajax( 13 | type: 'POST', 14 | url: window.location, 15 | dataType: 'json' 16 | data: 17 | assignment_id: assignment_id 18 | action: action 19 | message: message 20 | success: (data, status) -> 21 | if data.result == 'success' 22 | $(parent).html("

    Success

    ") 23 | else 24 | window.show_modal_error("Error contacting server (#{data})") 25 | error: -> 26 | window.show_modal_error("Error contacting server") 27 | ) 28 | ) 29 | -------------------------------------------------------------------------------- /server/common/cluster.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def floodfill_cluster(points, compare, min_size=1): 5 | raise NotImplementedError("TODO: test this function") 6 | 7 | N = len(points) 8 | visited = [False] * N 9 | clusters = [] 10 | 11 | for seed_idx in xrange(N): 12 | if visited[seed_idx]: 13 | continue 14 | 15 | visited[seed_idx] = True 16 | seed = points[seed_idx] 17 | stack = [seed] 18 | cluster = [seed] 19 | 20 | while stack: 21 | p = stack.pop() 22 | 23 | for idx in xrange(N): 24 | if visited[idx]: 25 | continue 26 | 27 | q = points[idx] 28 | if compare(p, q): 29 | stack.append(q) 30 | cluster.append(q) 31 | visited[idx] = True 32 | 33 | if len(cluster) >= min_size: 34 | clusters.append(cluster) 35 | 36 | return clusters 37 | -------------------------------------------------------------------------------- /server/accounts/templates/admin_shell.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header %} 4 |
    5 |
    6 |

    Admin Shell

    7 |
    8 |
    9 | {% endblock %} 10 | 11 | {% block content %} 12 |
    13 |
    14 |

    DANGER ZONE

    15 |

    Commands that write to the database are permanent and modify live production data.

    16 |

    There are no safeguards or undo, only revert from the last backup.

    17 |
    18 |

    Python sessions are separated into "notebooks" which persist on the server. The same notebooks are shared across all admin users.

    19 |

    Password: {{ ADMIN_SHELL_PASSWORD }} (necessary since the shell is a separate process).

    20 |
    21 | 22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /server/accounts/templates/account/login_ajax.html: -------------------------------------------------------------------------------- 1 | {% spaceless %} 2 | {% load url from future %} 3 | {% load i18n %} 4 | {% load bootstrap_tags %} 5 | 6 |
    7 | {% csrf_token %} 8 | {{ form|as_bootstrap }} 9 | {% if redirect_field_value %} 10 | 11 | {% endif %} 12 |

    {% trans "Forgot your password?" %}

    13 | {% comment %} 14 |

    {% trans "Don't have an account?" %}

    15 | {% endcomment %} 16 | 19 |
    20 | {% endspaceless %} 21 | -------------------------------------------------------------------------------- /server/static/js/csrf.js: -------------------------------------------------------------------------------- 1 | // see https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ 2 | function getCookie(name) { 3 | var cookieValue = null; 4 | if (document.cookie && document.cookie != '') { 5 | var cookies = document.cookie.split(';'); 6 | for (var i = 0; i < cookies.length; i++) { 7 | var cookie = jQuery.trim(cookies[i]); 8 | if (cookie.substring(0, name.length + 1) == (name + '=')) { 9 | cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 10 | break; 11 | } 12 | } 13 | } 14 | return cookieValue; 15 | } 16 | var csrftoken = getCookie('csrftoken'); 17 | function csrfSafeMethod(method) { 18 | return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 19 | } 20 | $.ajaxSetup({ 21 | crossDomain: false, 22 | beforeSend: function(xhr, settings) { 23 | if (!csrfSafeMethod(settings.type)) { 24 | xhr.setRequestHeader("X-CSRFToken", csrftoken); 25 | } 26 | } 27 | }); 28 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/feedback.html: -------------------------------------------------------------------------------- 1 | {% extends "base_sidenav.html" %} 2 | {% load compress %} 3 | 4 | {% block header %} 5 |
    6 |
    7 |

    Worker Feedback

    8 |
    9 |
    10 | {% endblock %} 11 | 12 | {% block sidenav %} 13 |
    14 | 22 |
    23 | {% endblock %} 24 | 25 | {% block content %} 26 | {% include page_template %} 27 | {% endblock content %} 28 | 29 | {% block scripts %}{{ block.super }} 30 | 31 | {% compress js %} 32 | 33 | {% endcompress %} 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /scripts/install/install_nodejs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Install all the packages used by the server 4 | # 5 | 6 | # find the scripts directory (note the /..) 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 8 | 9 | source $DIR/load_config.sh 10 | cd "$REPO_DIR" 11 | 12 | ######################### 13 | 14 | echo "Installing node.js..." 15 | 16 | # fix npm registry 17 | echo "Uninstall old node" 18 | apt-get remove -y nodejs npm 19 | rm -f /usr/bin/coffee /usr/local/bin/coffee 20 | rm -f /usr/bin/lessc /usr/local/bin/lessc 21 | 22 | echo "Install newest node" 23 | #sudo add-apt-repository ppa:chris-lea/node.js 24 | add-apt-repository -y ppa:richarvey/nodejs 25 | apt-get update -y 26 | apt-get install -y nodejs npm 27 | 28 | nodejs -v 29 | 30 | # some naming issues 31 | ln -s /usr/bin/nodejs /usr/bin/node 32 | 33 | npm config set registry http://registry.npmjs.org/ 34 | echo "Install coffeescript" 35 | npm install -g coffee-script 36 | echo "Install less" 37 | npm install -g less 38 | 39 | ######################### 40 | 41 | echo "$0: done" 42 | -------------------------------------------------------------------------------- /server/segmentation/static/js/segmentation/experiments/scribble_ui.coffee: -------------------------------------------------------------------------------- 1 | # UI for one scribble 2 | class ScribbleUI 3 | constructor: (@id, @scribble, @stage, @stage_group) -> 4 | @line = null 5 | 6 | @stroke_scale = 1.0 / @stage.get_zoom_factor() 7 | 8 | update: (ui, redraw=true) -> 9 | @add_line() 10 | if redraw 11 | @stage_group.draw() 12 | 13 | add_line: -> 14 | width = 5 * @stroke_scale 15 | if @line? 16 | @line.setPoints(@scribble.points) 17 | @line.setStrokeWidth(width) 18 | else 19 | color = if @scribble.is_foreground then "#00F" else "#0F0" 20 | 21 | @line = new Kinetic.Line( 22 | points: @scribble.points, opacity: 0, stroke: color, 23 | strokeWidth: width, lineJoin: "round") 24 | @stage_group.add(@line, 0.5) 25 | 26 | remove_all: -> @remove_line() 27 | 28 | remove_line: -> @stage_group.remove(@line); @line = null 29 | 30 | # update stroke scale 31 | update_zoom: (ui, inv_zoom_factor, redraw=true) -> 32 | @stroke_scale = inv_zoom_factor 33 | @update(ui, redraw) 34 | -------------------------------------------------------------------------------- /server/segmentation/templates/segmentation/segmentation.svg: -------------------------------------------------------------------------------- 1 | {% with task.photo as photo %} 2 | 3 | 4 | {% with entry.task.person.bounding_box as bb %} 5 | 6 | {% endwith %} 7 | {% for x, y in task.parse_pose %} 8 | 9 | {% endfor %} 10 | 11 | {% with entry.scribbles_svg_path as path_d %} 12 | 13 | 14 | {% endwith %} 15 | 16 | {% endwith %} 17 | -------------------------------------------------------------------------------- /server/common/static/js/common/active_timer.coffee: -------------------------------------------------------------------------------- 1 | # Timer that stops counting when the user leaves the window 2 | class ActiveTimer 3 | constructor: -> 4 | @started = false 5 | @total_start = null 6 | @active_start = null 7 | @partial_time_ms = 0 8 | 9 | $(window).on('focus', => 10 | if @started 11 | @active_start = Date.now() 12 | ) 13 | 14 | $(window).on('blur', => 15 | if @started and @active_start? 16 | @partial_time_ms += Date.now() - @active_start 17 | @active_start = null 18 | ) 19 | 20 | start: -> 21 | @total_start = Date.now() 22 | @active_start = Date.now() 23 | @partial_time_ms = 0 24 | @started = true 25 | 26 | ensure_started: -> 27 | if not @started then @start() 28 | 29 | time_ms: -> 30 | if @started 31 | Date.now() - @total_start 32 | else 33 | 0 34 | 35 | time_active_ms: -> 36 | if @started 37 | if @active_start? 38 | @partial_time_ms + (Date.now() - @active_start) 39 | else 40 | @partial_time_ms 41 | else 42 | 0 43 | -------------------------------------------------------------------------------- /scripts/install/install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Install all the packages used by the server 4 | # 5 | 6 | # find the scripts directory (note the /..) 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 8 | 9 | source $DIR/load_config.sh 10 | cd "$REPO_DIR" 11 | 12 | set -e 13 | 14 | ######################### 15 | 16 | echo "Installing packages..." 17 | 18 | # install ubuntu packages 19 | apt-get update -y 20 | apt-get install -y $(cat $DIR/install/requirements-packages.txt) 21 | 22 | # install dependencies for numpy/scipy 23 | apt-get build-dep -y python-numpy python-scipy 24 | 25 | # make sure the image libraries are in /usr/lib 26 | [[ -f /usr/lib/libfreetype.so ]] || ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ 27 | [[ -f /usr/lib/libjpeg.so ]] || ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ 28 | [[ -f /usr/lib/libz.so ]] || ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/ 29 | [[ -f /usr/lib/liblcms.so ]] || ln -s /usr/lib/`uname -i`-linux-gnu/liblcms.so /usr/lib/ 30 | 31 | ######################### 32 | 33 | echo "$0: done" 34 | -------------------------------------------------------------------------------- /server/mturk/management/commands/mtcubam.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. describe:: ./manage.py mtcubam 3 | 4 | Update all labels for the experiments that use CUBAM to aggregate binary 5 | answers. Since CUBAM is expensive and can take hours to run if you have 6 | millions of labels, it only runs on experiments thar are marked as "dirty". 7 | 8 | To force a re-run, mark the corresponding :class:`mturk.models.Experiment` 9 | instance to be dirty by running the following in a Python shell (you can 10 | start one with ``./manage.py shell_plus``): 11 | 12 | .. code-block:: py 13 | 14 | Experiment.objects.filter(slug='SLUG').update(cubam_dirty=True) 15 | 16 | where ``SLUG`` is the human-readable ID for your project. 17 | """ 18 | 19 | from django.core.management.base import BaseCommand 20 | 21 | 22 | class Command(BaseCommand): 23 | args = '' 24 | help = 'Updates labels using the CUBAM library' 25 | 26 | def handle(self, *args, **options): 27 | from mturk.tasks import mturk_update_votes_cubam_task 28 | mturk_update_votes_cubam_task(show_progress=True) 29 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/webgl_compatible_scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 34 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | *overflow: visible; 14 | zoom: 1; 15 | } 16 | 17 | // Proper spacing between instances of .media 18 | .media, 19 | .media .media { 20 | margin-top: 15px; 21 | } 22 | .media:first-child { 23 | margin-top: 0; 24 | } 25 | 26 | // For images and videos, set to block 27 | .media-object { 28 | display: block; 29 | } 30 | 31 | // Reset margins on headings for tighter default spacing 32 | .media-heading { 33 | margin: 0 0 5px; 34 | } 35 | 36 | 37 | // Media image alignment 38 | // ------------------------- 39 | 40 | .media .pull-left { 41 | margin-right: 10px; 42 | } 43 | .media .pull-right { 44 | margin-left: 10px; 45 | } 46 | 47 | 48 | // Media list variation 49 | // ------------------------- 50 | 51 | // Undo default ul/ol styles 52 | .media-list { 53 | margin-left: 0; 54 | list-style: none; 55 | } 56 | -------------------------------------------------------------------------------- /scripts/install/install_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Set up the server config. 4 | # 5 | 6 | # find the scripts directory (note the /..) 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | SECRET_KEY=$(< /dev/urandom tr -dc A-Z-a-z-0-9 | head -c64) 12 | 13 | echo "Filling in Django settings..." 14 | 15 | # Set up settings_local.py 16 | sed -e "s|'ADMIN_NAME'|'$ADMIN_NAME'|g" \ 17 | -e "s|'ADMIN_EMAIL'|'$ADMIN_EMAIL'|g" \ 18 | -e "s|'DB_NAME'|'$DB_NAME'|g" \ 19 | -e "s|'DB_USER'|'$DB_USER'|g" \ 20 | -e "s|'DB_PASS'|'$DB_PASS'|g" \ 21 | -e "s|'DB_HOST'|'$DB_HOST'|g" \ 22 | -e "s|'DB_PORT'|'$DB_PORT'|g" \ 23 | -e "s|'SRC_DIR'|'$SRC_DIR'|g" \ 24 | -e "s|'DATA_DIR'|'$DATA_DIR'|g" \ 25 | -e "s|'PROJECT_NAME'|'$PROJECT_NAME'|g" \ 26 | -e "s|'SERVER_NAME'|'$SERVER_NAME'|g" \ 27 | -e "s|'SERVER_IP'|'$SERVER_IP'|g" \ 28 | -e "s|'TIME_ZONE'|'$TIME_ZONE'|g" \ 29 | -e "s|'SECRET_KEY'|'$SECRET_KEY'|g" \ 30 | -e "s|'APP_URL'|'$APP_URL'|g" \ 31 | $SRC_DIR/config/settings_local_template.py > \ 32 | $SRC_DIR/config/settings_local.py 33 | 34 | echo "$0: done" 35 | -------------------------------------------------------------------------------- /server/mturk/static/js/mturk/admin/feedback.coffee: -------------------------------------------------------------------------------- 1 | on_items_added = -> 2 | $('.feedback-json').each( -> 3 | t = $(@) 4 | t.removeClass('feedback-json') 5 | f = JSON.parse(t.text()) 6 | t.text('') 7 | 8 | demog_fields = ['age', 'gender', 'language', 'city', 'country'] 9 | html = (f[k] for k in demog_fields when f[k]?).join(', ') 10 | 11 | if html != '' 12 | t.append($("

    Demographics:

    ")) 13 | t.append($("

    #{html}

    ")) 14 | 15 | if f.thoughts? 16 | t.append($('

    What did you think of the task?

    ')) 17 | t.append($("

    #{f.thoughts}

    ")) 18 | 19 | if f.understand? 20 | t.append($('

    What parts didn\'t you understand?

    ')) 21 | t.append($("

    #{f.understand}

    ")) 22 | 23 | if f.other? 24 | t.append($('

    Any other feeedback or suggestions?

    ')) 25 | t.append($("

    #{f.other}

    ")) 26 | 27 | t.css('display', '') 28 | ) 29 | 30 | $(document).on('items-added', on_items_added) 31 | $( -> on_items_added()) 32 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/base_responsive.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block head_title %}MTurk{% if slug %} ({{ slug }}){% endif %}{% endblock %} 3 | 4 | {% block css %}{{ block.super }} 5 | 6 | 7 | {% endblock %} 8 | 9 | {% block navbar %}{% endblock %} 10 | {% block header %}{% endblock %} 11 | {% block footer %}{% endblock %} 12 | {% block subnav %}{% endblock %} 13 | 14 | {% block modals %} 15 | {% include "modal_instructions.html" %} 16 | {% include "modal_loading.html" %} 17 | {% include "modal_error.html" %} 18 | {% include "modal_areyousure.html" %} 19 | {% include "modal_give_up.html" %} 20 | {% include "modal_feedback.html" %} 21 | {% endblock %} 22 | 23 | {% block scripts %} 24 | 33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /server/photos/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from imagekit.admin import AdminThumbnail 4 | from common.admin import AutoUserMixin 5 | 6 | from photos.models import FlickrUser, PhotoDataset, Photo 7 | 8 | admin.site.register(FlickrUser) 9 | admin.site.register(PhotoDataset) 10 | 11 | class PhotoAdmin(AutoUserMixin, admin.ModelAdmin): 12 | fieldsets = [ 13 | (None, { 14 | 'fields': ['added', 'user', 'image_orig', 'admin_thumb_span6', 'aspect_ratio', 'dataset', 15 | 'description', 'exif', 16 | 'flickr_user', 'flickr_id'] 17 | }), 18 | ] 19 | 20 | # fields 21 | readonly_fields = ['added', 'admin_thumb_span6'] 22 | list_display = ['user', 'admin_thumb_span1', 'dataset', 'added'] 23 | 24 | # field display 25 | list_filter = ['added'] 26 | search_fields = ['user', 'description'] 27 | date_hierarchy = 'added' 28 | 29 | admin_thumb_span6 = AdminThumbnail(image_field='image_200') 30 | admin_thumb_span1 = AdminThumbnail(image_field='image_200') 31 | 32 | inlines = [] 33 | 34 | admin.site.register(Photo, PhotoAdmin) 35 | -------------------------------------------------------------------------------- /server/static/less/bootstrap/scaffolding.less: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // -------------------------------------------------- 4 | 5 | 6 | // Body reset 7 | // ------------------------- 8 | 9 | body { 10 | margin: 0; 11 | font-family: @baseFontFamily; 12 | font-size: @baseFontSize; 13 | line-height: @baseLineHeight; 14 | color: @textColor; 15 | background-color: @bodyBackground; 16 | } 17 | 18 | 19 | // Links 20 | // ------------------------- 21 | 22 | a { 23 | color: @linkColor; 24 | text-decoration: none; 25 | } 26 | a:hover { 27 | color: @linkColorHover; 28 | text-decoration: underline; 29 | } 30 | 31 | 32 | // Images 33 | // ------------------------- 34 | 35 | // Rounded corners 36 | .img-rounded { 37 | .border-radius(6px); 38 | } 39 | 40 | // Add polaroid-esque trim 41 | .img-polaroid { 42 | padding: 4px; 43 | background-color: #fff; 44 | border: 1px solid #ccc; 45 | border: 1px solid rgba(0,0,0,.2); 46 | .box-shadow(0 1px 3px rgba(0,0,0,.1)); 47 | } 48 | 49 | // Perfect circle 50 | .img-circle { 51 | .border-radius(500px); // crank the border-radius so it works with most reasonably sized images 52 | } 53 | -------------------------------------------------------------------------------- /server/accounts/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from captcha.fields import CaptchaField 3 | import account.forms 4 | 5 | 6 | class SignupForm(account.forms.SignupForm): 7 | 8 | captcha = CaptchaField() 9 | 10 | def clean_username(self): 11 | username = self.cleaned_data['username'] 12 | if username.startswith('mturk_'): 13 | raise forms.ValidationError("Usernames that start with 'mturk_'are reserved. Please choose another.") 14 | if username.startswith('mt_'): 15 | raise forms.ValidationError("Usernames that start with 'mt_'are reserved. Please choose another.") 16 | return super(SignupForm, self).clean_username() 17 | 18 | 19 | class LoginUsernameOrEmailForm(account.forms.LoginForm): 20 | 21 | username = forms.CharField(label="Username or Email") 22 | authentication_fail_message = "The username and/or password you specified are not correct." 23 | identifier_field = "username" 24 | 25 | def __init__(self, *args, **kwargs): 26 | super(LoginUsernameOrEmailForm, self).__init__(*args, **kwargs) 27 | self.fields.keyOrder = ["username", "password", "remember"] 28 | -------------------------------------------------------------------------------- /server/mturk/management/commands/mtconsume.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. describe:: ./manage.py mtconsume 3 | 4 | Dispatch all pending content to the marketplace and create new HITs. 5 | 6 | With our MTurk platform, tasks are dispatched in a two-step process. 7 | 8 | First, :class:`mturk.models.PendingContent` objects are created for each 9 | object that might be labeled (e.g. a photo). ``PendingContent`` instances 10 | track the priority of each object, what has been scheduled, and how many 11 | tasks need to be put on MTurk. 12 | 13 | Second, ``mtconsume`` searches for ``PendingContent`` instances that have 14 | not yet been scheduled on MTurk (or that need more responses) and then 15 | creates HITs (stored locally as :class:`models.mturk.MtHit` instances). 16 | """ 17 | 18 | from django.core.management.base import BaseCommand 19 | 20 | 21 | class Command(BaseCommand): 22 | args = '' 23 | help = 'Manually run an instance of consume_pending_objects_task' 24 | 25 | def handle(self, *args, **options): 26 | from mturk.tasks import consume_pending_objects_task 27 | consume_pending_objects_task(show_progress=True) 28 | -------------------------------------------------------------------------------- /server/accounts/templates/account/password_reset_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load account_tags %} 6 | 7 | {% block head_title %}{% trans "Password reset sent" %}{% endblock %} 8 | {% block header %} 9 |
    10 |
    11 |

    Password reset

    12 |
    13 |
    14 | {% endblock %} 15 | 16 | {% block content %} 17 |

    {% trans "Password reset sent" %}

    18 | {% if not resend %} 19 |

    {% blocktrans %}We have sent you an email. If you do not receive it within a few minutes, please try resending.{% endblocktrans %}

    20 |
    21 | {% csrf_token %} 22 | {% for field in form %} 23 | {{ field.as_hidden }} 24 | {% endfor %} 25 | 26 |
    27 | {% else %} 28 |

    {% blocktrans %}We have resent the password email.{% endblocktrans %}

    29 | {% endif %} 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /server/photos/templates/photos/by_dataset.html: -------------------------------------------------------------------------------- 1 | {% extends "base_sidenav.html" %} 2 | {% load cache %} 3 | 4 | {% block header %} 5 |
    6 |
    7 |

    Datasets

    8 |
    9 |
    10 | {% endblock %} 11 | 12 | {% block sidenav %} 13 |
    14 | 19 |
    20 | {% endblock %} 21 | 22 | {% block content %} 23 | 35 | 36 | {% cache 300 content request.get_full_path %} 37 | {% include page_template %} 38 | {% endcache %} 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /server/photos/templates/photos/experiments/quality_scene_inst.html: -------------------------------------------------------------------------------- 1 | {% extends "mturk/base_responsive.html" %} 2 | {% load humanize %} 3 | 4 | {% block content %} 5 |
    6 | 7 | 10 | 11 |

    Occasionally there might be adult or disturbing content. Please do not click on these images.

    12 | 13 |

    We are looking for unedited color photographs of various indoor scenes.

    14 | 15 |

    To be more specific, please exclude (do not select) the following:

    16 |
      17 |
    • Rotated photos (overhead view is fine)
    • 18 |
    • Black-and-white or sepia-tone photos
    • 19 |
    • Photos with special effects or text on top
    • 20 |
    • Very blurry photos
    • 21 |
    • Rooms under construction
    • 22 |
    • Toy models of a scene
    • 23 |
    • Naked people or sexual poses
    • 24 |
    • Pictures of mostly people, where you can't really see the scene.
    • 25 |
    26 | 27 |

    If you cannot tell, don't select the photo. Please do not guess.

    28 | 29 | {% include instructions %} 30 | 31 | {% endblock content %} 32 | -------------------------------------------------------------------------------- /server/common/http.py: -------------------------------------------------------------------------------- 1 | from urlparse import urlparse 2 | import requests 3 | 4 | 5 | def download(url, binary=False, referer=None): 6 | """ Download a URL with a fake User-Agent string """ 7 | 8 | if not url: 9 | print "Warning: empty URL" 10 | return None 11 | 12 | # spoof some headers to make us seem ore like a browser 13 | headers = { 14 | 'Host': urlparse(url).netloc, 15 | 'User-Agent': ( 16 | 'Mozilla/5.0 (X11; Linux x86_64) ' 17 | 'AppleWebKit/537.36 (KHTML, like Gecko) ' 18 | 'Chrome/34.0.1847.14 ' 19 | 'Safari/537.36' 20 | ), 21 | 'DNT': '1', 22 | 'Cache-Control': 'max-age=0', 23 | 'Accept-Language': 'en-US,en;q=0.8', 24 | } 25 | 26 | if referer: 27 | headers['Referer'] = referer 28 | 29 | r = requests.get(url, headers=headers) 30 | if r.status_code == 200: 31 | #print "download success: %s" % url 32 | if binary: 33 | return r.content 34 | else: 35 | return r.text 36 | else: 37 | #print "download fail: (status %s) %s" % (r.status_code, url) 38 | return None 39 | -------------------------------------------------------------------------------- /server/static/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | OpenSurfaces - A Richly Annotated Catalog of Surface Appearance 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
    18 |
    19 |

    500!

    20 |

    Sorry, there was an internal server error.

    21 |

    Try refreshing the page.

    22 |
    23 |
    24 | 25 | 26 | -------------------------------------------------------------------------------- /server/accounts/templates/account/email_confirm.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | 6 | {% block head_title %}{% trans "Confirm Email" %}{% endblock %} 7 | {% block header %} 8 |
    9 |
    10 |

    Confirm Email

    11 |
    12 |
    13 | {% endblock %} 14 | 15 | {% block content %} 16 |
    17 |
    18 |
    19 | {% comment %}{% trans "Confirm Email" %}{% endcomment %} 20 |
    21 | {% csrf_token %} 22 |

    {% blocktrans with email=confirmation.email_address.email %}Confirm email address {{ email }}?{% endblocktrans %}

    23 |
    24 | 25 |
    26 |
    27 |
    28 |
    29 |
    30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /server/home/templates/index_table.html: -------------------------------------------------------------------------------- 1 | {% load humanize %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% if num_assignments_all %} 9 | 10 | 11 | 12 | 13 | 14 | {% endif %} 15 | {% if num_users_all %} 16 | 17 | 18 | 19 | 20 | 21 | {% endif %} 22 | {% if num_hours_all %} 23 | 24 | 25 | 26 | 27 | 28 | {% endif %} 29 | {% if num_submitted_all %} 30 | 31 | 32 | 33 | 34 | 35 | {% endif %} 36 | 37 |
    GoodAll
    MTurk Assignments{{ num_assignments_good|intcomma }}{{ num_assignments_all|intcomma }}
    MTurk Users{{ num_users_good|intcomma }}{{ num_users_all|intcomma }}
    Hours of WorkN/A{{ num_hours_all|intcomma }}
    Submitted ItemsN/A{{ num_submitted_all|intcomma }}
    38 | -------------------------------------------------------------------------------- /scripts/make_private.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Kills the public nginx/gunicorn server, if running. 4 | # 5 | # This does the opposite of make_public.sh. 6 | # 7 | 8 | # Load config 9 | DIR="$( builtin cd "$( dirname "$( readlink -f "${BASH_SOURCE[0]}" )" )" && pwd )" 10 | source "$DIR/load_config.sh" 11 | 12 | if [[ -f /etc/nginx/sites-enabled/$PROJECT_NAME ]]; then 13 | echo "Disabling nginx site..." 14 | 15 | sudo rm -f /etc/nginx/sites-enabled/$PROJECT_NAME 16 | sudo service nginx restart 17 | else 18 | echo "nginx already disabled" 19 | fi 20 | 21 | if [[ -f /etc/logrotate.d/nginx-$PROJECT_NAME ]]; then 22 | echo "Deleting nginx logrotate config..." 23 | 24 | sudo rm -f /etc/logrotate.d/nginx-$PROJECT_NAME 25 | else 26 | echo "nginx logrotate already disabled" 27 | fi 28 | 29 | if [[ -f /etc/supervisor/conf.d/$PROJECT_NAME.conf ]]; then 30 | echo "Shutting down gunicorn..." 31 | 32 | sudo supervisorctl stop $PROJECT_NAME 33 | sudo supervisorctl remove $PROJECT_NAME 34 | 35 | sudo rm -f /etc/supervisor/conf.d/$PROJECT_NAME.conf 36 | sudo supervisorctl reread 37 | sudo supervisorctl update 38 | else 39 | echo "gunicorn already disabled" 40 | fi 41 | 42 | sudo rm -f $REPO_DIR/run/gunicorn.sock 43 | -------------------------------------------------------------------------------- /server/common/static/js/common/hacks.coffee: -------------------------------------------------------------------------------- 1 | ## BROWSER HACKS 2 | 3 | # Browser: IE 4 | # Problem: doesn't implement vector-effect: non-scaling-stroke 5 | # Hack solution: replace with stroke-width: 0.2% 6 | if $.browser.msie 7 | console.log 'detected: IE' 8 | do -> 9 | fix_ie = -> 10 | $('.nss').css('vector-effect', '') \ 11 | .css('stroke-width', '0.2%') \ 12 | .css('stroke-linecap', 'round') 13 | fix_ie() 14 | $(document).on('items-added', fix_ie) 15 | if Number($.browser.version) < 10 16 | $('#outdated-browser-alert').show() 17 | 18 | # Browser: Firefox and IE 19 | # Problem: inline SVG height doesn't scale properly 20 | # Hack solution: store aspect in tag and manually enforce aspect ratio 21 | if not ($.browser.webkit or $.browser.opera) 22 | fix_aspect = -> 23 | $('svg.fix-aspect').each( -> 24 | t = $(this) 25 | aspect = t.attr('data-aspect') 26 | #console.log aspect 27 | if aspect? 28 | t.height(t.width() / aspect) 29 | ) 30 | fix_aspect() 31 | $(document).on('items-added', fix_aspect) 32 | $(window).on('resize', fix_aspect) 33 | 34 | # to show if not webkit 35 | if not $.browser.webkit 36 | $('.if-not-webkit').show() 37 | -------------------------------------------------------------------------------- /scripts/init_db.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script sets up directories and fixes permissions 4 | # 5 | 6 | # find the scripts directory 7 | DIR="$( builtin cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 8 | source $DIR/load_config.sh 9 | cd "$REPO_DIR" 10 | 11 | echo "CREATE USER \"${DB_USER}\" WITH LOGIN PASSWORD '${DB_PASS}'" | psql -U postgres -h "${DB_HOST}" -p "${DB_PORT}" -U postgres 12 | createdb -U postgres -h "${DB_HOST}" -p "${DB_PORT}" --owner=${DB_USER} --encoding=UTF8 ${DB_NAME} 13 | 14 | python ./server/manage.py syncdb --noinput 15 | python ./server/manage.py migrate menu 16 | python ./server/manage.py migrate dashboard 17 | python ./server/manage.py migrate django_extensions 18 | python ./server/manage.py migrate captcha 19 | python ./server/manage.py migrate common 20 | python ./server/manage.py migrate accounts 21 | python ./server/manage.py migrate licenses 22 | python ./server/manage.py migrate mturk 23 | python ./server/manage.py migrate photos 24 | python ./server/manage.py migrate segmentation 0002 25 | python ./server/manage.py migrate pose 26 | python ./server/manage.py migrate segmentation 27 | 28 | python ./server/manage.py createsuperuser 29 | python ./server/manage.py createcachetable db-cache 30 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/example.html: -------------------------------------------------------------------------------- 1 | {% extends "base_sidenav.html" %} 2 | {% load compress %} 3 | 4 | {% block header %} 5 |
    6 |
    7 |

    Experiment Examples

    8 |
    9 |
    10 | {% endblock %} 11 | 12 | {% block sidenav %} 13 |
    14 | 22 |
    23 | {% endblock %} 24 | 25 | {% block content %} 26 |

    These items are displayed as examples in the instructions.

    27 |

    Click on a label to toggle its status.

    28 | {% include page_template %} 29 | {% endblock %} 30 | 31 | {% block scripts %}{{ block.super }} 32 | {% include "entry_scripts.html" %} 33 | 34 | {% compress js %} 35 | 36 | {% endcompress %} 37 | {% endblock %} 38 | -------------------------------------------------------------------------------- /server/accounts/templates/account/password_reset.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load url from future %} 4 | {% load i18n %} 5 | {% load bootstrap_tags %} 6 | {% load account_tags %} 7 | 8 | {% block head_title %}{% trans "Password reset" %}{% endblock %} 9 | {% block header %} 10 |
    11 |
    12 |

    Password reset

    13 |
    14 |
    15 | {% endblock %} 16 | 17 | {% user_display request.user as user_display %} 18 | 19 | {% block content %} 20 |
    21 |
    22 |
    23 | {% trans "Password reset" %} 24 |

    {% trans "Forgot your password? Enter your email address below, and we'll send you an email allowing you to reset it." %}

    25 |
    26 | {% csrf_token %} 27 | {{ form|as_bootstrap }} 28 |
    29 | 30 |
    31 |
    32 |
    33 |
    34 |
    35 | {% endblock %} 36 | 37 | {% block scripts %} 38 | 41 | {% endblock %} 42 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/admin/pending_content_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base_sidenav.html" %} 2 | 3 | {% block header %} 4 |
    5 |
    6 |

    Scheduled Objects

    7 |
    8 |
    9 | {% endblock %} 10 | 11 | {% block sidenav %} 12 |
    13 | 21 |
    22 | {% endblock %} 23 | 24 | {% block content %} 25 | 36 | 37 | {% include page_template %} 38 | {% endblock %} 39 | 40 | {% block scripts %}{{ block.super }} 41 | {% include "entry_scripts.html" %} 42 | {% endblock %} 43 | -------------------------------------------------------------------------------- /server/mturk/templates/mturk/examples.html: -------------------------------------------------------------------------------- 1 | {% if examples_good or examples_bad %} 2 |
    3 |

    Examples

    4 | 5 |
    6 | {% if examples_good %} 7 |
    8 |

    Positive examples

    9 | {% for c in examples_good %} 10 |
    11 |
    12 |
    13 | {% include content_thumb_template with entry=c %} 14 |
    15 |
    16 |

    {{ html_yes|safe }}

    17 |
    18 |
    19 |
    20 | {% endfor %} 21 |
    22 | {% endif %} 23 | {% if examples_bad %} 24 |
    25 |

    Negative examples

    26 | {% for c in examples_bad %} 27 |
    28 |
    29 |
    30 | {% include content_thumb_template with entry=c %} 31 |
    32 |
    33 |

    {{ html_no|safe }}

    34 |
    35 |
    36 |
    37 | {% endfor %} 38 |
    39 | {% endif %} 40 |
    41 | {% endif %} 42 | --------------------------------------------------------------------------------