使用MTURk的externalQuestion创建的HIT不能在沙箱中工作

时间:2017-07-07 03:19:54

标签: python amazon boto3 mechanicalturk

我是MTurk的新手,并且一直在尝试在此平台上实施我的网络应用程序以进行点选。我已经使用来自kaflurbaleen.blogspot的教程使用ExternalQuestion成功创建了一个HIT。但是,当我在沙盒中测试代码时,我意识到HIT没有按预期工作。我发现了两个问题如下。

  1. 我找不到' assignmentId'应该附加到URL。我检查了workersandbox并在接受任务之前找到了以下URL https://workersandbox.mturk.com/mturk/preview?groupId=3JCELWMC4P1FAXE0GMTAW1L96T93VS

    据我了解,' assignmentId'应该在接受上面的链接后附加到URL。并且必须使用' externalSubmit'将此参数返回给Mturk服务器。方法。验收后我才发现以下参数 hitId&安培; prevHitSubmitted&安培; prevRequester&安培; requesterId&安培; prevReward&安培; hitAutoAppDelayInSeconds&安培;&的groupId放大器;签名

  2. 我也意识到应用程序在iframe中无法正常工作。每个(鼠标点击+移位)应创建一个红色球体,如原始网站https://s3.amazonaws.com/www.pickvertex3js.com/vertexpicking.html所示。

  3. 我试图谷歌寻求答案但收效甚微。我现在已经完成了这两个问题,这些问题阻碍了我的研究。任何帮助将非常感谢。使用BOTO3创建HIT的代码如下。

    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))
    

1 个答案:

答案 0 :(得分:0)

我也在AWS开发者论坛上发布了回复,但也在此处添加了回复。

这里有帖子:https://forums.aws.amazon.com/thread.jspa?threadID=259228&tstart=0

以下是SO的其他人的副本,以便从中受益:

我看了你的HIT,并认为我在这里提供了一些建议。首先,一些基线的事情,以防他们帮助:

1)正在将assignmentId正确添加到您的HIT中。您可以通过加载您共享的页面(https://workersandbox.mturk.com/mturk/preview?groupId=3JCELWMC4P1FAXE0GMTAW1L96T93VS),单击“查看源”,然后滚动到标记来确认这一点。你应该看到这样的东西:

<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)一旦你接受了HIT,你应该看到标签改变看起来像这样:

<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中似乎不起作用。我更进一步试图找出onDocumentMouseDown()方法是否在IFRAME中显示时被调用(我在该函数中添加了一个alert())并且它是。我最好的猜测是,在没有深入研究的情况下,有一些关于The THREE库的内容与IFRAME视口并不友好。它也可能是这样的一条线:

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

没有使用正确的窗口(即,不是使用IFRAME视口,而是使用整个浏览器窗口,导致奇怪/错误/错误的行为)。

简短版本是我认为你的问题与MTurk本身无关,而是与IFRAME有关。作为一种不太理想的解决方法,您还可以考虑将Worker直接链接到您的页面(而不是IFRAME),并将其链接回MTurk上的提交URL。它并不理想,但我认为它可行。

希望有所帮助。