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