2017-07-07 2 views
0

Je suis nouveau à MTurk et j'ai essayé de mettre en œuvre mon application web pour la sélection de points sur cette plate-forme. J'ai réussi à créer un HIT en utilisant ExternalQuestion basé sur le tutoriel de kaflurbaleen.blogspot. Cependant, j'ai réalisé que le HIT ne fonctionnait pas comme je le souhaitais quand j'ai testé le code dans le bac à sable. J'ai trouvé deux problèmes comme ci-dessous.HITs créés en utilisant externalQuestion de MTurk ne travaillaient pas dans le bac à sable

  1. Je n'ai pas pu trouver le 'assignmentId' qui était censé être ajouté à l'URL. J'ai vérifié le workersandbox et a trouvé l'adresse suivante avant l'acceptation de la tâche https://workersandbox.mturk.com/mturk/preview?groupId=3JCELWMC4P1FAXE0GMTAW1L96T93VS

    Pour autant que je comprends, le « assignmentId » devrait être ajouté à l'URL après acceptation du lien ci-dessus. Et ce paramètre doit être renvoyé au serveur Mturk en utilisant la méthode 'externalSubmit'. Je trouve que les paramètres suivants après l'acceptation hitId & prevHitSubmitted & prevRequester & requesterId & prevReward & hitAutoAppDelayInSeconds & groupeId & signature

  2. J'ai aussi réalisé l'application ne fonctionnait pas comme on le souhaite dans le iframe. Chaque (clic de souris + décalage) aurait dû créer une sphère rouge comme indiqué par le site Web d'origine https://s3.amazonaws.com/www.pickvertex3js.com/vertexpicking.html.

J'ai essayé de google pour obtenir des réponses avec peu de succès. Je suis maintenant à bout de nerfs avec ces deux problèmes qui retardent mes recherches. Toute aide sera très appréciée. Les codes pour créer le HIT en utilisant BOTO3 sont les suivants.

import boto.mturk.connection 

# define the host environment 
sandbox_host = 'mechanicalturk.sandbox.amazonaws.com' 
real_host = 'mechanicalturk.amazonaws.com' 

mturk = boto.mturk.connection.MTurkConnection(
     host = sandbox_host, 
     debug = 1 
     ) 

# test the setup of boto by printing the version and account balance 
print(boto.Version) 
print(mturk.get_account_balance()) 

# link to my web app, which will be loaded by the iframe of Mturk 
URL = "https://s3.amazonaws.com/www.pickvertex3js.com/vertexpicking.html" 

# setting task description of the iframe 
title = "A Special HIT for Picking!" 
description = "Vertex picking!" 
keywords = ["3D mesh", "vertices"] 
frame_height = 500 # the height of the iframe holding the external hit 
amount = .00 

# creating the HIT (task) 
questionform = boto.mturk.question.ExternalQuestion(URL, frame_height) 
response = mturk.create_hit( 
     title = title, 
     description = description, 
     keywords = keywords, 
     question = questionform, 
     reward = boto.mturk.price.Price(amount = amount), 
     response_groups = ('Minimal', 'HITDetail'), 
     ) 

# trying to get some outputs 
HIT = response[0] 
assert response.status 

print ('[create_hit(%s, $%s): %s]' % (URL, amount, HIT.HITId)) 

# The response included several fields that will be helpful later 
print ('Your HIT has been created. You can see it at this link:') 
print ('https://workersandbox.mturk.com/mturk/preview?groupId={}'.format(HIT.HITTypeId)) 
print ('Your HIT ID is: {}'.format(HIT.HITId)) 

Répondre

0

J'ai également posté une réponse sur les forums des développeurs AWS, mais en l'ajoutant ici aussi.

Voici le message: https://forums.aws.amazon.com/thread.jspa?threadID=259228&tstart=0

Voici une copie de celui-ci pour d'autres sur le SO de bénéficier de:

J'ai eu un coup d'œil à vos coups sûrs, et pensé que je vous propose quelques suggestions ici. Tout d'abord, quelques éléments de base au cas où ils aideraient:

1) Le assignmentId est correctement ajouté à vos HITs. Vous pouvez le confirmer en chargeant la page que vous avez partagée (https://workersandbox.mturk.com/mturk/preview?groupId=3JCELWMC4P1FAXE0GMTAW1L96T93VS), en cliquant sur Afficher la source et en la faisant défiler jusqu'à l'étiquette. Vous devriez voir quelque chose qui ressemble à ceci: j'avais un regard

<iframe height="500" scrolling="auto" frameborder="0" align="center" src="https://s3.amazonaws.com/www.pickvertex3js.com/vertexpicking.html?assignmentId=38YMOXR4MW4S3P05XVRV37Q4QFGW6D&amp;hitId=33K3E8REWX0SAJQPACFE1K5LTDBX8G&amp;workerId=A39ECJ12CY7TE9&amp;turkSubmitTo=https%3A%2F%2Fworkersandbox.mturk.com" name="ExternalQuestionIFrame"></iframe> 

3) à:

<iframe height="500" scrolling="auto" frameborder="0" align="center" src="https://s3.amazonaws.com/www.pickvertex3js.com/vertexpicking.html?assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&amp;hitId=33K3E8REWX0SAJQPACFE1K5LTDBX8G" name="ExternalQuestionIFrame"></iframe> 

2) Une fois que vous acceptez le HIT, vous devriez voir que le changement d'étiquette pour ressembler à quelque chose comme ça votre code, et je peux confirmer qu'il fonctionne correctement lorsqu'il est chargé directement, mais ne semble pas fonctionner lorsqu'il est placé dans un IFRAME. Je suis allé un peu plus loin pour essayer de comprendre si la méthode onDocumentMouseDown() était même invoquée quand elle était affichée dans un IFRAME (j'ai ajouté un alert() dans cette fonction) et c'est le cas. Ma meilleure estimation, sans approfondir, est qu'il y a quelque chose à propos de la bibliothèque THREE qui n'est pas amicale avec la fenêtre IFRAME. Il est également possible qu'une ligne comme celle-ci:

var mouse3D = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, 
-(event.clientY/window.innerHeight) * 2 + 1, 
0.5); 

n'utilise pas la fenêtre de droite (c.-à-d., au lieu d'utiliser la fenêtre IFRAME, il utilise toute la fenêtre du navigateur, entraînant un comportement bizarre/mauvais/incorrect). La version courte est que je ne pense pas que vos problèmes sont liés à MTurk per-se, mais plutôt liés à IFRAME. En tant que solution de contournement non idéale, vous pouvez également envisager de lier directement le Worker à votre page (au lieu d'un IFRAME) et de le lier à l'URL de soumission sur MTurk. Ce n'est pas idéal, mais je pense que ça pourrait marcher.

Espérons que cela aide.