Пример #1
0
    def test_send_gender_feedback(self):
        """ send face feedback """

        feedback_info = FeedbackInfo(end_user_id='robert_python_test_key',
                                     session_id='from_your_browser',
                                     event_type='annotation',
                                     output_id='oooooooid')

        m = self.app.models.get(model_id=GENERAL_MODEL_ID)

        identities = [
            Concept(concept_id='xx', value=True),
            Concept(concept_id='x2', value=False)
        ]
        genders = [
            Concept(concept_id='male', value=True),
            Concept(concept_id='female', value=False)
        ]
        face = Face(identity=FaceIdentity(identities),
                    gender_appearance=FaceGenderAppearance(genders))

        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8)), face=face)
        ]

        ret = m.send_region_feedback(input_id='xyz',
                                     url=sample_inputs.DOG_TIFF_IMAGE_URL,
                                     regions=regions,
                                     feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)
Пример #2
0
    def test_send_multicultural_feedback(self):
        """ send face feedback """

        feedback_info = FeedbackInfo(end_user_id='robert_python_test_key',
                                     session_id='from_your_browser',
                                     event_type='annotation',
                                     output_id='oooooooid')

        m = self.app.models.get('general-v1.3')

        identities = [
            Concept(concept_id='xx', value=True),
            Concept(concept_id='x2', value=False)
        ]
        cultures = [
            Concept(concept_id='american', value=True),
            Concept(concept_id='asian', value=False)
        ]
        face = Face(
            identity=FaceIdentity(identities),
            multicultural_appearance=FaceMulticulturalAppearance(cultures))

        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8)), face=face)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)
Пример #3
0
  def test_concept_object(self):
    """ test concept object """
    con = Concept("my_concept_1")
    self._verify_concept(con)
    data = con.dict()
    self.assertIn('name', data)

    con = Concept("my_concept_1", concept_id='id2', value=0)
    self._verify_concept(con)
    data = con.dict()
    self.assertIn('name', data)
    self.assertIn('id', data)
    self.assertIn('value', data)
Пример #4
0
  def test_send_complete_multicultural_feedback(self):
    """ send face feedback """

    feedback_info = FeedbackInfo(
        end_user_id='robert_python_test_key',
        session_id='from_your_browser',
        event_type='annotation',
        output_id='oooooooid')

    m = self.app.models.get('general-v1.3')

    identities = [Concept(concept_id='xx', value=True), Concept(concept_id='x2', value=False)]
    ages = [Concept(concept_id='1', value=True), Concept(concept_id='2', value=False)]
    genders = [Concept(concept_id='male', value=True), Concept(concept_id='female', value=False)]
    cultures = [
        Concept(concept_id='american', value=True),
        Concept(concept_id='asian', value=False)
    ]

    face = Face(
        identity=FaceIdentity(identities),
        age_appearance=FaceAgeAppearance(ages),
        gender_appearance=FaceGenderAppearance(genders),
        multicultural_appearance=FaceMulticulturalAppearance(cultures))

    regions = [Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8)), face=face)]

    ret = m.send_region_feedback(
        input_id='xyz',
        url=sample_inputs.DOG_TIFF_IMAGE_URL,
        regions=regions,
        feedback_info=feedback_info)
    self.assertEqual(ret['status']['code'], 10000)
Пример #5
0
    def test_send_region_feedback(self):
        """ send region feedback with concepts """

        feedback_info = FeedbackInfo(end_user_id='robert_python_test_key',
                                     session_id='from_your_browser',
                                     event_type='annotation',
                                     output_id='oooooooid')

        m = self.app.models.get('general-v1.3')

        concepts = [Concept(concept_id='ab', value=False)]
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8),
                              feedback_type='accurate'),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)

        concepts = [
            Concept(concept_id='ab', value=False),
            Concept(concept_id='bb', value=True)
        ]
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8)),
                   concepts=concepts),
            Region(RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.8, 0.85)),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)
    def test_predict_image_url_select_concepts(self):

        # url, with select_concepts, by name
        m = self.app.models.get('general-v1.3')
        select_concepts = [
            Concept(concept_name='beer'),
            Concept(concept_name='vehicle')
        ]
        res = m.predict_by_url(urls[0], select_concepts=select_concepts)
        self.assertEqual(len(res['outputs'][0]['data']['concepts']), 2)

        # url, with select_concepts by id
        select_concepts = [
            Concept(concept_id='ai_hK1KnTCJ'),
            Concept(concept_id='ai_m52MdMR3'),
            Concept(concept_id='ai_fN8NZ9JV')
        ]
        res = m.predict_by_url(urls[0], select_concepts=select_concepts)
        self.assertEqual(len(res['outputs'][0]['data']['concepts']), 3)
Пример #7
0
    def test_send_region_feedback(self):
        """ send region feedback with concepts """

        feedback_info = FeedbackInfo(end_user_id='robert_python_test_key',
                                     session_id='from_your_browser',
                                     event_type='annotation',
                                     output_id='oooooooid')

        m = self.app.models.get(model_id=GENERAL_MODEL_ID)

        concepts = [Concept(concept_id='ab', value=False)]
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8),
                              feedback_type='accurate'),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(input_id='xyz',
                                     url=sample_inputs.DOG_TIFF_IMAGE_URL,
                                     concepts=['matid2'],
                                     not_concepts=['lambo'],
                                     regions=regions,
                                     feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)

        concepts = [
            Concept(concept_id='ab', value=False),
            Concept(concept_id='bb', value=True)
        ]
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8)),
                   concepts=concepts),
            Region(RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.8, 0.85)),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(input_id='xyz',
                                     url=sample_inputs.DOG_TIFF_IMAGE_URL,
                                     concepts=['matid2'],
                                     not_concepts=['lambo'],
                                     regions=regions,
                                     feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)
Пример #8
0
    def test_predict_image_url_select_concepts(self):

        # url, with select_concepts, by name
        m = self.app.models.get(model_id=GENERAL_MODEL_ID)
        select_concepts = [
            Concept(concept_name='beer'),
            Concept(concept_name='vehicle')
        ]
        res = m.predict_by_url(sample_inputs.METRO_IMAGE_URL,
                               select_concepts=select_concepts)
        self.assertEqual(10000, res['status']['code'])
        self.assertEqual(len(res['outputs'][0]['data']['concepts']), 2)

        # url, with select_concepts by id
        select_concepts = [
            Concept(concept_id='ai_hK1KnTCJ'),
            Concept(concept_id='ai_m52MdMR3'),
            Concept(concept_id='ai_fN8NZ9JV')
        ]
        res = m.predict_by_url(sample_inputs.METRO_IMAGE_URL,
                               select_concepts=select_concepts)
        self.assertEqual(10000, res['status']['code'])
        self.assertEqual(len(res['outputs'][0]['data']['concepts']), 3)
  def test_concept_object(self):
    """ test concept object """
    con = Concept("my_concept_1")
    self._verify_concept(con)
    data = con.dict()
    self.assertIn('name', data)

    con = Concept("my_concept_1", concept_id='id2', value=0)
    self._verify_concept(con)
    data = con.dict()
    self.assertIn('name', data)
    self.assertIn('id', data)
    self.assertIn('value', data)
Пример #10
0
def prediction_generator(predict_model, predict_images, predict_concepts,
                         min_predict_value):
    select_concept_list = [
        Concept(concept_id=concept) for concept in predict_concepts
    ]
    try:
        model = CL_APP.models.get(predict_model)
        for image in predict_images:

            # Check whether file need to chunk or not
            if image.multiple_chunks:
                string_buffer = cStringIO.StringIO()
                for chunk in image:
                    string_buffer.write(chunk)
                    string_buffer.flush()

                img_base64 = base64.encodestring(string_buffer.getvalue())
                string_buffer.close()

            # Small size file should read direct instead
            else:
                img_string = image.read()
                img_base64 = base64.encodestring(img_string)

            if len(select_concept_list) > 0:
                predict_result = model.predict_by_base64(
                    img_base64, select_concepts=select_concept_list)

            else:
                predict_result = model.predict_by_base64(
                    img_base64, min_value=min_predict_value)

            yield json.dumps(predict_result)

    except ApiError as api_err:
        yield {'code': 500, 'message': api_err.error_details}

    except ApiClientError:
        yield {'code': 500, 'message': 'Error while predict image'}
def clarifai_detection_object_in_image(base64_image):
    start = time.time()

    select_concept_list = list()
    for predefined_concept in predefined_concepts:
        select_concept_list.append(Concept(concept_name=predefined_concept))

    response = model.predict_by_base64(base64_bytes=base64_image,
                                       select_concepts=select_concept_list)

    results = []
    for clarifai_concept in response['outputs'][0]['data']['concepts']:
        print(
            str(clarifai_concept['name']) + ': ' +
            str(clarifai_concept['value']))
        if clarifai_concept['value'] >= 0.1:
            results.append(
                DetectionResult(tag=clarifai_concept['name'],
                                score=clarifai_concept['value']).__dict__)

    end = time.time()
    print('Cl took: ' + str(end - start) + ' with the return results: ' +
          str(response))
    return results
Пример #12
0
    def test_send_different_region_feedbacks_with_enum_vars(self):
        """ send different kind of region feedbacks with enums
        - accurate
        - misplaced
        - not_detected
        - false_positive
    """
        feedback_info = FeedbackInfo(end_user_id='robert_python_test_key',
                                     session_id='from_your_browser',
                                     event_type='annotation',
                                     output_id='oooooooid')

        m = self.app.models.get('general-v1.3')

        # positive
        concepts = [Concept(concept_id='ab', value=False)]
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8),
                              feedback_type=FeedbackType.accurate),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)

        # misplaced
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.8, 0.9),
                              feedback_type=FeedbackType.misplaced),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)

        # misplaced
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.4, 0.5),
                              feedback_type=FeedbackType.not_detected),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)

        # false_positive
        regions = [
            Region(RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.4, 0.5),
                              feedback_type=FeedbackType.false_positive),
                   concepts=concepts)
        ]

        ret = m.send_region_feedback(
            input_id='xyz',
            url='https://samples.clarifai.com/dog.tiff',
            concepts=['matid2'],
            not_concepts=['lambo'],
            regions=regions,
            feedback_info=feedback_info)
        self.assertEqual(ret['status']['code'], 10000)
Пример #13
0
def test_bulk_update_with_regions(mock_http_client):  # type: (mock.Mock) -> None
  mock_execute_request = mock_request(
      mock_http_client, """
{
  "status": {
    "code": 10000,
    "description": "Ok"
  },
  "inputs": [
    {
      "id": "@inputID",
      "data": {
        "image": {
          "url": "@imageURL"
        },
        "concepts": [
          {
            "id": "@concept1",
            "name": "@concept1",
            "value": 1,
            "app_id": "@appID"
          },
          {
            "id": "@concept2",
            "name": "@concept2",
            "value": 0,
            "app_id": "@appID"
          }
        ]
      },
      "created_at": "2019-01-29T15:23:21.188492Z",
      "modified_at": "2019-01-29T15:23:21.575667Z",
      "status": {
        "code": 30200,
        "description": "Input image modification success"
      }
    }
  ]
}
""")

  app = ClarifaiApp()
  images = app.inputs.bulk_update(
      [
          Image(
              image_id='@inputID',
              regions=[
                  Region(
                      region_info=RegionInfo(
                          bbox=BoundingBox(0.5, 0.5, 1.0, 1.0),
                          feedback_type=FeedbackType.misplaced),
                      concepts=[
                          Concept(concept_id='@concept1', value=True),
                          Concept(concept_id='@concept2', value=False)
                      ],
                      region_id='@regionID',
                      face=Face(
                          identity=FaceIdentity(concepts=[
                              Concept(concept_id='@faceConcept1', value=True),
                              Concept(concept_id='@faceConcept2', value=False),
                          ])))
              ])
      ],
      action='overwrite')

  assert images[0].input_id == '@inputID'
  assert images[0].url == '@imageURL'
  assert images[0].status.code == 30200

  assert_request(
      mock_execute_request, 'PATCH', '/v2/inputs', """
{
  "inputs": [
    {
      "id": "@inputID",
      "data": {
        "regions": [
          {
            "id": "@regionID",
            "region_info": {
              "bounding_box": {
                "top_row": 0.5,
                "left_col": 0.5,
                "bottom_row": 1,
                "right_col": 1
              },
              "feedback": "misplaced"
            },
            "data": {
              "concepts": [
                {
                  "id": "@concept1",
                  "value": 1
                },
                {
                  "id": "@concept2",
                  "value": 0
                }
              ],
              "face": {
                "identity": {
                  "concepts": [
                    {
                      "id": "@faceConcept1",
                      "value": 1
                    },
                    {
                      "id": "@faceConcept2",
                      "value": 0
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    }
  ],
  "action": "overwrite"
}
        """)
Пример #14
0
from clarifai.rest import ClarifaiApp
from clarifai.rest import Image as ClImage
from clarifai.rest import ClarifaiApp, Concept

app = ClarifaiApp(api_key='d4d5faab185e4590b14866212e252f3b')

model = app.models.get('general-v1.3')

select_concept_list = [Concept(concept_name='car')]
print(
    model.predict_by_url(
        url=
        'https://s.driving-tests.org/wp-content/uploads/2012/02/back-parking.jpg',
        select_concepts=select_concept_list))
Пример #15
0
  def test_send_different_region_feedbacks(self):
    """ send different kind of region feedbacks
        - accurate
        - misplaced
        - not_detected
        - false_positive
    """
    feedback_info = FeedbackInfo(
        end_user_id='robert_python_test_key',
        session_id='from_your_browser',
        event_type='annotation',
        output_id='oooooooid')

    m = self.app.models.get('general-v1.3')

    # positive
    concepts = [Concept(concept_id='ab', value=False)]
    regions = [
        Region(
            RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.7, 0.8), feedback_type='accurate'),
            concepts=concepts)
    ]

    ret = m.send_region_feedback(
        input_id='xyz',
        url=sample_inputs.DOG_TIFF_IMAGE_URL,
        concepts=['matid2'],
        not_concepts=['lambo'],
        regions=regions,
        feedback_info=feedback_info)
    self.assertEqual(ret['status']['code'], 10000)

    # misplaced
    regions = [
        Region(
            RegionInfo(bbox=BoundingBox(0.3, 0.2, 0.8, 0.9), feedback_type='misplaced'),
            concepts=concepts)
    ]

    ret = m.send_region_feedback(
        input_id='xyz',
        url=sample_inputs.DOG_TIFF_IMAGE_URL,
        concepts=['matid2'],
        not_concepts=['lambo'],
        regions=regions,
        feedback_info=feedback_info)
    self.assertEqual(ret['status']['code'], 10000)

    # misplaced
    regions = [
        Region(
            RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.4, 0.5), feedback_type='not_detected'),
            concepts=concepts)
    ]

    ret = m.send_region_feedback(
        input_id='xyz',
        url=sample_inputs.DOG_TIFF_IMAGE_URL,
        concepts=['matid2'],
        not_concepts=['lambo'],
        regions=regions,
        feedback_info=feedback_info)
    self.assertEqual(ret['status']['code'], 10000)

    # false_positive
    regions = [
        Region(
            RegionInfo(bbox=BoundingBox(0.1, 0.2, 0.4, 0.5), feedback_type='false_positive'),
            concepts=concepts)
    ]

    ret = m.send_region_feedback(
        input_id='xyz',
        url=sample_inputs.DOG_TIFF_IMAGE_URL,
        concepts=['matid2'],
        not_concepts=['lambo'],
        regions=regions,
        feedback_info=feedback_info)
    self.assertEqual(ret['status']['code'], 10000)
Пример #16
0
def make_prediction(request):
    contexts = dict()

    if request.method == 'POST':

        predict_model = request.POST.get('predict_model', '')
        predict_concepts = request.POST.get('predict_concepts', '')
        predict_concepts = [lambda: predict_concepts.split(','),
                            lambda: []][predict_concepts == '']()
        select_concept_list = [
            Concept(concept_id=concept) for concept in predict_concepts
        ]
        min_predict_value = request.POST.get('min_predict_value', '0')
        min_predict_value = float(min_predict_value)
        predict_images = request.FILES.getlist('predict_images')

        if not predict_model == '':
            if None not in predict_images:
                return StreamingHttpResponse(gen_test(),
                                             content_type='text/plain')
                # return StreamingHttpResponse(prediction_generator(predict_model=predict_model,
                #                                                   predict_images=predict_images,
                #                                                   predict_concepts=predict_concepts,
                #                                                   min_predict_value=min_predict_value),
                #                              content_type='application/json')
                # try:
                #     model = CL_APP.models.get(predict_model)
                #     prediction_data = list()
                #     for image in predict_images:

                #         # Check whether file need to chunk or not
                #         if image.multiple_chunks:
                #             string_buffer = cStringIO.StringIO()
                #             for chunk in image:
                #                 string_buffer.write(chunk)
                #                 string_buffer.flush()

                #             img_base64 = base64.encodestring(string_buffer.getvalue())
                #             string_buffer.close()

                #         # Small size file should read direct instead
                #         else:
                #             img_string = image.read()
                #             img_base64 = base64.encodestring(img_string)

                #         if len(select_concept_list) > 0:
                #             predict_result = model.predict_by_base64(img_base64,
                #                                                      select_concepts=select_concept_list)

                #         else:
                #             predict_result = model.predict_by_base64(img_base64, min_value=min_predict_value)

                #         prediction_data.append(predict_result)

                #     contexts.update({
                #         'code': 10000,
                #         'message': 'Successfully made prediction of '+str(len(predict_images))+' images.',
                #         'prediction_data': prediction_data
                #     })

                # except ApiError as api_err:
                #     contexts.update({
                #         'code': 500,
                #         'message': api_err.error_details
                #     })
                #     pass

                # except ApiClientError:
                #     pass

            else:
                status_alert = {
                    'code': 400,
                    'title': 'Failed',
                    'message': 'Images must be presented in request form',
                    'type': 'error'
                }
                contexts.update({'status_alert': status_alert})

        else:
            contexts.update({'code': 300, 'message': 'Model must be specify'})
    else:
        contexts.update({
            'code':
            405,
            'message':
            'Method not allowed or Request data not valid'
        })

    return JsonResponse(contexts)